Sales engine

Project
0
by · 10 items · 5 scripts · 1 flow · 4 resources anthropic apollo github gmail

Find leads, write one email each, save them to Gmail drafts, record the run

Flow
Triggers (1) disabled on import
  • schedule Monday morning: pull leads matching the ICP, research each one, write to the ones that deserve it, and leave the emails in Gmail drafts. Nothing is sent — a human opens each draft and presses send. Weekly rather than daily on purpose. Prospecting well is research-bound, not volume-bound, and five well-researched emails beat thirty generic ones — which is also what keeps the sending domain alive. Ships DISABLED and with dry_run on. To go live: edit config/icp.json in the repo, point anthropic / gh_auth / apollo / gmail at real resources, set dry_run false, then enable.
    Cron
    0 0 9 * * 1
    Timezone
    Europe/Paris

README

Sales engine

Finds leads matching your ICP, researches each one, writes an email to the ones that deserve it, and leaves them in Gmail drafts. You open a draft and press send.

Nothing is ever sent without you.

How it works

Everything the engine knows lives in a GitHub repo. config/icp.json holds the Apollo filters — that is the targeting, versioned, so changing who you contact is a pull request. The skills say what makes a lead worth an email, what counts as a reason to write, and how outreach sounds.

Apollo answers "who matches the filters". It cannot tell you whether there is a reason to write, and that is the agent's job: it looks for a concrete, checkable fact about that company — a job posting, something they shipped — and drops the lead if it cannot find one. Expect it to drop several. A generic email costs the address permanently.

Every run opens a pull request with two folders: sent/ for the emails written, dropped/ for the companies it passed on and why. Merging it keeps the record the next run reads — so the engine stops re-researching the same company every week, and stops writing twice to the same person.

Setup

1. Add four resources in Windmill

  • GitHub — a token that can create repos and write to them
  • Anthropic — your API key
  • Apollo — your API key
  • Gmail — the account the drafts are written in

2. Run init_sales_repo

Creates the repo with the skills and a starting ICP. Set dry_run: false to actually create it.

3. Check config/icp.json

Titles, countries, company sizes. This decides who gets contacted, so read it once before the first real run.

4. Run the sales_run flow

Set dry_run: false and go. You get drafts in Gmail and a pull request. Count on a few minutes: the agent researches each company before writing.

To make it weekly, enable the sales_run schedule — Monday morning.

Making it yours

Edit the ICP when the leads are wrong. Edit the skills when the emails are wrong: icp for who is worth writing to, research for what counts as a reason, voice and format-email for how it reads.

Read the drops, not just the emails. They are in the pull request with their reasons, and they tell you more about your targeting than the emails do. A run that drops everything usually means the ICP is too broad.

Merge the PR once you have sent the drafts. That is what keeps the memory: the next run reads it and leaves those companies alone.

Use Windmill AI sessions to change the engine itself — how many leads per run, what the agent is told, what gets recorded. Describe what you want and iterate from there.