Skip to content
Almog Koren
← All writing
Building AI · 4 min read

My n8n Pipeline Finds Cold Email Leads. I Still Approve Every One.

My Instantly account had room for 1,000 leads and I was using 600, while a tenth of what I sent bounced. So I built a pipeline that finds K9 teams, checks every lead, writes one line in my voice, and asks me before anything goes out.

The lead pipeline in four steps: Find (Google Maps, web search, CSV), Check (fit and first line, Lead Gate, Reoon, domain check), a daily card to me (Approve, Edit, Skip), and Add to Instantly (1,000 lead guard and queue)

Last week I swapped Apollo for Instantly and wrote about what broke once I actually read the run reports. This is the next part. The question this time was simple: my Instantly plan holds 1,000 active leads, I was using about 600, and Instantly's own lead finder costs credits I didn't want to spend. Where do the other 400 come from?

The number I didn't want to see

Before adding a single lead, I looked at what was already going out. Across the live campaigns, about 1 in 10 new leads bounced. Three campaigns were over 15%. A healthy number is under 2%.

Bar chart of bounce rate by campaign: Trainers and Kennels 15.7%, Private Security 15.3%, Commercial Detection 15.2%, Search and Rescue 11.5%, Police and Sheriff 5.6%, US and Canada 5.1%, against a 2% healthy line
Bar chart of bounce rate by campaign: Trainers and Kennels 15.7%, Private Security 15.3%, Commercial Detection 15.2%, Search and Rescue 11.5%, Police and Sheriff 5.6%, US and Canada 5.1%, against a 2% healthy line
About 1 in 10 new leads bounced across my live campaigns. Three were over 15%. Healthy is under 2%.

A few other things turned up in the same hour:

  • A broken merge tag. One campaign opened with Hi{{firstName}}, with no space. People got "HiTorre,". For weeks.
  • Clicks that weren't people. One campaign showed 87 link clicks from 18 people. That's mail security scanners opening links, not interest. I turned off open and link tracking everywhere.
  • Private security: 0 replies from 98 emails. The copy was wrong for them, and some of the addresses were wrong too.

So filling 400 slots wasn't the real problem. Filling them with addresses that bounce would have made everything worse, including the campaigns that were working.

What I built

Six n8n workflows, built from one repo, with tests:

  1. Find, weekly. Google Maps through Apify for businesses (bed bug and mold detection dogs, K9 security, search and rescue teams, service dog programs), and Claude with web search for the ones Maps can't find, like sheriff's office K9 units and conservation programs. It works through 500 searches, a few at a time.
  2. Check, daily. Claude reads each website and decides if they actually run working dogs. If yes, it writes one opening line. Then the email gets checked three times: my existing Lead Gate (have we ever contacted them, are they blocklisted, did anyone there say no), Reoon for deliverability, and a domain check so I never email a second person at a company I already emailed.
  3. A daily email to me, one card per lead, with Approve, Edit and Skip.
  4. Add to Instantly, which only runs when I approve, and only if there's room under the 1,000 limit. If there isn't, the lead waits in a queue.

The AI writes one line

This is the part I care most about. My first rewrite of the email copy came out sounding like AI. I could tell, and so could anyone reading it.

So the rule now: the AI writes exactly one sentence, the opening line, and it has to be a fact from their own site. "Saw the Morgan County K9 program has Gator, Tango and Boaz working primarily in detection." Under 18 words, no compliments, no "I came across your website". If it can't find a fact, it uses a plain default line.

Everything after that line, I wrote. I pulled my own emails, the short ones I actually type, and wrote the sequences to sound like those.

A daily digest card for one lead, with company, email and city blurred, an AI written first line, and Approve, Edit and Skip buttons
A daily digest card for one lead, with company, email and city blurred, an AI written first line, and Approve, Edit and Skip buttons
One card per lead. The AI writes one line. I approve, edit or skip.

What the first real run did

  • Find loaded 500 searches, ran 10 of them, and pulled 125 places and organisations.
  • 81 were new. The rest were already in my contacted list (921 people) or known organisations.
  • Check looked at 20. 11 passed everything. 7 had no usable email. 2 were not a fit: a house cleaning service that partners with bed bug companies, and a hijacked site pretending to be a K9 trainer.
  • I approved all 11. Instantly went from 696 to 707 leads.
Funnel from the first run: 500 searches loaded, 10 run, 125 found, 81 new, 20 checked, 11 passed, 11 approved
Funnel from the first run: 500 searches loaded, 10 run, 125 found, 81 new, 20 checked, 11 passed, 11 approved
The first real run: 81 new organisations, 11 good enough to send to.

Cost of that run: about $0.60 of Claude, 11 of my 600 free Reoon checks for the month, and a bit over $1 of Apify.

What went wrong

Same lesson as last time: green doesn't mean it worked.

  • Anymailfinder failed on all 17 lookups with an invalid key. The run still showed success, because those leads fell back to their info@ address. I only saw it because I read the step output.
  • Four Google Maps searches failed because Apify's free plan caps memory across runs at 16 GB. Each run now asks for 4 GB, and failed searches retry next week.
  • The approve link was a plain link. Some email security scanners open every link in an email. One of those would have approved a lead for me. Approve now opens a confirm page first.
  • I logged myself out of n8n by calling its internal API from the browser to check a table. The request was refused and n8n ended my session.

What I don't know yet

Whether any of this gets replies. Bounces should drop. That part I'll know in a week. Replies take longer, and 11 leads is not a sample.

I also don't know yet if the opening line helps. The AI wrote better first lines than I expected. Whether a sheriff's office cares that I know their dogs' names is a different question.

What I do know: the system now does the boring part, and I still make the call on every single lead. For cold email, that's the part I wasn't willing to hand over.

#AI#n8n#Instantly#outbound#build in public

Building something with AI?

Fractional CTO, AI agents, or a rescue for an AI-built app.