A 4-week cold email pipeline that runs on Claude, not Apollo
The exact architecture we use to ship 50 personalized cold emails per day for $4 in compute. No Apollo. No Clay. No SDR team.
This is the production architecture we run at Growth Installations to drive outbound for our own RevOps consultancy. It replaces Apollo, Clay, Outreach, and a part-time SDR with about $4 per day of Claude usage and an Instantly mailbox.
The shape of it
Four jobs running on a single laptop, talking to one SQLite database.
- Scout: a Claude-driven research job that hunts fresh funding announcements every 5 minutes and writes structured prospect rows.
- Queue: a parser that watches Scout’s output and drops new rows into a queue file.
- Sender: an Instantly campaign with static templates that merge structured fields per prospect.
- Replies: a daily job that pulls Instantly replies into the database and tags them for human follow-up.
Each job is a Python script under 200 lines. The whole pipeline fits in a directory you can read in 20 minutes.
Why static templates beat AI-generated copy
The most common mistake we see in 2026 outbound: every cold email is generated fresh by an LLM at send time. The reply rate is terrible because the copy reads like every other AI-generated cold email in the inbox.
The fix is static templates with structured merge fields.
Write four touches by hand. Once. Convert them into a sequence. Then have your scout pipeline extract four structured facts per prospect:
funding_amount: “$30M Series B”funding_date_relative: “last week”vertical: “AI sales coaching”specific_signal: “moving upmarket into enterprise”
The template merges those four fields into a pre-written sentence. The result reads as if a human researched the prospect and wrote a personalized note. The work was done once, at template-design time, instead of 50 times per day at send time.
The scout prompt
Scout’s job is to find five prospects per fire. The prompt is roughly:
Find five US-based B2B SaaS companies that announced a Series A or Series B funding round in the last 14 days. For each, return: company name, domain, decision-maker name and LinkedIn URL, email pattern, and the four structured fields above. Skip anything in the avoid list.
The avoid list is a flat text file of companies we have already drilled. Scout never re-pitches.
The queue contract
Scout writes one markdown digest per fire. A small parser walks the digests, extracts the structured rows, and dedups against a SQLite seen-table. Fresh rows get appended to scout_queue.jsonl. The queue is the contract between research and sending.
The sender
Instantly’s v2 API takes a campaign ID and a lead with custom_variables. The sender script:
- Reads
scout_queue.jsonl. - For each fresh row, calls
POST /leadswith the structured fields as custom variables. - Marks the row consumed in SQLite.
The campaign’s four templates reference {{funding_amount}}, {{vertical}}, etc. Instantly handles the rest.
Reply tracking
Once a day, the replies job pulls every email in the campaign that has a non-empty reply field. Each reply gets a row in replies with the lead email, the reply text, and a sentiment tag. We pull that table into a Notion board every morning.
What this replaces
| Tool | Monthly cost | Replaced by |
|---|---|---|
| Apollo Professional | $149/seat | Claude scout + Google AI Answers |
| Clay Pro | $349/month | Static template architecture |
| Outreach | $130/seat | Instantly v2 API |
| Part-time SDR | $2,500-5,000 | Python pipeline |
Total stack cost for a one-person operator: ~$50/month (Instantly Hyperdrive plan + Claude usage).
The next post in this series
Coming up: how to write the four static templates so a CEO who reads 500 cold emails per week actually replies. We covered the architecture here. The copy is what makes or breaks the conversion rate.
Building something like this and stuck? Message me on LinkedIn.