You have a list of 5,000 LinkedIn profiles from your outbound campaigns. You know their names, companies, and job titles. You have no email addresses.
Your outreach tool can send LinkedIn messages, but LinkedIn is not where deals happen. Deals happen over email. Email is where your sequences live, where your case studies live, where your credibility compounds over time. A single LinkedIn message gets lost in 47 other connection requests. An email in someone's inbox gets read at 9 a.m. when they're actually working.
The gap between "I have their LinkedIn profile" and "I have their email address" is massive. Manual research kills your velocity. You'd need someone spending $15/hour clicking LinkedIn, searching emails, and typing names into Google. That's slow, boring, and produces maybe 30-50 addresses per day.
This guide builds the system that replaces that. You pipe your lead list into an automation workflow. The system tries enrichment source A to find the email. If that returns a result, it stops. If source A finds nothing, it tries source B. If that fails, it tries source C. The result is a waterfall flow that finds email addresses at 60-70% accuracy across your entire list, with minimal manual work.
The system lives in N8N. Your leads live in Google Sheets (or a database for scale). Two API services handle the enrichment. One is free. One is paid per successful lookup. Together they find nearly every email address that exists, automatically.
Understand your lead sources and consolidate
Email enrichment is only useful if you have a consolidated list of people to enrich. Your leads probably come from five different places. They need to be in one place before the enrichment system can process them.
Where your leads live
LinkedIn outbound campaigns generate connections. GetSales, Dripify, or other LinkedIn automation tools export these as lists with name and company. Lead magnet posts generate commenters. The automation tool extracts their profiles and hands them off. Cold email campaigns that get replies generate engaged people. Manual list building generates a Notepad file with company names that you need to research. Ad platforms generate form fills. Each source produces a list with partial information.
Consolidation format
Your enrichment workflow needs a standard format to work with. Create a Google Sheet (or Airtable, Postgres, or NocoDB for scale) with these columns at minimum:
Add rows for every lead from every source. If a lead appears twice (from multiple sources), deduplicate. The larger and cleaner your list, the better your enrichment system performs.
Why consolidation matters
Each enrichment API call costs money (or burns free-tier quota). Duplicate leads waste resources. Bad data (misspelled names, truncated company names) produces failed lookups. A 30-minute consolidation session upfront saves thousands of API calls and hours of debugging later.
Set up your enrichment tools
The waterfall approach requires two data sources. The first is fast and free. The second is accurate and paid. Together they find most email addresses that exist.
Trykitt.ai
Trykitt.ai offers a free tier that finds about 40-50% of email addresses in a B2B database. The speed is instant. The cost is zero.
Create a Trykitt account. Generate an API key from their dashboard. The API accepts two parameters: domain name and first/last name. It returns the email address if it finds one.
The free tier allows about 100 lookups per month. That's enough to test the waterfall logic. Once you're running at scale, the paid tier ($40-200/month depending on volume) gives you thousands of lookups.
Findymail
Findymail is the backup source. It works on a pay-per-successful-email model ($0.50-$1.00 per email found). It's more expensive than Trykitt, but it finds emails that Trykitt misses. It supports fuzzy matching (finding emails even if the name is slightly misspelled) and complex company structures (subsidiaries, divisions, regional offices).
Create a Findymail account. Add a credit card. Generate an API key. The API accepts the same parameters: domain and name.
Why this pairing works
Trykitt is cheap and fast. Run it first on your entire list. For every successful result, you're done — email found at zero cost. For failures, pass those records to Findymail. This waterfall approach cuts your enrichment cost in half compared to running Findymail on everything.
Cost comparison: 5,000-person list
Alternative tools
The logic holds regardless of which tools you choose. RocketReach, Hunter.io, Leadiro, and EmailListVerify all work as enrichment sources. Build your waterfall with whatever services fit your budget and accuracy needs. The architecture stays the same: fast first source, accurate second source, automatic fallback.
Build the waterfall flow in N8N
The enrichment system lives inside N8N. It reads your lead list, tries source A, routes failures to source B, and updates your sheet with results.
Architecture overview
The workflow has five stages:
Setting up the trigger
Create a new N8N workflow. Add a trigger node. You have two options: trigger on a schedule (e.g., every 6 hours), or trigger manually when you upload a new lead list.
If you trigger on a schedule, add a condition to only process records with an empty email address and a pending enrichment status. This way, once a lead is enriched, it never hits the APIs again. If you trigger manually, you control exactly when the enrichment runs, which is useful for testing and debugging.
First enrichment: primary source
Add an HTTP Request node that calls your primary enrichment API (Trykitt). Pass these parameters from each row: domain name (extract from the LinkedIn URL or company website), first name, and last name.
The API returns either an email address or a null response. Extract the email address from the response. Store it in a variable. Use the email to create a conditional: if email exists, this lead is done. If not, pass to source B.
Conditional routing: the waterfall logic
This is where the waterfall happens. Add an IF node (or a Switch node) that evaluates: does the primary source have a result?
Set enrichment status to "success" and write the email to your sheet.
Pass the lead to the secondary source (Findymail).
This simple binary decision is what makes the waterfall work. Every successful primary lookup saves you money.
Second enrichment: backup source
For leads that failed the first lookup, add another HTTP Request node calling your secondary enrichment API (Findymail). Pass the same parameters: domain, first name, last name.
Findymail's response includes metadata: confidence score, source, verification level. Store all of it. The confidence score tells you how certain Findymail is about the result.
Writing results back
Add a Google Sheets node that updates your sheet. For each record, write:
Map your output fields to the correct columns in your sheet. Test the flow on a small batch (10-20 rows) before running it on your full list.
Error handling and fallback
Build in a fallback for when both sources fail. Tag these records as "enrichment failed" and store them. Don't drop them. You can re-run these on a different schedule or try a third enrichment source later.
If an API call errors (rate limit, timeout, invalid parameter), catch the error and retry. N8N has built-in retry logic. Set retries to 3 attempts with exponential backoff.
Connect to your outreach and test
Once your enrichment flow is running and your sheet is populated with email addresses, the next step is connecting those emails to your outreach system.
Connecting to cold email platforms
If you use cold email (GMass, Apollo, Lemlist, Outreach), export your enriched list from Google Sheets. Create a CSV with columns: first name, last name, email, company. Upload to your cold email tool. Build your sequence. Start sending.
The advantage of this approach is that you've already warmed your IP (if you need warmup) and validated the email list. Bad emails that cause bounces get flagged. Valid emails that convert get tagged. You iterate based on real data.
Connecting to LinkedIn automation tools
If you prefer LinkedIn outreach, your email list serves a different purpose. You've got the email addresses for follow-up. Send a LinkedIn message first (where the automation tool handles delivery). When they reply or you decide to escalate, email becomes your second channel.
Testing accuracy
Before you run your full list through enrichment, test on a small batch. Export 50 records from each of your lead sources. Run them through the waterfall. Check the results manually. Open a few emails in Gmail to see if they exist. You're looking for false positives (emails that don't work) and false negatives (people you know have an email but the system missed).
Something is wrong. Most likely your lead data has too many errors (misspelled names, incomplete company names). Go back to Step 1 and clean up the data.
You're in good shape. You've found most emails and can start your outreach.
Monitoring and optimization
Once your flow is running, monitor it weekly. Check how many leads entered, how many succeeded on the first source, how many needed the second source, and how many failed entirely.
If your first-source success rate is below 30%, it might be worth switching to a different primary service. If your second-source success rate is high but expensive, consider bumping up the Findymail budget.
The waterfall is not a "set and forget" system. It's data infrastructure. The more you run it, the more you learn about where your lead data has problems, and the better you can optimize it.
Prompt: Custom enrichment rules by ICP
Prompt 1 of 1Works with Claude, ChatGPT, Gemini
Generate a tiered enrichment strategy so you don't waste budget enriching leads outside your target profile.
You are an Email Enrichment Strategy Designer for B2B companies. Your job is to create a waterfall enrichment flow that prioritizes budget based on lead fit. INPUT 1: YOUR ICP [Describe your ideal customer: industry, company size, geography, role, revenue range] INPUT 2: YOUR BUDGET [What's your monthly enrichment budget, in dollars?] INPUT 3: YOUR SOURCES [List the enrichment sources you have access to with their per-lookup cost (or monthly cost). Example: "Trykitt free tier (free), Hunter.io ($0.50/email), Clearbit ($1.00/email)"] INPUT 4: LEAD VOLUME [How many leads per month are you enriching?] Now generate: 1. A tiered enrichment strategy that allocates your budget across sources based on lead quality: - Tier 1 (highest ICP fit): which sources to use, in what order - Tier 2 (medium fit): different waterfall sequence - Tier 3 (lower fit): minimal enrichment or skip entirely 2. Pre-enrichment filtering rules so you're not wasting API calls on leads that don't match your ICP 3. Cost estimation: for your lead volume and tier distribution, what's the expected monthly cost? 4. The N8N configuration logic: where to segment leads by tier, which nodes to add, how to route each tier Format the output so it can be copied directly into an N8N workflow spec. No commentary. Just the strategy and the implementation rules.