free field guide automation
Research Leads and Draft Cold Emails With Harvey
Set up a free sales agent that researches companies, drafts outreach, and waits for you to check the research before anything sends.
Research Leads and Draft Cold Emails With Harvey
Harvey is a free, open-source sales agent that reads a company's website, finds a contact who fits, and drafts an email from what it found. This guide sets it up and shows you how to check the research against the draft before you approve a single send.
What this helps you do
A cold email works when it shows you know something real about the company. Writing that by hand means reading every site yourself. Harvey does the reading for you:
- It finds businesses that match the kind of customer you describe.
- It reads each company's own website for useful details, such as who runs it, what they are hiring for, or whether they take bookings online.
- It finds a contact who fits and checks whether the address is likely to work.
- It drafts a short email sequence based on those details.
- It reads replies, sorts them by intent, drafts answers, and steers interested people toward a meeting through your booking link.
By default, nothing sends until you approve it. That approval step is where your check happens.
Before you start
- A computer with Python 3.11 or newer. On a Mac, check with
python3 --versionin Terminal. If it shows 3.9, install a newer Python first, for example withbrew install python@3.13. - A Claude Pro or Max plan with Claude Code signed in. Harvey uses your plan instead of a pay-per-use API key. Codex with a ChatGPT plan also works on macOS and Linux.
- A mailbox to send from, ideally on a separate domain from your main business email, such as Gmail on Google Workspace or Microsoft 365.
- Your own website, so Harvey can learn what you sell.
- A mailing address for the footer of your emails. US anti-spam law requires one.
Harvey is MIT licensed and free. The default way of finding businesses is free too. Paid data sources are optional.
Terms to know
- Lead or prospect: a company or person you might sell to.
- Cold email: a first email to someone who has not heard from you before.
- Signal: a fact Harvey can check about a business, such as "running Google Ads" or "no online booking." You choose which signals it collects.
- Outbox: the review queue in Harvey's dashboard. Each draft sits next to the research it was based on.
- Dashboard: Harvey's web page, which runs only on your computer at
127.0.0.1:5555. - Warmup: sending small amounts of mail from a new mailbox for a few weeks so inbox providers trust it.
Step-by-step
-
Download Harvey and start Claude Code in its folder. Open Terminal and run the commands below. The repo includes setup instructions that turn Claude Code into a setup helper.
git clone https://github.com/ethanplusai/harvey.git cd harvey claude -
Ask for setup. Type
set up Harvey for me. Claude checks what is missing, installs it, asks for your mailbox and website, and trains Harvey on your product. Read each step before you approve it. -
Confirm what Harvey looks for. Harvey collects nothing until you confirm signals. To turn on all the free ones, run
harvey signals --confirm free. Inside the dashboard, the Signals tab shows each one in plain language. -
Set your footer address. Add your mailing address as
compliance.postal_addressin your Harvey config file. That isharvey.local.yamlif setup trained Harvey on your site, otherwiseharvey.yaml. Harvey warns you until this is set. -
Open the dashboard. Run
harvey dashboardand open the private link it prints in your browser. You should see the Today screen. -
Find a few companies. In the dashboard sidebar, open the tab for finding businesses. It shows each source with its price and an estimate before anything runs. The default source is free and needs no account. When it finishes, the Companies tab lists what it found. Then run
harvey runin Terminal so Harvey reads their sites and writes drafts. -
Check one draft against its research. Open the Outbox. Each email sits next to what Harvey knew: the company, how the address was found, and the signals the email uses. Use the checklist in the Copy this section.
-
Fix, approve, or reject. Press
Eto edit,Ato approve, orRto reject. Start by approving one email you have checked by hand.
The full setup reference lives in the Harvey repository on GitHub.
Copy this
Use this prompt with Claude or ChatGPT when you want a second read on a draft. Paste the research from Harvey's Outbox and the draft email, and replace the bracketed parts.
Copy this
Here is the research my sales agent collected on [COMPANY NAME] ([COMPANY WEBSITE]) and the cold email it drafted.
Research:
[PASTE THE SIGNALS AND NOTES FROM THE OUTBOX]
Draft:
[PASTE THE EMAIL]
Check the draft against the research. List every sentence that is not supported by the research, any detail that sounds like a guess, and whether the pitch fits what this company actually does. Then rewrite the email in under 75 words, in plain language, using only facts from the research. Do not add new claims.Prefer to check by hand? Ask these three questions for each draft. Does every specific detail appear in the research? Does the pitch fit what the company does? Would the reader know why you picked them?
Things to know
- Approval is the default. Keep it on at first. Harvey also has an autopilot mode that sends without asking. Approve a few batches by hand and read what it writes before you consider it.
- Use a separate sending domain and warm it up. Sending cold email from your main domain, or at high volume on day one, can put your mail in spam. Harvey's README suggests two to four weeks of warmup and starting at 10 to 20 emails a day.
- Follow the law where your leads live. Every cold email needs a truthful subject, an opt-out, and your mailing address. Harvey adds the opt-out line and footer for you. Rules differ in the EU, the UK, and Canada.
- It uses your Claude or ChatGPT plan's limits. Harvey throttles itself to leave room for your own work, but heavy runs still use your plan.
- The free source is thin for some trades. The default map source covers businesses with a storefront better than service businesses. The dashboard lists the paid sources and their prices side by side.
- Your data stays local. Contacts, drafts, and settings live in files on your computer.
If you like review-first setups like this, the review-first AI automations guide has more of them.
If something goes wrong
command not found: harvey: runsource .venv/bin/activateinside the harvey folder first.- Errors right after install on a Mac: the setup may have used the older built-in Python. Rebuild with Python 3.13 as the setup instructions describe.
- Discovery finds nothing: confirm signals first with
harvey signals --confirm free. Nothing is collected until you do. - Claude calls fail: run
claude loginand confirm your plan is active. If Harvey says your Claude CLI is too old, runclaude update. - The dashboard says "locked": open the exact link
harvey dashboardprinted, or runharvey dashboard --urlto print it again. - Emails land in spam: check your domain's SPF, DKIM, and DMARC records with
harvey warmup, and send fewer emails a day.
Final check
Open one draft in the Outbox next to its research. Pass if every specific detail in the email appears in the research, the pitch fits what the company does, and the email is still waiting for your approval.