Your first ten customers won't come from an ad. They'll come from you, writing to the right people one at a time, with a reason to write that isn't "I made a thing."
The slow part is that reason. Finding something real and recent about each person (a post, a launch, a hiring page, a podcast episode) takes ten minutes a lead. That's the part an agent is good at. Writing the email and pressing send stays with you. This guide sets up the whole loop: an ICP file, a lead list from public sources, a research subagent, a three-line email, and a simple way to track replies.
Write an ICP file
ICP stands for ideal customer profile: a short description of who you're looking for. Write it as a file, because both you and the agent will read it.
# Ideal customer profile
## Who
Owners of small custom-order businesses (bakeries, print shops,
made-to-order Etsy sellers) doing roughly 50 to 500 orders a month.
Owner does the admin themselves.
## The problem, in their words
"I copy every order from email into my calendar and still miss things."
## Signs they have it now
- Posts about missed or late orders
- Hiring a part-time admin or "order coordinator"
- Recently added custom orders or a new product line
- Uses a booking or order form plus a separate calendar
## Where they are, publicly
Their own website, local business directories, Etsy shop pages,
podcast and blog interviews, public posts on LinkedIn or Instagram.
## Not a fit
- Over 20 staff (they have a system already)
- Pure wholesale, no custom orders
- Anyone who has asked not to be contacted
The "signs they have it now" list is the important part. It tells the agent what a good reason to reach out looks like.
Find prospects from public sources
Start a spreadsheet by hand. Thirty rows is a good first batch (an example size, not a magic number). Good public sources:
- Company websites, especially "About," "Team" and "Contact" pages
- Business directories and association member lists
- Speaker pages for local events and trade shows
- Podcast guest lists and interviews in your niche
- People who've posted publicly about the problem
Use the contact details people publish for business: the email on their contact page, their booking form, a public business inbox. Don't guess personal addresses, buy lists, or pull data from behind a login. If you can only reach someone by digging, they're not a lead yet.
name,company,role,website,contact,source_url,hook,hook_url,hook_date,status,notes
Jane Example,Example Bakes,owner,https://example.com,hello@example.com,https://example.com/about,,,,new,
The hook, hook_url and hook_date columns are empty on purpose. That's the agent's job.
Build a research subagent
A subagent is a helper Claude Code can hand a task to. It runs in its own context window with its own instructions and its own list of allowed tools, then reports back. You define one as a Markdown file in .claude/agents/.
---
name: lead-researcher
description: Researches one prospect from public sources and returns one real, recent reason to reach out. Use for rows in gtm/leads.csv.
tools: Read, WebSearch, WebFetch
model: sonnet
---
You research one prospect at a time for a short, personal email.
First read gtm/icp.md. Then, for the person and company you're given:
1. Look only at public pages: their website, blog, public social
posts, interviews, podcasts, news, job listings.
2. Find ONE specific thing from the last 90 days that connects to
a "sign they have it now" in the ICP. Examples: a post about a
busy season, a new custom-order product, an admin job listing.
3. Open the page and confirm it says what you think it says.
Return exactly:
- hook: one sentence, in plain words, about what they did or said
- hook_url: the page where you found it
- hook_date: the date on the page (YYYY-MM-DD), or "unknown"
- fit: yes / maybe / no, with one line of reasoning against the ICP
Rules:
- If you find nothing recent and real, return "hook: none found".
Never invent or embellish. A blank is better than a guess.
- Don't look for personal emails, phone numbers, home addresses
or family details. Don't use logged-in or private pages.
- Don't write or send anything. You only research.
The tools line is the safety rail. This subagent can read files, search, and fetch public pages. It has no tool to write files or send email, so it can't contact anyone even if it wanted to. (If you've connected an email account to Claude Code through MCP, this allowlist keeps those tools away from the researcher.) Claude Code asks permission before web searches and fetches unless you've allowed them, which is a reasonable default while you're getting started.
If the .claude/agents/ folder didn't exist when you started your session, restart Claude Code so it picks up the new agent. Then, in the main conversation:
Use the lead-researcher agent on the first five rows of
gtm/leads.csv, one row at a time. Add each result to the hook,
hook_url and hook_date columns, and put the fit line in notes.
Don't change any other columns.
The main conversation updates the spreadsheet; the subagent just reports. Run five, check them, then run the next batch. When you're ready to research many leads at once, Subagents: parallel research without the mess shows how to fan out without losing track.
Check every hook yourself. Click the link. Read the page. Agents can misread a date or attach a post to the wrong person, and a wrong personal detail in a cold email is worse than none.
A three-line email
With a real hook, the email nearly writes itself. Three lines:
- The reason. The specific thing they did or said, in one sentence.
- The connection. The problem it points to, and what you're working on, in one sentence.
- A small question. Easy to answer, with no meeting required.
Here's an example:
Hi Jane, saw your post about the December rush and the order that nearly went out a day late.
I'm building a small tool that pulls custom orders from email straight into a calendar, for shops like yours.
Would it be useful if I sent you a two-minute video of how it works?
Then your name, your business's postal address, and one line like "Not useful? Reply 'no' and I won't write again." For subject lines, follow-ups and what to do when nobody replies, see Cold email that gets replies.
Send by hand at first
Copy the email into your own mail app, edit it, and send it yourself. Ten a day is plenty. Sending by hand is slower, and that's the point: you'll notice when a hook is off, when a line sounds robotic, and which openers people reply to. You can't learn that from a dashboard.
Don't let an agent send unattended. If you automate later, keep a human review before every send, cap how many go out per day, and set spending limits on any paid tools.
Track replies
Add a status column and keep it honest:
| Status | Meaning |
|---|---|
new | Researched, not sent |
sent | Sent, with the date in notes |
replied-yes | Interested; book a call or send the video |
replied-no | Not now; thank them, and note why |
no-reply | Nothing after one follow-up |
opted-out | Asked not to be contacted. Never email again |
One polite follow-up after a week is plenty. Once a week, ask Claude to read gtm/leads.csv and summarize reply rates by hook type and by source. Most of the learning is in the "no" replies: they tell you who isn't the customer, so update icp.md and the agent gets better too.
When someone says yes
A "yes" to your small question isn't a customer yet. It's permission to keep talking. Reply the same day with exactly what you offered (the two-minute video, the sample, the answer), then ask one more thing: "What do you use for this today, and what would make you switch?"
Write their answer in notes, word for word. After five or six of these conversations you'll hear the same reasons and the same objections, and that's your pricing page and your sales pitch, written by the people you want to sell to. When the time comes to ask for money, a founding price or a refundable reservation is a gentle first ask; Price it before you build it covers how to set one.
Ten customers is a small number on purpose. It's enough to prove the problem is real and that people will pay, and small enough that you can know every one of them by name.
The legal basics, briefly
This isn't legal advice. In the US, CAN-SPAM covers business-to-business email: honest sender details and subject lines, a valid postal address, a clear opt-out, and opt-outs honored within 10 business days. In the UK, the ICO says you can email corporate bodies, but sole traders count as individuals. Under the EU's GDPR, tell people where you got their details and that they can object, no later than your first message, and stop if they do. Cold email that gets replies covers the law in more detail. Across the board: no scraping private data, no bought lists, and honor every opt-out straight away.
Sources
- Create custom subagents (Claude Code docs)
- Tools reference (Claude Code docs)
- CAN-SPAM Act: A compliance guide for business (FTC)
- Electronic mail marketing (ICO)
- Art. 21 GDPR: Right to object (gdpr-info.eu)
- Art. 14 GDPR: Information to be provided where personal data have not been obtained from the data subject (gdpr-info.eu)
