AI Lead Generation: How to Automate Outbound With n8n + Voice AI
How to engineer an autonomous outbound pipeline: sourcing and enrichment in n8n, AI voice outbound with Vapi and Retell, CRM routing on a Supabase ledger, and automated follow-up.
Most outbound pipelines fail at the same place: they generate a list, then wait for a human to work it. AI lead generation closes that gap by turning sourcing, enrichment, first contact, and follow-up into a single running system instead of a to-do list. The point isn't to send more emails faster — it's to remove the human latency between "a lead exists" and "a qualified conversation is booked."
This is the mechanism behind the revenue pillar at Cuneihive: autonomous revenue infrastructure built on n8n for orchestration, Vapi and Retell for voice, and Supabase as the system of record. Here is how the pipeline actually gets engineered, node by node.
Why AI Lead Generation Is an Orchestration Problem, Not a Tool
Buying an AI SDR tool gives you a black box. Engineering an AI lead generation pipeline gives you a ledger you control — every lead's source, enrichment state, contact attempts, and disposition, queryable in one place. That distinction matters because outbound breaks in the seams between tools: a lead gets enriched but never called, or gets called twice, or gets marked "contacted" in one system and "new" in another.
n8n solves the seams. It is the orchestration layer that holds the whole flow — trigger, enrich, decide, act, record — as one workflow with explicit error branches, instead of five disconnected apps and a spreadsheet nobody trusts.
Sourcing and Enrichment in n8n
The pipeline starts with a source. In practice that's a Schedule Trigger firing on an interval, or a Webhook node catching leads from a form or ad platform. Either way, the first job is to normalize the raw record into a consistent shape.
The enrichment stage runs in a loop. Use a Loop Over Items node to batch leads so you respect provider rate limits, then an HTTP Request node to hit your enrichment API of choice for firmographics — headcount, industry, tech stack, role seniority. A Code node (or a set of Edit Fields nodes) then cleans and standardizes the output: lowercase the email, split the name, validate the phone into E.164 format so a voice agent can dial it.
Deduplication is where most builds leak. Before you write anything, check the ledger. Query Supabase (via an HTTP Request to PostgREST or the Supabase node) on a unique key like email, and route existing contacts down a separate branch so you never re-enrich or re-contact someone mid-sequence. Idempotency isn't optional — it's the difference between a system you can leave running and one you have to babysit.
The last enrichment step is scoring. Feed the enriched record to a Basic LLM Chain with a structured-output parser and a strict scoring rubric. Don't ask the model for prose — ask it for a JSON object: a fit score, a one-line reason, and a routing decision (voice, email, or disqualify). Structured output keeps the model on-rails and gives the next node something deterministic to branch on.
AI Voice Outbound With Vapi and Retell
For high-intent leads, voice removes the most latency. A booked call today beats an email thread that quietly goes cold. Both Vapi and Retell expose an outbound-call API, so from n8n it's an HTTP Request node that passes the lead's phone number, name, and enriched context into the call payload.
A few engineering rules keep voice outbound honest:
- Pass context into the agent, not just a phone number. The lead's company, role, and the reason they scored as a fit belong in the assistant's dynamic variables or system prompt so the opening line is specific, not generic.
- Respect calling windows. Compute local time from the lead's region in a Code node and gate the call — dialing at the wrong hour burns the number's reputation and the lead.
- Treat the call as async. The agent runs the conversation; your pipeline shouldn't block waiting for it. Configure the voice provider to POST the transcript, outcome, and any booked-meeting data back to an n8n Webhook when the call ends.
The agent's job on the call is narrow and clear: qualify against one or two criteria and either book a meeting or capture the reason it didn't. That end-of-call webhook is what makes the loop close — it writes the disposition straight back to the ledger. This is the exact pattern packaged in the Outbound Voice Campaign Engine: dial, qualify, book, and record, without a human dialing anything.
CRM Routing and the Data Ledger
Every branch of the pipeline converges on one write: update Supabase. This is the system of record, and it's what makes the whole thing auditable. Each lead row carries its source, enrichment payload, score, contact channel, attempt count, call outcome, and current stage. When a lead moves — say, a voice call books a meeting — a single Postgres/Supabase node updates the stage and stamps the timestamp.
From the ledger, CRM routing is a mechanical step. A Switch node reads the disposition and fans out: booked meetings sync to your CRM as opportunities, nurture-track leads get tagged, disqualified leads get marked so they never re-enter the sequence. Keeping the ledger as the source of truth — and treating the CRM as a downstream consumer — means a CRM outage never loses a lead. n8n's error output on each write node routes failures to a retry or alert branch instead of dropping the record silently.
Automated Follow-Up That Doesn't Rot
Most leads don't convert on first contact, and this is where pipelines quietly die. Build follow-up as its own scheduled workflow, not an afterthought bolted onto the outbound run.
A Schedule Trigger wakes on an interval and queries the ledger for leads in a follow-up state whose next-touch timestamp has passed. For each, decide the next action from the recorded history: a lead who didn't answer a call gets a different follow-up than one who answered but didn't book. An LLM node can draft the follow-up email personalized against the enrichment data, and the send node stamps the ledger so the same lead never gets two touches in one cycle. Cap the sequence — after a set number of attempts, the Switch routes the lead to a closed disposition. Automated follow-up should end cleanly, not loop forever.
Where This Fits
The pattern generalizes: source into a ledger, enrich and score deterministically, act through the right channel, record every outcome, and let a scheduled workflow handle the long tail. Voice is the highest-leverage channel for high-intent leads, but the same orchestration in n8n drives email and messaging pipelines too — the architecture doesn't change, only the action node does.
If you're running outbound off a spreadsheet and a rep's memory, that's the human latency worth removing first. See how the autonomous revenue infrastructure pillar is engineered, or Schedule a Build and we'll map your current pipeline into a system that runs itself.