How it works
Apollo CSV import
Client uses the Apollo filters and exclusion lists I pre-set, exports the seven required fields, drops the file into a dedicated Airtable view with only the import columns visible.
Auto-enrichment in parallel
Three jobs fire at once: Apify scrapes the contact's last LinkedIn post, Apify pulls profile headline + about, OpenAI analyses the company website.
4-email sequence written
Eight GPT-4.1-mini calls per contact, four emails plus four subjects, chained so each references what came before. Batched five at a time, self-re-triggers until the queue is empty.
Campaign auto-launches
Seven-step pipeline to SmartLead: create campaign, set schedule, attach inboxes, configure the 4-step sequence with delays, send leads in batches of 10, activate. One Airtable button.
Replies drafted in Airtable
SmartLead webhooks fire on lead category updates. A Leads Generated row is written with category and full reply text. GPT-4.1-mini drafts a personalised response waiting for one-click human send.
White-label per client
Each client gets their own Airtable base, SmartLead account, and data. One day a week of operator time runs the full program.
What it is
Email Leadgen is a productised B2B outbound system. Same Airtable base, same automations, same scripts replicated per client. I run the setup, manage Apollo filters and blacklists, and own the SmartLead infrastructure. The client only touches Apollo and Airtable. Every record, every status, every prompt sits in one place they can read.
It is not a one-off n8n flow with a UI bolted on. It is the same product shipped twice already, designed to be shipped a third, fourth, fifth time without rebuilding anything.
The 3-step client workflow
1. Find leads in Apollo
The client logs into Apollo with pre-set filters and blacklists, picks a list, exports the CSV.
2. Import into Airtable
Drop the CSV into the Contacts table through the import view, link the new contacts to a Sequence.
3. Hit Start
Set Email Status to Start. Enrichment, generation, campaign launch, sending, reply tracking, all automatic from there.
For a brand new sequence the client also flips Sequence Status to Start once, to create the SmartLead campaign. After that any new contact dropped into the same sequence flows through the live campaign automatically.
Architecture
Why Airtable-only, no n8n
The first version of every email flow I built was an n8n graph. It works for one client. It breaks the moment you try to run two, then three. Each client wants a tweak, the graph forks, the maintenance compounds.
Airtable as the sole orchestrator solves three problems at once. The client sees every record, every status, every prompt in a tool they already understand. I replicate the base into a new client workspace in minutes, not hours. And the trigger logic stays auditable, every script names its single owner and the order matters, so the race conditions are visible instead of buried in nodes.
Real reply rates, not the SmartLead vanity number
SmartLead's dashboard counts every reply as positive, including out-of-office, wrong-person, not-interested. The reply rate looks great and means nothing.
I added a Campaign Stats table that syncs daily from SmartLead and breaks replies down by category, Interested, Meeting Request, Meeting Booked, Information Request, Bad Timing, Not Interested, Out of Office, Wrong Person, Do Not Contact. The client sees the truthful number alongside the inflated one and can compare sequences on what actually matters.