n8n Workflow
Intermediate

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:

  1. Trigger

    • The workflow is initiated manually by clicking 'Test workflow'.
  2. 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.
  3. 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.
  4. Format Data

    • The Edit Fields (Set) node cleans up the data. It renames and maps fields from the source (e.g., organization_name to organization, title to current_job_title) to create a standardized data structure.
  5. 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.

✅ 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

  1. Download workflow JSON
  2. Import into n8n
  3. Configure node parameters as needed
  4. Test and enable the workflow

💡 Tips

After importing, verify all connectors and credentials match your environment.

Preview

Workflow Visualization

7 nodes
100%
When clicking ‘Test workflow’manualTriggerEdit FieldssetSticky NotestickyNoteScrape LeadshttpRequestSave Leads in databaseairtableSticky Note1stickyNoteFilter leads without emailif

Nodes

1

When clicking ‘Test workflow’

manualTrigger

v1
2

Edit Fields

set

v3.4
3

Sticky Note

stickyNote

v1
4

Scrape Leads

httpRequest

v4.2
5

Save Leads in database

airtable

v2.1
6

Sticky Note1

stickyNote

v1
7

Filter leads without email

if

v2.2

Statistics

Total nodes:7
Disabled nodes:0
Node types:6
Connections:4
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

Share
Categories:
Tags:
manualtriggerifsetairtablehttprequeststickynote

Technical Specs

Complexity:
Intermediate
Node Count:
7 nodes
Published:11 months ago
Updated:10 days ago

Compatibility

Platform:
N8N Cloud & Self-hosted
Min Version:
N8N v1.0.0+
Supports cloud and self-hosted deployment

License

This workflow template follows MIT license, you can freely use, modify and distribute.

Please comply with relevant third-party service terms when using.

Related Workflows