AI Automation • Cold Outreach Engine
How We Built Focal Frog's Own AI Cold Email Engine in n8n
A two-stage system that writes a genuinely personalised cold email for every lead with Claude, then sends it hands-free every night with the deliverability safeguards and audit trail a real outreach program needs.

The Project
Cold outreach is one of our main channels for new clients but done by hand it's brutal. Researching each prospect, writing a tailored email, sending it at the right time, and tracking who got what doesn't scale past a handful of leads a day. Generic mail merge blasts scale, but they don't work: they read like a template and land in spam.
So we built our own engine in n8n to get the best of both the personalisation of a hand written email at the volume of an automated one. The same system we now build for clients as a lead generation and email outreach service.
The Goals
- Write a uniquely personalised email for every single lead
- Send at scale without it ever reading like a robot wrote it
- Protect deliverability — stay out of spam, never blast bad addresses
- Run completely hands-off, on a schedule, with zero double-sends
- Keep a clear record of what was sent, when, and what failed
⚠️ The Challenge
- • Hand-written personalised emails don't scale past a few per day
- • Mail-merge blasts scale but read as generic and trigger spam filters
- • Naive automation risks double sending or mailing broken addresses
- • AI-written copy often has obvious "tells" that kill reply rates
- • Without logging, you never know what actually went out or failed
How We Built It: Two Engines
The Generation Engine
Turns a raw lead list into ready-to-send, personalised copy and only ever touches rows that haven't been written yet.
- Schedule trigger fires every 30 minutes
- Reads new leads from a Google Sheet
- Processes one lead at a time for clean pacing
- Skips any row that already has a subject and body
- Claude Sonnet 4.6 writes a subject, body, and P.S. line
- Writes the finished copy back to the sheet
The Sending Engine
Sends what's ready, every night, and writes the result of each send straight back to the sheet.
- Schedule trigger fires nightly at 22:00 (off-peak)
- Reads every lead from the sheet
- Keeps only rows that are written, unsent, and have a valid email
- Sends each email through Gmail, with no automation footer
- Marks the row "Sent" with a timestamp and message ID
- Marks any failure "Failed" with the error, so nothing is silent
The copy itself is written by Claude Sonnet 4.6, guided by a carefully engineered prompt: one specific, observed pain point per prospect, a single value line, and a soft ask that aims for a reply rather than a meeting. It stays between 50 and 90 words, skips the greeting when no real name exists (no "Hi Owner"), and avoids the dashes and filler that scream "AI." A structured output parser guarantees clean JSON every time, and a separate P.S. line is generated for easy A/B testing.
The Engineering That Makes It Reliable
Two engines, not one
Writing and sending are separate workflows. The copy lands in the sheet first, where it can be reviewed before anything goes out and a hiccup in one stage never blocks the other.
The sheet is a state machine
Columns for subject, body, sent_at, status, and message ID hold the state of every lead. Filters mean each run is idempotent: never re-write a finished row, never re-send a sent one. Safe to run anytime.
Row-number matching
Status updates are matched on the row number, not the email address so duplicate or blank emails can never overwrite the wrong record.
Deliverability-first copy
No links in the first touch, no em dashes, no automation footer, 50 to 90 words, written in a human voice with a soft reply-driven ask. Built to land in the inbox and earn a reply, not a booking.
Validation before send
A regex check filters out malformed addresses before they ever reach Gmail, protecting sender reputation from bounces.
Full audit trail
Every send is logged as Sent or Failed with a timestamp and either a Gmail message ID or the exact error. No guesswork, no silent failures.
What the System Delivers
The result is hand-written quality at automated volume. Every prospect gets an email that reads like a real person noticed something specific about their business generated, validated, sent, and logged without anyone lifting a finger. Because the sheet holds the state of every lead, the whole thing is safe to re-run, easy to audit, and impossible to accidentally double-send.
CAMPAIGN RESULTS (replace with your real figures)
The Stack
Want an outreach engine like this for your business?
We build the same two-stage automation for clients personalised at scale, deliverability safe, and fully hands off. Book a free call and we'll map what it would look like for your leads.
Book a Free Automation Call →