What you can copy from this page
- The full prospecting prompt, ready for a Claude Project, a Cowork folder, Claude Code, ChatGPT or Grok
- A lead sheet header with a column for every source
- Where to look for each kind of reason, and the order we look for an email address
- The disqualifiers we drop before writing anything
- What went wrong when we started, and the fix for each
Why the reason comes before the list
Most prospecting prompts ask for a list of companies that fit. That is the easy half. The hard half is a reason this person should read an email from a stranger, and without it the email that follows is generic, no matter how good the writing is.
We learned that the hard way. The first emails we wrote from a list that merely fit our customer profile were all thrown out in review: no valid reason to write. So the prompt below makes the reason a required field. No reason, no lead.
The three kinds of valid reason, and where to find them
Prefer business-specific reasons from the last 90 days. An older trigger reads like you are behind. If nothing specific is public, an owner-type or industry reason is fine, as long as it is true for that lead.
The prospecting prompt
Paste this into a Claude Project's instructions (or a skill file in Claude Code or Cowork, or a ChatGPT project, or a Grok Bot). Fill the three blocks at the bottom. Then say "Find 10 prospects for segment 1".
You are my prospect researcher. You find businesses that fit my ideal
customer, find one valid reason to write to each owner, and fill my
lead sheet. You never contact anyone and you never write the email.
Sources: public pages only. Company websites (home, about, team,
contact, careers, footer), the owner's public X or LinkedIn posts,
job boards, news and press pages, public member directories. Nothing
behind a login. Do not scrape sites whose terms forbid it.
For each lead:
1. Check fit against MY IDEAL CUSTOMER and the DISQUALIFIERS.
Drop non fits. Skip anyone in MY CRM.
2. Find one valid reason to write. Label reason_type:
business-specific: something that happened at the business (a
hire, a new client, a merger, a launch, a post about the
problem). Give the URL and the date. Prefer the last 90 days.
owner-type: true for anyone who runs their kind of practice.
Quote the line from their site that proves it.
industry: a structural pain of their industry that is true for
this firm.
No valid reason, no lead.
3. Find a public email, in this order: the company site (contact,
about, team, footer, careers), the owner's X or LinkedIn bio,
public directories. Write where you found it in email_source.
Mark generic inboxes (info@, hello@) as generic. Never guess an
address and never build one from a pattern.
4. Find the colleague who might also own the problem (partner,
operations lead, office manager) on a public page, with the URL.
If there is none, write "none public".
5. Give one reason NOT to pursue them, if you see one.
6. Fill one row per lead in the LEAD SHEET format. Leave a field
empty rather than guess.
Rules: never invent numbers, names, dates or facts. Every claim
has a URL. Say "not found" when you looked and found nothing.
At the end, report: leads looked at, dropped and why, kept,
kept with a named email, kept with a generic inbox.
MY IDEAL CUSTOMER: {titles, company size, industries, regions}
DISQUALIFIERS: {who is never a fit}
MY CRM (names to skip): {paste or attach}The "reason NOT to pursue" line is borrowed from an agency owner on Reddit who called it the most valuable single line in any prompt he uses. It catches leads that just bought a competing tool or had a leadership change.
The lead sheet it fills
This is the lead sheet header we use. Give it to Claude as the output format, or create the same columns in Airtable or Google Sheets. Every reason and every email has its own source column, so you can check any row in a click.
first_name,last_name,title,company,website,linkedin,email,email_status,email_source,country,region,reason_type,reason,reason_source_url,reason_date,signal,signal_source_url,colleague_name,colleague_title,colleague_source_url,consent_basis,fit_score_1_5,notes,segmentThree columns most lead sheets miss and we would not go without: country (to filter to the US and Canada), consent_basis (Canada's anti spam law, CASL, generally needs consent for commercial email, so record the basis or skip the lead) and the colleague columns, so a later email can ask the right person.
The disqualifiers we drop first
Ours, for small service businesses. Replace with yours, but keep the idea: decide who you will not write to before you look.
Not a fit:
- Software startups and technical product companies
- Sales teams over two people
- Consumer only businesses
- Sellers of lead generation, outbound or AI agent services
- Anyone connected to us personally
- Anyone on the do not contact list
- Outside the US and CanadaWhat we got wrong the first time
- We started from a list, not a reason. We checked leads already in our CRM for fit and email, then wrote drafts. Every first email was thrown out for having no valid reason. Now we start from reasons.
- Most leads had no public email. Most of the leads we checked had no email on a public page, and after the fit, country and email filters only a few were left. Finding the address is most of the work, and guessing it is not an option.
- Many of the emails we found are shared inboxes. info@, hello@ and accounting@ come up often, because they are the only public addresses. The sheet now marks them, because a staff member may read the email first.
- Our sheet had no country column. Filtering to the US and Canada meant reading notes and websites by hand. Now it is a column.
- The same lead got two segment tags. One advisor was tagged as a consultant in the CRM and as a professional firm in our customer file. Fix: one written segment rule.
- One search tool needed a login we did not have. X user search returned an access error without user sign in, so we fell back to searching posts and the web. Plan a fallback for every source.
Run it on a schedule
Run it on the same day every week with a fixed target, and have it write one line to a log every time, even when it finds nothing:
{date} {time} | prospecting | found {n}, kept {n}, spent {amount}In Claude, a scheduled task or a weekly reminder to run the project works. The log line is what tells you, a month later, that it ran.
Where Pipeline Chief fits
Pipeline Chief's Sales agent runs this prospecting routine, fills your CRM with sourced rows, hands the leads with a valid reason to its email drafting, and waits for your OK on every email. It works in Claude, ChatGPT or Grok Bot. See pricing.