This workflow corresponds to n8n.io template #9057 — we link there as the canonical source.
This workflow follows the Airtable → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"meta": {
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "04b2ce2b-b253-4b8d-a525-7db0fab14c14",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
2192,
368
],
"parameters": {
"color": 4,
"width": 800,
"height": 1152,
"content": "# Apollo Lead Scraper to Airtable CRM\n\n## \ud83d\udccb What This Template Does\nThis workflow scrapes leads from Apollo.io search URLs via Apify, enriches with emails and LinkedIn data, removes duplicates, and syncs to Airtable\u2014separating contacts with/without emails for streamlined CRM outreach.\n\n## \ud83d\udd27 Prerequisites\n- n8n instance (cloud or self-hosted)\n- Apollo.io account with search URLs\n- Airtable base with \"URLs\" table (for input) and two contact tables (\"with Email\" and \"without Email\")\n\n## \ud83d\udd11 Required Credentials\n\n### Airtable OAuth2 API Setup\n1. Go to Airtable Builder Hub > OAuth integrations\n2. Register new integration, paste n8n redirect URL\n3. Copy Client ID/Secret to n8n credential\n4. Select scopes: data.records:read, data.records:write, schema.bases:read\n5. Connect account and grant base access\n\n### Apify API Setup\n1. Log in to Apify Console > Settings > Integrations\n2. Copy API token\n3. Add to n8n as Apify API credential\n\n## \u2699\ufe0f Configuration Steps\n1. Import workflow JSON into n8n\n2. Assign credentials to nodes\n3. Set Airtable base/tables in \"Get URL\" and create nodes\n4. Add Apollo search URL to \"URLs\" table\n5. Activate workflow\n\n## \ud83c\udfaf Use Cases\n- Enrich sales pipelines with B2B leads for targeted emails\n- Automate agency prospecting from Apollo filters\n- Source tech job candidates via title/location searches\n- Build educational datasets for marketing analysis\n\n## \u26a0\ufe0f Troubleshooting\n- No leads: Validate Apollo URL (must be people search); check Apify logs\n- Airtable errors: Re-grant scopes; test node output solo\n- Duplicates: Adjust \"Remove Duplicates\" keys (e.g., email+name)\n- Timeout: Reduce totalRecords to 500; monitor Apify memory"
},
"typeVersion": 1
},
{
"id": "2c866dd8-9c17-4205-9b00-cfb2bdcc78cb",
"name": "Remove Duplicates",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
3856,
880
],
"parameters": {
"options": {}
},
"typeVersion": 2
},
{
"id": "9881dcf9-3eea-4cad-a028-3a5e65b79973",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
3648,
880
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cec86722-ebb6-4e66-8076-3078d19314c5",
"name": "first_name",
"type": "string",
"value": "={{ $json.first_name }}"
},
{
"id": "289d1412-0129-4e14-ac2a-caf3e20807fc",
"name": "last_name",
"type": "string",
"value": "={{ $json.last_name }}"
},
{
"id": "7bb8e1ba-7bf7-4ecc-858a-6f0048bc3fd5",
"name": "name",
"type": "string",
"value": "={{ $json.name }}"
},
{
"id": "d1bf4ca9-d621-475b-8511-484b48c0a219",
"name": "linkedin_url",
"type": "string",
"value": "={{ $json.linkedin_url }}"
},
{
"id": "f21e166a-f5b9-497d-b065-3f8152ca470e",
"name": "Job Title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "d0527179-f2e4-4469-99fc-cbff7c311719",
"name": "Company Name",
"type": "string",
"value": "={{ $json.organization.name }}"
},
{
"id": "38ad7852-ce76-4bbd-ad24-dfba76c36c96",
"name": "Website",
"type": "string",
"value": "={{ $json.organization.website_url }}"
},
{
"id": "37e79050-b899-440a-81c4-71329cab03a9",
"name": "Company Linkedin",
"type": "string",
"value": "={{ $json.organization.linkedin_url }}"
},
{
"id": "9118f706-5968-4254-b622-ab05e284a496",
"name": "personal_email",
"type": "string",
"value": "={{ $json.personal_email }}"
},
{
"id": "92ca2d2e-3472-4bc7-a100-960f8d231672",
"name": "Twitter_url",
"type": "string",
"value": "={{ $json.organization.twitter_url }}"
},
{
"id": "da5997af-51ab-42d2-b099-d7bb6c96e042",
"name": "email_status",
"type": "string",
"value": "={{ $json.email_status }}"
},
{
"id": "d34208f3-376e-430b-aed2-0b3a148fc99a",
"name": "email",
"type": "string",
"value": "={{ $json.email }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3d1aec0f-43b2-4a73-8b2b-81a7e7b6b434",
"name": "If",
"type": "n8n-nodes-base.if",
"position": [
4208,
880
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "256f5a57-5888-46cf-bdbc-349f1530a12a",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "6318a6c1-6722-43f2-9be9-e68669d46c6b",
"name": "Filter",
"type": "n8n-nodes-base.filter",
"position": [
4032,
880
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "80ac38d7-efb8-493e-8bb1-c29fc0e4230f",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.Website }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "688fa91c-7dad-4e8c-b255-ba70c34bb7a4",
"name": "Email Absent",
"type": "n8n-nodes-base.airtable",
"position": [
4752,
1056
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appPoArs9A5xoSu8J",
"cachedResultUrl": "https://airtable.com/appPoArs9A5xoSu8J",
"cachedResultName": " Real Estate CTO and IT Managers"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblZQtU89lJh1pEgJ",
"cachedResultUrl": "https://airtable.com/appYA3nSxuyo96kUQ/tblZQtU89lJh1pEgJ",
"cachedResultName": "Contacts without emails"
},
"columns": {
"value": {
"Email": "={{ $json.personal_email }}",
"Company": "={{ $json['Company Name'] }}",
"Website": "={{ $json.Website }}",
"Full Name": "={{ $json.name }}",
"Job Title": "={{ $json['Job Title'] }}",
"Last Name": "={{ $json.last_name }}",
"First Name": "={{ $json.first_name }}",
"Email Status": "={{ $json.email_status }}",
"Business LinkedIn URL": "={{ $json['Company Linkedin'] }}",
"Personal LinkedIn URL": "={{ $json.linkedin_url }}"
},
"schema": [
{
"id": "Job Title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "First Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Personal LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Personal LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Business LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Business LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Description",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Company Description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Status",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Icebreaker",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Icebreaker",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name 2",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Full Name 2",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Domain",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Email Domain",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LinkedIn Profile Completeness",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "LinkedIn Profile Completeness",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Verification Status",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Email Verification Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Icebreaker Summary",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Icebreaker Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Research",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Company Research",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create",
"authentication": "airtableOAuth2Api"
},
"credentials": {
"airtableOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "32e9cdea-1ba4-44a3-89f8-b8ac41b6084f",
"name": "Email Present",
"type": "n8n-nodes-base.airtable",
"position": [
4480,
736
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appPoArs9A5xoSu8J",
"cachedResultUrl": "https://airtable.com/appPoArs9A5xoSu8J",
"cachedResultName": " Real Estate CTO and IT Managers"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblvsXssh4qaMJFHE",
"cachedResultUrl": "https://airtable.com/appqJ7MvqoejsJ6m3/tblvsXssh4qaMJFHE",
"cachedResultName": "Contacts with email"
},
"columns": {
"value": {
"Email": "={{ $ifEmpty($json.personal_email, $json.email) }}",
"Company": "={{ $json['Company Name'] }}",
"Website": "={{ $json.Website }}",
"Full Name": "={{ $json.name }}",
"Job Title": "={{ $json['Job Title'] }}",
"Last Name": "={{ $json.last_name }}",
"First Name": "={{ $json.first_name }}",
"Email Status": "={{ $json.email_status }}",
"Business LinkedIn URL": "={{ $json['Company Linkedin'] }}",
"Personal LinkedIn URL": "={{ $json.linkedin_url }}"
},
"schema": [
{
"id": "Job Title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "First Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Personal LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Personal LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Business LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Business LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Domain",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Email Domain",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Status",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Icebreaker",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Icebreaker",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Research",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Company Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contacted",
"type": "boolean",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Contacted",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Loom Outreach Written",
"type": "boolean",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Loom Outreach Written",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create",
"authentication": "airtableOAuth2Api"
},
"credentials": {
"airtableOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "3ee8c096-d969-47e1-b0aa-530cf9a14e0a",
"name": "IF",
"type": "n8n-nodes-base.if",
"position": [
4480,
976
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "73fba714-66db-47df-9ef4-0d39c8463562",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.personal_email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "8a4ad51c-0369-409e-b48d-5ce46fbfb26a",
"name": "Personal email present",
"type": "n8n-nodes-base.airtable",
"position": [
4752,
864
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appPoArs9A5xoSu8J",
"cachedResultUrl": "https://airtable.com/appPoArs9A5xoSu8J",
"cachedResultName": " Real Estate CTO and IT Managers"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblvsXssh4qaMJFHE",
"cachedResultUrl": "https://airtable.com/appPoArs9A5xoSu8J/tblvsXssh4qaMJFHE",
"cachedResultName": "Contacts with email"
},
"columns": {
"value": {
"Email": "={{ $ifEmpty($json.personal_email, $json.email) }}",
"Company": "={{ $json['Company Name'] }}",
"Website": "={{ $json.Website }}",
"Full Name": "={{ $json.name }}",
"Job Title": "={{ $json['Job Title'] }}",
"Last Name": "={{ $json.last_name }}",
"First Name": "={{ $json.first_name }}",
"Email Status": "={{ $json.email_status }}",
"Business LinkedIn URL": "={{ $json['Company Linkedin'] }}",
"Personal LinkedIn URL": "={{ $json.linkedin_url }}"
},
"schema": [
{
"id": "Job Title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Job Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "First Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "First Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Last Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Full Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Personal LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Personal LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Business LinkedIn URL",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Business LinkedIn URL",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Domain",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Email Domain",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Status",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Icebreaker",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Icebreaker",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Company Research",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Company Research",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contacted",
"type": "boolean",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Contacted",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Loom Outreach Written",
"type": "boolean",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Loom Outreach Written",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create",
"authentication": "airtableOAuth2Api"
},
"credentials": {
"airtableOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "120f0da5-adff-48db-948c-92315ec724fe",
"name": "Get URL",
"type": "n8n-nodes-base.airtable",
"position": [
3280,
880
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appPoArs9A5xoSu8J",
"cachedResultUrl": "https://airtable.com/appPoArs9A5xoSu8J",
"cachedResultName": " Real Estate CTO and IT Managers"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbllvioJG4oLzRvxJ",
"cachedResultUrl": "https://airtable.com/appPoArs9A5xoSu8J/tbllvioJG4oLzRvxJ",
"cachedResultName": "Apollo URL"
},
"options": {},
"operation": "search",
"authentication": "airtableOAuth2Api"
},
"credentials": {
"airtableOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "babc3cbd-6d4e-42e8-94e4-c5ada67c1983",
"name": "Start",
"type": "n8n-nodes-base.manualTrigger",
"position": [
3088,
880
],
"parameters": {},
"typeVersion": 1
},
{
"id": "85227b65-b0af-4661-887e-d55cc3bc2bfc",
"name": "Note: Get URL",
"type": "n8n-nodes-base.stickyNote",
"position": [
3088,
576
],
"parameters": {
"color": 2,
"width": 392,
"height": 288,
"content": "## \ud83d\udce5 Get URL\n\n**Purpose:** Fetches Apollo search URL from Airtable.\n\n**Key Settings:**\n- Base: Your Airtable base ID.\n- Table: \"Apollo URL\" or equivalent.\n- Operation: Search (list all records).\n\n**Note:** Ensure table has a \"URL\" field with valid Apollo people search links."
},
"typeVersion": 1
},
{
"id": "933ce7fc-90d1-453a-902b-49c16ac80047",
"name": "Note: Scrape Leads",
"type": "n8n-nodes-base.stickyNote",
"position": [
3344,
1056
],
"parameters": {
"color": 3,
"width": 376,
"height": 288,
"content": "## \ud83d\udd0d Scrape Leads\n\n**Purpose:** Runs Apify actor to scrape leads from Apollo URL.\n\n**Key Settings:**\n- Actor: Apollo Scraper.\n- Custom Body: Enable personal/work emails, set totalRecords (e.g., 1200).\n- Memory: 4096 MB for larger scrapes.\n\n**Note:** Validate URL is a people search; monitor Apify usage limits."
},
"typeVersion": 1
},
{
"id": "3c3dfb52-0094-4701-bd73-6c3aa16a3ab0",
"name": "Note: Edit Fields",
"type": "n8n-nodes-base.stickyNote",
"position": [
3760,
576
],
"parameters": {
"color": 5,
"width": 408,
"height": 256,
"content": "## \u270f\ufe0f Node: Edit Fields\n\n**Purpose:** Maps and renames scraped data fields for Airtable.\n\n**Key Settings:**\n- Assignments: Map fields like name, email, company details.\n\n**Note:** Handles nested organization data; adjust if Apollo output changes."
},
"typeVersion": 1
},
{
"id": "27e73c0b-a557-4fa7-aec8-aaeae38d369c",
"name": "Note: Dedupe & Filter",
"type": "n8n-nodes-base.stickyNote",
"position": [
3904,
1072
],
"parameters": {
"color": 6,
"width": 376,
"height": 280,
"content": "## Remove Duplicates & Filter\n\n**Purpose:** Deduplicates leads and filters those with websites.\n\n**Key Settings:**\n- Remove Duplicates: Default options (compares all fields).\n- Filter: Website exists.\n\n**Note:** Customize duplicate keys (e.g., email + name) in troubleshooting."
},
"typeVersion": 1
},
{
"id": "5f43c706-b189-4331-b882-076221118801",
"name": "Note: Conditions",
"type": "n8n-nodes-base.stickyNote",
"position": [
4432,
1168
],
"parameters": {
"color": 7,
"width": 376,
"height": 280,
"content": "## \ud83d\udd00 Nodes: If & IF\n\n**Purpose:** Branches based on email presence (work/personal).\n\n**Key Settings:**\n- Conditions: Check if email or personal_email exists.\n\n**Note:** Routes to appropriate Airtable tables; ensures no null emails in \"with Email\" table."
},
"typeVersion": 1
},
{
"id": "86d2131e-5cf7-4c2d-b58d-5e5367bd4d49",
"name": "Note: Airtable Creates",
"type": "n8n-nodes-base.stickyNote",
"position": [
4688,
560
],
"parameters": {
"color": 8,
"width": 456,
"height": 272,
"content": "## \ud83d\udce4 Email Present, Personal email present, Email Absent\n\n**Purpose:** Creates records in Airtable tables based on email availability.\n\n**Key Settings:**\n- Operation: Create.\n- Columns: Mapped fields; use $ifEmpty for email fallback.\n\n**Note:** Update base/table IDs; re-auth if permission errors."
},
"typeVersion": 1
},
{
"id": "fb8abd64-afd7-4273-a024-9ce48b60dea0",
"name": "Apollo Scraper",
"type": "n8n-nodes-base.httpRequest",
"position": [
3456,
880
],
"parameters": {
"url": "=https://api.apify.com/v2/acts/jljBwyyQakqrL1wae/run-sync-get-dataset-items",
"method": "POST",
"options": {
"timeout": 1000000,
"redirect": {
"redirect": {}
}
},
"jsonBody": "={\n \"getPersonalEmails\": true,\n \"getWorkEmails\": true,\n \"totalRecords\": 1100,\n \"url\": \"{{ $json.URL }}\"\n}",
"sendBody": true,
"sendQuery": true,
"sendHeaders": true,
"specifyBody": "json",
"queryParameters": {
"parameters": [
{
"name": "timeout",
"value": "600000"
},
{
"name": "memory",
"value": "32768"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Accept",
"value": "application/json"
},
{
"name": "Authorization",
"value": "=Bearer <ApiKey>"
}
]
}
},
"typeVersion": 4.2
}
],
"connections": {
"IF": {
"main": [
[
{
"node": "Personal email present",
"type": "main",
"index": 0
}
],
[
{
"node": "Email Absent",
"type": "main",
"index": 0
}
]
]
},
"If": {
"main": [
[
{
"node": "Email Present",
"type": "main",
"index": 0
}
],
[
{
"node": "IF",
"type": "main",
"index": 0
}
]
]
},
"Start": {
"main": [
[
{
"node": "Get URL",
"type": "main",
"index": 0
}
]
]
},
"Filter": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Get URL": {
"main": [
[
{
"node": "Apollo Scraper",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Remove Duplicates",
"type": "main",
"index": 0
}
]
]
},
"Apollo Scraper": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Remove Duplicates": {
"main": [
[
{
"node": "Filter",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
airtableOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automate your lead generation by scraping targeted prospects from Apollo.io, enriching with contact details, and seamlessly syncing to Airtable for organized outreach—all without manual data entry.
Source: https://n8n.io/workflows/9057/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Maximize your conversion rates with this end-to-end automated outreach and lead nurturing system. This workflow manages the entire sales lifecycle—from instant contact enrollment via WhatsApp to AI-pe
This workflow is designed to take user inputs in order to generate an image using the Riverflow 2.0 model through the Replicate API. It can handle both image generation as well as image editing. Addit
Content Analyzer (Tiktok). Uses stickyNote, scheduleTrigger, sort, airtable. Scheduled trigger; 27 nodes.
AI Lead Qualification & Roting System. Uses httpRequest, twilio, airtable. Webhook trigger; 26 nodes.
Viral TikToks. Uses httpRequest, airtable, scheduleTrigger, splitInBatches. Scheduled trigger; 25 nodes.