← All notes
SystemsJun 10, 2026 · 3 min read

The architecture behind a cold outbound system that books real meetings

n8n handles orchestration, Claude handles personalization at scale, and a file based CRM holds it together. Built for agencies that live on booked calls.

Most cold outbound fails before the first email ever sends. The list came from a stale database, half the addresses bounce, and the “personalization” is a first name token in a template. Then the owner concludes cold email is dead. The real problem is that the system was never built as a system.

Here’s the architecture I build from, stage by stage. I’ve built every stage, published the core of it as free templates on my n8n creator page, and I run the front half of the pipeline on my own lead lists.

Stage 1: scrape a list worth mailing

Everything downstream inherits the quality of the list. I pull leads through an Apify actor that filters by industry, company size, and geography, and only returns validated business emails. It costs about $0.002 per lead. A thousand leads for two dollars changes how you behave: you can afford to be picky, toss weak segments, and re-scrape with tighter filters until the list actually matches the offer.

Stage 2: enrich and verify before anything else

Before a single AI token gets spent, every row gets cleaned. Emails get verified so the send list only has addresses that exist. Company names lose their legal suffixes, because “Acme Marketing Solutions LLC” in a sentence reads like a mail merge and “Acme” reads like a person typed it. First names get casualized to whatever a colleague would actually write.

The order here is the whole point. Personalizing an email to a dead address wastes money, and mailing a dead address damages sender reputation for the entire campaign. I wrote up the full reasoning on ordering separately.

Stage 3: personalize with Claude

Each lead gets a short, casual opening line generated by Claude that references something concrete about the company. The calls run in parallel, so a thousand leads finish in minutes, and with a small model it costs under fifty cents per thousand. Honestly, the prompt constraints matter more than the model: no flattery, no exclamation marks, no words the prospect’s industry would never use. The bar I aim for is an opener the prospect could believe came from a person who spent ninety seconds on their website.

Stage 4: send low and slow, book the replies

Sending runs through a pool of warmed mailboxes at low daily volume per inbox. Replies route to a human immediately. The automation earns the meeting and a person closes it. Every positive reply and booked call gets logged the moment it happens.

The CRM that holds it together

The whole pipeline reports into a file based CRM: a JSON file for accounts and stages, a meetings log, and an append-only payments ledger. A nightly audit script reconciles all three and flags anything that drifted, like a meeting that never got billed. Plain files sound primitive until you watch an owner grep their own pipeline. That one got its own note too.

Where n8n fits

n8n is the orchestration layer across all four stages: schedules, retries, error branches, and the handoffs between scrape, enrich, personalize, and send. It also gives the owner a picture of their own system. When you can open a canvas and watch leads move through it, the system stops being a black box you pay for and starts being an asset you own.

The number that matters

Open rates and reply rates are diagnostics. In sparring terms they’re the feints and cut kicks: they exist to set up the shot, and the scoreboard ignores them. The only metric this whole system answers to is cost per booked meeting with a qualified prospect. Get every stage doing its job and that number gets sharp enough to plan revenue around. That’s the whole game.