AI Lead Enrichment Workflow for a Media/Sales Team
Reps spent hours researching every lead on raw lists that held little more than a name and a company. Outreach was slow, personalization inconsistent, and good leads went stale before anyone reached them.
Industry
Media/publishing business with an outbound sales team
Role
AI automation consultant — pipeline design, enrichment build, prompt design, documentation and handover
Impact
Lead research that used to take a rep an afternoon of tab-switching now takes a few minutes of review, and a new list goes from raw CSV to live outreach the same day.
01 - Problem
The problem
The team worked from purchased and traded lists, and each lead usually arrived as a name, a company, and little else. Before sending a single email, a rep opened a dozen tabs — company site, LinkedIn, recent coverage — to find an angle. Each lead took several minutes, a list of a few hundred took days, and every rep researched their own way, so personalization quality swung wildly. Because research was slow, leads went stale, and when the team fell behind they sent generic blasts that hurt reply rates and risked the sending domain. With no single source of truth, the same lead got researched twice or hit by two sequences.
The instinct was 'just have AI write the emails.' But the real problem was upstream: thin, unstructured data, and no automation survives bad inputs. So we fixed the structure first — one lead base, defined statuses, a clear definition of 'enriched' — then built the AI automation workflow on top.
02 - System Flow
How the system moves
Raw leads land
CSV import into Airtable
Pipeline triggers
n8n watches for new records
Firmographics enriched
Clay enrichment waterfall
AI research drafted
OpenAI summaries and angles
Confidence scored
flags set on every output
Review gate
low-confidence held for reps
Outreach queued
Smartlead sequence via API
Status synced
results written back to Airtable
03 - Build
What I built
A structured Airtable lead base
Every imported list normalizes into one Airtable table with defined fields: source, owner, status, enrichment fields, contact history. Imports are deduplicated against existing records and past sends, so each lead exists once with one status. Unglamorous, but the pipeline only works because every lead has a single record the rest of the system can trust.
Firmographic enrichment in Clay
Clay does the lookups reps did by hand: domain, company size, industry, location, verified title, and signals like funding or hiring. I built it as a waterfall — cheaper sources first, gaps fall through to the next provider. Fields that cannot be verified stay empty instead of guessed; empty is honest, and the next step handles it.
AI research summaries with confidence flags
An OpenAI step takes only the verified Clay fields plus scraped page content and returns a short summary and two or three personalization angles in a structured format. The prompt allows 'insufficient data' as a valid answer, and every output carries a confidence flag tied to how much real source material backed it. Low-confidence output never sends automatically — that rule is what made the team trust the system.
n8n orchestration and error handling
n8n is the glue: it watches Airtable, calls Clay and OpenAI in batches, respects rate limits, retries transient failures, and writes everything back. Anything that fails twice lands in an error queue with a readable reason instead of silently dropping a lead. Plain API integration work, but it is the difference between automation the team can depend on and a demo that breaks in week one.
Smartlead routing with a human review gate
High-confidence leads queue automatically into the matching Smartlead sequence; low-confidence ones land in an Airtable review view where a rep approves, edits, or rejects in seconds. Sequence status and replies sync back so nobody gets double-contacted. I documented the whole system — prompts, field definitions, a failure playbook — and handed it over with a walkthrough so the team runs and adjusts it without me.
04 - Impact
Business impact
Research that took a rep an afternoon per batch now takes a few minutes of reviewing flagged records.
New lead lists go from raw CSV to live outreach the same day instead of sitting in a backlog.
Personalization quality is consistent across the team instead of depending on who did the digging.
Confidence flags catch weak data in review instead of letting it reach a prospect's inbox.
One Airtable base replaced scattered spreadsheets, ending duplicate research and double-contacted leads.
Reps now spend their time on replies and calls — the work that closes — instead of copy-paste research.
05 - Edge Cases
What had to be handled
Leads with no findable company domain skip enrichment and land in a 'needs manual research' view rather than generating AI output built on guesses.
Common-name mismatches are caught by cross-checking title and company before any enriched data is accepted onto the record.
When source material is thin, the AI returns 'insufficient data' instead of inventing details, and the lead is flagged for human review.
Duplicates — already in the base or already contacted in Smartlead — are caught at import, so nobody gets the same sequence twice.
Clay and OpenAI rate limits are handled with batching and retries in n8n, and an alert fires when enrichment credits run low so the pipeline never stalls silently.
Leads outside the team's target profile are disqualified before enrichment, so credits are never spent on records that would never be contacted.
06 - Improvements
What I would improve next
Feed Smartlead reply outcomes back into the prompt layer so angles improve based on what actually gets responses.
Add per-segment prompt variants — the same structure does not fit both a publisher contact and a brand-side marketer.
Build a small reporting dashboard on the Airtable base showing enrichment cost, pass rate, and review-queue volume per list.
Add a data source or two to the Clay waterfall so fewer leads fall through to the manual-research queue.
Related capabilities