Apollo to Airtable, clean leads without duplicates
Your lead list starts clean. Then one scrape turns into three versions of the same person, missing websites, blank emails, and a base nobody trusts. You end up doing the worst kind of work: copy-paste plus “wait, didn’t we already contact them?”
This Apollo Airtable dedupe setup hits sales ops first, because they’re the ones cleaning the mess. A founder doing outbound feels it too. Same for a recruiter building candidate lists. The outcome is simple: a usable Airtable CRM that stays organized automatically.
You’ll see exactly how the workflow pulls search URLs, fetches prospects, removes duplicates, and sorts records into the right Airtable tables so outreach can start faster.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Apollo to Airtable, clean leads without duplicates
flowchart LR
subgraph sg0["Manual Launch Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Launch Trigger", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Retrieve Search URL"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Apollo Data Fetch"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Map Lead Fields", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Eliminate Repeats", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Website Present", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Email Exists", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Create Email Record"]
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Personal Email", pos: "b", h: 48 }
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Create Personal Email Record"]
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/airtable.svg' width='40' height='40' /></div><br/>Create No-Email Record"]
n8 --> n9
n8 --> n10
n6 --> n7
n6 --> n8
n0 --> n1
n5 --> n6
n1 --> n2
n3 --> n4
n2 --> n3
n4 --> n5
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n5,n6,n8 decision
class n1,n7,n9,n10 database
class n2 api
classDef customIcon fill:none,stroke:none
class n1,n2,n7,n9,n10 customIcon
The Challenge: Dirty lead data that ruins outreach
Pulling leads from Apollo is the easy part. Turning that raw export into something you can actually work from is where the hours disappear. You get duplicates because the same person appears in multiple searches, or because one row has a personal email and another has a work email. Then you spot blanks: no website, no email, or half-filled fields that make filtering useless. After a couple of runs, your Airtable base becomes “mostly right,” which is honestly worse than wrong because your team stops trusting it.
The friction compounds. Here’s where it breaks down.
- You waste about 1–2 hours per import cleaning duplicates and matching records by hand.
- Outreach lists get contaminated, which means reps email people twice or skip them entirely.
- Leads without a website or key fields sneak in and bloat your base, so every view loads slower and filtering feels unreliable.
- Teams end up building “shadow spreadsheets” in Google Sheets to do basic sorting and segmentation that the CRM should handle.
The Fix: Apollo leads synced into Airtable, deduped and sorted
This n8n workflow turns Airtable into the control center for your Apollo scraping and cleanup. You store one or more Apollo search URLs in Airtable, then run the automation when you’re ready. n8n fetches the lead data via an HTTP request (using an Apollo scraper service like Apify behind the scenes), maps every lead into clean Airtable-friendly fields, and removes repeats based on key identifiers like name and email. After that, it filters out incomplete records (like missing websites) and routes each lead to the right Airtable table depending on whether an email exists and what type it is. The end result is a base that stays workable even as volume grows.
The workflow starts with Airtable as the “input queue” of search URLs. It then pulls leads, cleans them, and makes a decision: work email table, personal email table, or a separate no-email table for enrichment later. That sorting is what keeps your outreach lists clean.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you run 5 Apollo searches per week and each one returns about 200 leads. Manually, exporting, importing, deduping, and sorting usually costs about 2 hours per search, so that’s roughly 10 hours weekly. With this workflow, you paste the search URLs into Airtable, hit run, and wait for processing (often 10–20 minutes depending on volume and the scraper). You still review the final tables, but the cleanup work is basically gone.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for search URL input and lead tables
- Apify (Apollo scraper) to scrape Apollo search results
- Apify API token (get it from Apify Console → API)
Skill level: Intermediate. You’ll connect accounts, map fields once, and confirm your Airtable table structure matches the workflow.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
You launch it on demand. A manual trigger starts the run, which is useful when you want control over timing (for example, after you’ve updated search URLs in Airtable).
Search URLs are pulled from Airtable. The workflow reads the URL(s) you’ve saved, so your team doesn’t have to touch n8n every time a new Apollo query is needed.
Leads are fetched and normalized. An HTTP request pulls lead data from the scraper, then a mapping step reshapes fields into something Airtable can store cleanly (names, company, LinkedIn, emails, and whatever else you choose to keep).
Duplicates are removed and records are routed. n8n removes repeats, filters out low-value records like missing websites, then checks email availability. Leads with work emails go to one Airtable table, personal emails go to another, and no-email leads are kept separate so they don’t pollute your outreach views.
You can easily modify the dedupe keys and the “valid lead” filter to match your market, so enterprise targeting won’t be treated the same as SMB lists. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
This workflow starts on-demand and is initiated manually before it pulls lead data.
- Add the Manual Launch Trigger node as the start of the workflow.
- Leave all default settings as-is since no parameters are required.
- Confirm the execution flow starts from Manual Launch Trigger → Retrieve Search URL.
Step 2: Connect Airtable for Search URL Retrieval
Pull the Apollo search URL from Airtable to drive the data fetch.
- Add Retrieve Search URL and set Operation to
search. - Select the correct Airtable Base and Table (e.g.,
Real Estate CTO and IT Managers→Apollo URL). - Credential Required: Connect your airtableOAuth2Api credentials in Retrieve Search URL.
- Verify the output includes the URL field used by downstream nodes (referenced as
{{$json.URL}}).
{{$json.URL}} value and return no leads.Step 3: Fetch Leads from Apollo and Map Fields
Use an HTTP request to pull leads and normalize data fields for storage.
- Add Apollo Data Fetch and set URL to
=https://api.apify.com/v2/acts/jljBwyyQakqrL1wae/run-sync-get-dataset-items. - Set Method to
POSTand Specify Body tojson. - Set JSON Body to
={"getPersonalEmails": true,"getWorkEmails": true,"totalRecords": 1100,"url": "{{ $json.URL }}"}. - Add header Authorization with
=Bearer [CONFIGURE_YOUR_TOKEN]and update the token value. - Set query parameters
timeoutto600000andmemoryto32768. - Connect Apollo Data Fetch to Map Lead Fields.
- In Map Lead Fields, create assignments such as first_name →
{{ $json.first_name }}and Company Name →{{ $json.organization.name }}. - Include all mapped fields shown: last_name, name, linkedin_url, Job Title, Website, Company Linkedin, personal_email, Twitter_url, email_status, and email.
Step 4: Deduplicate and Filter Leads
Remove repeated contacts and ensure only leads with websites move forward.
- Add Eliminate Repeats after Map Lead Fields to remove duplicates.
- Add Filter Website Present after Eliminate Repeats.
- In Filter Website Present, set the condition to check if
{{ $json.Website }}exists. - Confirm execution flow: Map Lead Fields → Eliminate Repeats → Filter Website Present → Check Email Exists.
Step 5: Configure Conditional Routing and Airtable Outputs
Route leads based on email availability and create records in the correct Airtable tables.
- Add Check Email Exists with a condition that
{{ $json.email }}exists. - Connect the true output of Check Email Exists to Create Email Record.
- Connect the false output of Check Email Exists to Check Personal Email, which checks
{{ $json.personal_email }}exists. - Connect the true output of Check Personal Email to Create Personal Email Record.
- Connect the false output of Check Personal Email to Create No-Email Record.
- Credential Required: Connect your airtableOAuth2Api credentials in Create Email Record, Create Personal Email Record, and Create No-Email Record.
- In Create Email Record, map columns like Email →
{{ $ifEmpty($json.personal_email, $json.email) }}, Company →{{ $json['Company Name'] }}, and Website →{{ $json.Website }}. - Use the same field mapping structure in Create Personal Email Record and Create No-Email Record, ensuring the target Airtable tables are correct.
Contacts without emails table.Step 6: Test and Activate Your Workflow
Run a manual test to verify that leads are fetched, deduplicated, and routed into the correct Airtable tables.
- Click Execute Workflow from the editor to run Manual Launch Trigger.
- Verify Apollo Data Fetch returns lead data and Map Lead Fields outputs populated fields like Website and email.
- Confirm that Check Email Exists and Check Personal Email route records to the correct Airtable nodes.
- Check Airtable to ensure records appear in
Contacts with emailorContacts without emailswith the expected values. - Once validated, toggle the workflow to Active for production use.
Watch Out For
- Airtable credentials can expire or need specific permissions. If things break, check the connected account in n8n’s Credentials and confirm the base/table access first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Common Questions
About an hour if your Airtable base is ready and you have your scraper token.
Yes, but someone has to be comfortable mapping fields and testing a small batch first. No coding, just careful setup.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Apify/Apollo scraping costs, which depend on how many leads you pull.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Start by changing what counts as a “duplicate” in the Eliminate Repeats step (for some teams it’s email, for others it’s email plus LinkedIn URL). You can also tighten or loosen the Filter Website Present step depending on whether a website is required for your outreach. If your team treats personal emails differently, adjust the Check Personal Email decision so those records route to the right Airtable table.
Usually it’s permissions or the table/base changed names. Reconnect the Airtable credential in n8n, then confirm the base, table, and field IDs still match what the workflow expects.
It can handle large pulls (the scraper supports up to about 50,000 leads), but capacity is mainly limited by your n8n plan, your server resources, and Airtable API limits. On n8n Cloud Starter you can run plenty of weekly scrapes for a small team, and higher plans handle more volume. If you self-host, executions aren’t capped, but you still need enough memory to process batches without timing out. In practice, many teams run this in smaller chunks (a few thousand leads at a time) to keep Airtable writes steady and easier to QA.
Often, yes, because deduping and conditional routing get messy fast in simpler tools. n8n handles branching logic cleanly, and self-hosting means you’re not paying extra per step when you scale. The downside is you’ll spend a bit more time up front mapping fields and testing. If your process is just “Apollo export → Airtable import,” Zapier or Make can be fine. For anything beyond that, n8n tends to be the calmer option. Talk to an automation expert if you want a quick recommendation based on your volume.
Airtable stays clean, outreach stays sane, and your lead engine stops depending on someone’s patience. Set it up once, then let the workflow do the boring part.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.