Automated Lead Scraping and Management with Airtable
Automate your lead generation by scraping enriched lead data, filtering for valid contacts, and saving them directly into your Airtable database for seamless management.
Overview
Scrapes enriched lead data from a specified source, filters for valid contacts, and automatically saves them to an Airtable base for streamlined lead management.
🧠 Description & Use Case
This workflow provides a powerful, automated system for lead generation. It scrapes detailed lead information from a data source, filters out incomplete entries, formats the data for consistency, and saves the validated leads directly into an Airtable database. This eliminates manual data entry and ensures your CRM or lead list is populated with high-quality, actionable contacts.
🔄 How It Works:
-
Trigger
- The workflow is initiated manually by clicking 'Test workflow'.
-
Scrape Leads
- The
Scrape Leads(HTTP Request) node sends a request to a specified API endpoint to fetch a list of enriched leads. It can be configured to retrieve a specific number of records and to include personal or work emails.
- The
-
Filter Leads
- The
Filter leads without email(If) node acts as a quality gate, checking each lead to ensure it has an email address. Leads without an email are discarded, so only complete profiles proceed.
- The
-
Format Data
- The
Edit Fields(Set) node cleans up the data. It renames and maps fields from the source (e.g.,organization_nametoorganization,titletocurrent_job_title) to create a standardized data structure.
- The
-
Save to Database
- The
Save Leads in database(Airtable) node takes the clean, formatted lead data and creates a new record for each lead in a specified Airtable base and table, ensuring all your valuable prospects are stored in one organized location.
- The
✅ Real-World Use Cases:
- Sales Prospecting: Automatically build lists of potential customers based on specific criteria and feed them directly into your sales pipeline in Airtable.
- Marketing Campaigns: Gather contacts for targeted email or LinkedIn outreach campaigns, ensuring you only reach out to prospects with valid contact information.
- Recruitment Sourcing: Quickly source potential candidates from professional networks and populate a candidate tracking system in Airtable.
- Database Building: Create and maintain a centralized, enriched database of industry contacts without the tedious work of manual data collection and entry.
Instructions
Basic steps
- Download workflow JSON
- Import into n8n
- Configure node parameters as needed
- Test and enable the workflow
💡 Tips
After importing, verify all connectors and credentials match your environment.
Preview
Workflow Visualization
Nodes
When clicking ‘Test workflow’
manualTrigger
Edit Fields
set
Sticky Note
stickyNote
Scrape Leads
httpRequest
Save Leads in database
airtable
Sticky Note1
stickyNote
Filter leads without email
if
Statistics
View full JSON structure
{
"nodes": [
{
"id": "03eabaeb-ad13-4764-98de-183325e32cbd",
"name": "When clicking ‘Test workflow’",
"type": "n8n-nodes-base.manualTrigger",
"position": [
160,
-80
],
"parameters": {},
"typeVersion": 1
},
{
"id": "e7df072c-fba8-4dc2-94ce-ae20a135a633",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
840,
-80
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ab7e33d5-986e-4fba-b4d0-bc47bcd1cf82",
"name": "first_name",
"type": "string",
"value": "={{ $json.first_name }}"
},
{
"id": "f29e8cf7-3cd0-4ffc-a071-96be9dd1da50",
"name": "last_name",
"type": "string",
"value": "={{ $json.last_name }}"
},
{
"id": "54ee5cec-ccaf-4f34-8030-d17206abef5d",
"name": "email",
"type": "string",
"value": "={{ $json.email }}"
},
{
"id": "daf1fa7c-a7fc-4b96-8184-a5569b9ab9a0",
"name": "email_status",
"type": "string",
"value": "={{ $json.email_status }}"
},
{
"id": "2c7e31e5-42a2-4295-ae8b-108d8a7d409a",
"name": "linkedin_url",
"type": "string",
"value": "={{ $json.linkedin_url }}"
},
{
"id": "4002f912-0581-4219-8443-96c13133dc76",
"name": "headline",
"type": "string",
"value": "={{ $json.headline }}"
},
{
"id": "fa92887f-fff5-4ee4-9b80-05115b83f718",
"name": "organization",
"type": "string",
"value": "={{ $json.organization_name }}"
},
{
"id": "c274e875-6a53-484a-87b1-3c672101603f",
"name": "organization_website",
"type": "string",
"value": "={{ $json.organization_website_url }}"
},
{
"id": "af6208a2-d064-471b-a417-7d96e9d05803",
"name": "organization_linkedin_url",
"type": "string",
"value": "={{ $json.organization_linkedin_url }}"
},
{
"id": "d61f2ddb-4c50-4548-8a7f-08261c60c429",
"name": "current_job_title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "838c77f2-618e-43b2-9df6-e5e1bde39105",
"name": "country",
"type": "string",
"value": "={{ $json.country }}"
},
{
"id": "9dc784cf-ae01-44e3-afed-16a95192bf71",
"name": "city",
"type": "string",
"value": "={{ $json.city }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3aaa9ea7-0c5d-4ea3-aa10-6cd0125ea91a",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
-280
],
"parameters": {
"color": 5,
"width": 1200,
"height": 520,
"content": "## Lead Generation\nGet thousands of enriched leads in seconds."
},
"typeVersion": 1
},
{
"id": "42e3f6de-4ec4-46a7-a7f9-c028d27a677b",
"name": "Scrape Leads",
"type": "n8n-nodes-base.httpRequest",
"position": [
380,
-80
],
"parameters": {
"url": "=",
"options": {},
"jsonBody": "{\n \"getPersonalEmails\": true,\n \"getWorkEmails\": true,\n \"totalRecords\": 500,\n \"url\": \"\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "dfd580f6-99b5-414a-b6f3-77c73edc85ec",
"name": "Save Leads in database",
"type": "n8n-nodes-base.airtable",
"position": [
1040,
-80
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appy1hlfTk0UuYwRb",
"cachedResultUrl": "https://airtable.com/appy1hlfTk0UuYwRb",
"cachedResultName": "Lead Gen - Mastersheet"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbl0rwfpUYkqMiysR",
"cachedResultUrl": "https://airtable.com/appy1hlfTk0UuYwRb/tbl0rwfpUYkqMiysR",
"cachedResultName": "Leads"
},
"columns": {
"value": {
"city": "={{ $json.city }}",
"country": "={{ $json.country }}",
"headline": "={{ $json.headline }}",
"last_name": "={{ $json.last_name }}",
"first_name": "={{ $json.first_name }}",
"email_status": "={{ $json.email_status }}",
"linkedin_url": "={{ $json.linkedin_url }}",
"email_address": "={{ $json.email }}",
"current_job_title": "={{ $json.current_job_title }}",
"organization_name": "={{ $json.organization }}",
"organization_website": "={{ $json.organization_website }}",
"organization_linkedin_url": "={{ $json.organization_linkedin_url }}"
},
"schema": [
{
"id": "email_address",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "email_address",
"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": "headline",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "headline",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "linkedin_url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "organization_name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "organization_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "organization_website",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "organization_website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "organization_linkedin_url",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "organization_linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "current_job_title",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "current_job_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "country",
"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": "city",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "city",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "WKxw33bpSEDiQEaU",
"name": "Airtable Personal Access Token account"
}
},
"typeVersion": 2.1
},
{
"id": "ff009ef3-c7da-460a-80e5-ba1330631c00",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-400,
-280
],
"parameters": {
"color": 3,
"width": 460,
"height": 180,
"content": "## 🚨 readMeFirst 🚨\nThis template is built by [Not Another Marketer](https://notanothermarketer.com)\n\nStep-by-step setup guide: https://notanothermarketer.gitbook.io/\n\nAny questions? [Reach out on X](https://x.com/notanothermrktr) "
},
"typeVersion": 1
},
{
"id": "0915cea5-746a-4dde-9208-885e08644ae2",
"name": "Filter leads without email",
"type": "n8n-nodes-base.if",
"position": [
600,
-80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "231ec40a-bd12-46e2-ab6b-a8c4d6728983",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
}
],
"connections": {
"Edit Fields": {
"main": [
[
{
"node": "Save Leads in database",
"type": "main",
"index": 0
}
]
]
},
"Scrape Leads": {
"main": [
[
{
"node": "Filter leads without email",
"type": "main",
"index": 0
}
]
]
},
"Filter leads without email": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"When clicking ‘Test workflow’": {
"main": [
[
{
"node": "Scrape Leads",
"type": "main",
"index": 0
}
]
]
}
}
}Actions
Technical Specs
Compatibility
License
This workflow template follows MIT license, you can freely use, modify and distribute.
Please comply with relevant third-party service terms when using.