Think of this as a machine with two halves. Claude Code is the brain: it holds everything about your business (who you are, what you sell, who you target) and it decides who to reach and what to say. Clay is the data and the send: it finds businesses, fills in verified emails and phone numbers, and runs the campaign, but on its own it knows nothing about you. You supply the judgment; Clay supplies the reach. Neither half works alone, so keep this guide open beside the chat window while you set it up. This is the setup I run before I let the machine touch a real list.
One-time setup
You do this once, then you live inside Claude Code.
- [ ] Create a Clay account at clay.com. The free trial comes with credits so you can test everything below. Where a step needs an outside provider, you bring your own provider API keys.
- [ ] Install Claude Code. Search "Claude Code install" and run the one command for your system. You can drive it from the terminal, VS Code, or the desktop app; the plugin step has to run in the terminal.
- [ ] Connect Clay to Claude Code. Two ways in, described below. Pick based on how far you want to go.
Option A (easiest, start here): the public Clay connector. Go to the Clay connector page (or in Claude, open Settings, then Connectors, then search "Clay"). Click Connect, authorize with your Clay account, and you get free credits to test. In Claude Code, run /mcp and confirm Clay shows as connected. (MCP is just the standard that lets the agent talk to an outside service like Clay; /mcp lists the tools it can reach.) This runs enrichment straight from chat, but it does not build live Clay workflows.
Option B (the full version, builds live workflows): the Clay plugin. A plugin is an add-on that teaches Claude Code a new set of abilities.
- [ ] Type
/pluginin Claude Code. - [ ] Go to Marketplaces, then Add Marketplace, and add the Clay plugin marketplace.
- [ ] Install the Clay plugin, then run
/reload-plugins. - [ ] Ask Claude Code to connect: type
set up Clayand approve the skill it loads. - [ ] It gives you a link. If the terminal wraps it oddly, copy the whole thing and paste it into your browser by hand.
- [ ] Choose the workspace you want to connect, click Authorize, and return to the terminal.
- [ ] Restart Claude Code (
/exit, thenclaude --continue) so it picks up the connection.
Gotcha: the plugin signs in over OAuth (a browser login). If it shows 0 tools after install, run
/mcp, select the Clay server, and click Authenticate. That browser login is the step people miss.
- [ ] Verify the connection. Ask the agent: "Check if you can use Clay and tell me what actions and tools you have available." When it lists Clay actions (finding emails, enriching a company, looking up a phone number, reading a table), you are connected. Each action spends credits, so the next job is to give it context so it spends them well.
The five context files
This is the prerequisite. If Claude Code knows nothing about you, it can't write good cold email for you. Create these five plain-text files in a context/ folder before any run; editing them is how you point this template at your business, offer, and target.
- [ ]
business-profile.md(who you are and who you target). The most important file. Write who you are in plain language, then your ICP (ideal customer profile: the exact kind of business you want to reach, with size, geography, and the signals that mark a good fit). Name the buyer seniority you sell to (owner, founder, GM), and tell the agent to flag and skip a lead when only a junior contact comes back, never to guess a decision-maker. - [ ]
proof-and-offer.md(edit this per campaign). State your offer as Outcome plus Timeframe plus Risk reversal, for example "at least a handful of extra booked jobs in a month, or you don't pay." If you have no real client result yet, write the honest zero-to-one version: "I'm just getting this off the ground, no case study yet. I'll run it free for a month, and if it doesn't work you owe nothing. I'd just ask to use you as a reference." - [ ]
case-studies.md(your proof). List your wins. Label each one real or representative, and never let the agent turn a representative number into a claimed client result. - [ ]
website-copy.md(your voice). Paste your public-facing copy so the emails sound like the same company. - [ ]
faq.md(your objections). Common objections and honest answers, so replies stay grounded and claims get sanity-checked before they land in an email.
The goal prompt
This is the piece that makes the run hands-off. It sets an end condition and tells Claude Code to keep working until it hits it, checking its own output along the way. Copy the block below and swap the bracketed parts.
I'm looking for leads. I want [50] fully enriched leads that are [YOUR TARGET: e.g. HVAC or home-service] companies. We're trying to reach [YOUR BUYER: e.g. business owners, presidents, decision-makers].
Every lead must be fully enriched:
- a verified email address
- their business's pain points
- anything that recently happened in their business (a signal)
- any notable achievements
Then, using that data, write me a personalized subject line and body for each one. Everything should be genuinely personalized to that specific business.
The CTA / end result we want: get them to say yes to [YOUR ASK: e.g. us sending over a 90-second video that shows how we can help solve their specific pain point].
Do not stop until you have all [50] leads. Use a dynamic workflow to verify you've done everything correctly and that everything is accurate. When you're done, deliver a CSV with all this information. There should be no blank columns. Every lead needs an email, a subject line, and a body, and they should be enriched with the other data.
Behind the scenes the agent fans out into several sub-agents, sources and enriches in parallel, then aggregates the results, removes duplicates, verifies the yield, and rewrites anything that failed a check.
Copy rules (cheat-sheet)
Enriched data does not win clients. The email does. Bake these rules into the template so the agent follows them per lead.
Subject line (highest leverage): - True, specific, and lowercase, framed as the owner's own self-interest. - Not curiosity bait ("quick question"), never salesy, and it never names your service or "AI". - Reads like a local texting a local. About eight words at most, and line 1 of the body pays it off.
Body (60 to 90 words, hard cap around 110): 1. A true, specific observation pulled from the lead's own reviews or site. 2. One ambiguous proof line, vague on the client's name so the reader does not self-disqualify. 3. The offer: Outcome plus Timeframe plus Risk reversal. The risk reversal is non-negotiable. 4. A CTA that asks for a short video ("can I send a 90-second video?"), not a meeting. 5. A human tone: contractions, plain words, no jargon and no emoji.
The honesty rule that makes it work: for an early-stage business with no named client yet, the honest zero-to-one offer beats a big guarantee. Owners have heard every bold promise; "I'm still getting this off the ground, I'll run it free for a month" disarms the usual pitch and earns the reply.
Verify before you send
You cannot measure open rates reliably, so the honest proxy is a simulated panel. Have the agent spawn a few skeptical-recipient personas (busy, pitched constantly, burned by agencies before), let each one read only what the recipient would actually see, and vote: would I open this? Would I reply? Revise every lead any judge rejects, and repeat until a full round passes.
Hard rule: the verify loop must never talk the writer into inventing proof. If a judge demands a named client and you don't have one, the honest move is to drop the proof claim, not manufacture a client.
Launch the campaign
Once you have the CSV of enriched leads with copy, sending always happens on the Clay side.
- [ ] Import to Clay. Click Import Data, choose your leads CSV, pick comma as the delimiter, add it to a new blank table, and complete the import.
- [ ] Create a campaign. Go to campaigns, click Add Lead List, and choose the table you just built.
- [ ] Map your copy. Start from an empty message and use variables: type
/, pick your rows, and map your subject column to the subject and your body column to the body. Preview to confirm it fills in correctly across every lead. - [ ] Get sending accounts. If you have none, go to Sender Accounts, Add Account, then Buy Email Accounts. Pick Gmail or Outlook, type something close to your business name, and choose from the available domains (they only need to be similar, not exact).
- [ ] Set up follow-ups. A follow-up is a later email sent when there's no reply: schedule a second message a few days out, then a third.
Deliverability is the gate: whether your email lands in the inbox instead of spam. A brand-new domain isn't pre-warmed, so warm it for about two to three weeks before you send at volume, keep a small daily send cap per inbox, and set SPF, DKIM, and DMARC (the three records that prove you're allowed to send from the domain). Skipping this is the difference between the inbox and spam.
Cost discipline
The spend is small, but it adds up across a full list, so keep two habits.
- [ ] Test on a small batch first (roughly 5 to 25 rows) before any full run, so you catch a broken step before it runs on every lead.
- [ ] Early-exit on dead leads. Drop rows with no domain and no owner before the expensive email and review steps.
As an anchor: one clean lead is a fraction of a dollar, and a full 50-lead run is on the order of a dozen-plus dollars.
Honesty guardrails (non-negotiable)
These protect your reputation and your deliverability.
- [ ] Never fabricate a personalization hook, a review, an owner name, or an email. Pull it live and verify it, or write the honest generic version and flag the row for review.
- [ ] A verified email is earned per lead, not guaranteed. The hit rate is lower on the smallest shops, and the address you get is often a generic office inbox, not the owner's personal one. Never imply you reach the owner every time.
- [ ] "Representative" stays representative. Any number you carry over as representative keeps that label until you have a real, nameable result.
- [ ] Cold reply rates are low (low single digits). Faster outreach to the wrong people is just faster spam, so lean on true personalization and a real offer, not raw volume.
Appendix: what enrichment actually does
You do not need to memorize this. Claude Code works out which Clay action to call. It's here so you understand what "enrichment" means and which steps cost more than others.
| Step | What it does | Relative cost |
|---|---|---|
| Source businesses | Find local businesses by city and category | One of the pricier steps |
| Resolve domain | Turn a company name into its best-match domain (everything keys off this) | Cheap |
| Find decision-maker | Find people at the company, gated on seniority | Cheap |
| Find work email | Get the owner or work email from the name and domain | Moderate |
| Validate email | Confirm valid, catch-all, or invalid | Cheap |
| Review score | Pull the rating, review count, and place ID | Moderate |
| Review text | Pull review text for the personalization hook | One of the pricier steps |
| Website scrape (fallback) | Grab a published inbox, socials, and phone | Cheap |
The waterfall (trying data providers one after another until one returns a match, and only charging when one does) is why coverage reaches a far larger share of your list than any single vendor gives you.