AutomationFlowsWeb Scraping › Extract and Qualify Local Business Leads and Draft Cold Emails with Openai,…

Extract and Qualify Local Business Leads and Draft Cold Emails with Openai,…

Original n8n title: Extract and Qualify Local Business Leads and Draft Cold Emails with Openai, Apify and Hunter

ByChris Zhang @clissz on n8n.io

Search → Scrape → Qualify → CRM → Email Draft Automation

Event trigger★★★★☆ complexityAI-powered21 nodesGoogle Sheets@Apify/N8N Nodes ApifyHTTP RequestOpenAIHunter@Tavily/N8N Nodes Tavily
Web Scraping Trigger: Event Nodes: 21 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #12855 — we link there as the canonical source.

This workflow follows the Apifyn8N Nodes Apify → Google Sheets 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 →

Download .json
{
  "id": "5ebLWBeeTQaP5uWD",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI-Powered Local Business Lead Scraping, Qualification and Outreach System",
  "tags": [],
  "nodes": [
    {
      "id": "594adee7-a24d-4b4e-9738-83b3e12c7fa6",
      "name": "Scrape Lead Website",
      "type": "n8n-nodes-base.html",
      "position": [
        2976,
        1136
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "dataPropertyName": "=data",
        "extractionValues": {
          "values": [
            {
              "key": "content",
              "cssSelector": "body"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3ce2d134-2d1f-42b6-ae9e-b3724e7bef2a",
      "name": "Filter Qualified Leads",
      "type": "n8n-nodes-base.filter",
      "position": [
        3600,
        1136
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "id-1",
              "operator": {
                "type": "number",
                "operation": "notEquals"
              },
              "leftValue": "={{ $('Lead Qualification Agent').item.json.output[1].content[0].text.quality_tier }}",
              "rightValue": 0
            },
            {
              "id": "3bdaf791-7e98-43fd-ba61-fafaab97216c",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "valid"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "9c5d551e-e3b5-4deb-ab18-029c1a68638e",
      "name": "Write Qualified Leads to CRM",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4352,
        1008
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.output[1].content[0].text.email }}",
            "Notes": "={{ $json.output[1].content[0].text.notes }}",
            "Status": "Qualified",
            "Phone Raw": "={{ $json.output[1].content[0].text.phone_raw }}",
            "Phone E164": "={{ $json.output[1].content[0].text.phone_e164 }}",
            "Phone Type": "={{ $json.output[1].content[0].text.phone_type }}",
            "Social URL": "={{ $json.output[1].content[0].text.social_url }}",
            "Source URL": "={{ $json.output[1].content[0].text.source_url }}",
            "Person Name": "={{ $json.output[1].content[0].text.person_name }}",
            "Phone Label": "={{ $json.output[1].content[0].text.phone_label }}",
            "Address Line": "={{ $json.output[1].content[0].text.address_line }}",
            "Person Email": "={{ $json.output[1].content[0].text.person_email }}",
            "Person Title": "={{ $json.output[1].content[0].text.person_title }}",
            "Address Label": "={{ $json.output[1].content[0].text.address_label }}",
            "Email Context": "={{ $json.output[1].content[0].text.email_context }}",
            "Phone Context": "={{ $json.output[1].content[0].text.phone_context }}",
            "Person Context": "={{ $json.output[1].content[0].text.person_context }}",
            "Social Context": "={{ $json.output[1].content[0].text.social_context }}",
            "Address Context": "={{ $json.output[1].content[0].text.address_context }}",
            "Icebreaker Line": "={{ $json.output[1].content[0].text.icebreaker_line }}",
            "Social Platform": "={{ $json.output[1].content[0].text.social_platform }}",
            "Contact Page URL": "={{ $json.output[1].content[0].text.contact_page_url }}",
            "Messenger Handle": "={{ $json.output[1].content[0].text.messenger_handle }}",
            "Person Phone Raw": "={{ $json.output[1].content[0].text.person_phone_raw }}",
            "Messenger Context": "={{ $json.output[1].content[0].text.messenger_context }}",
            "Company Legal Name": "={{ $json.output[1].content[0].text.company_legal_name }}",
            "Confidence Overall": "={{ $json.output[1].content[0].text.confidence_overall }}",
            "Messenger Platform": "={{ $json.output[1].content[0].text.messenger_platform }}",
            "Contact Page Context": "={{ $json.output[1].content[0].text.contact_page_context }}"
          },
          "schema": [
            {
              "id": "Source URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Source URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Legal Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Legal Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Raw",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Raw",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone E164",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone E164",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Label",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Label",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social Platform",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Social Platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Social URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Social Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Messenger Platform",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Messenger Platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Messenger Handle",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Messenger Handle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Messenger Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Messenger Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contact Page URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Contact Page URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contact Page Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Contact Page Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address Line",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address Line",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address Label",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address Label",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Phone Raw",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Phone Raw",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence Overall",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Confidence Overall",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Icebreaker Line",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Icebreaker Line",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Logo",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Logo",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Cold Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Cold Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Qualified",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Qualified",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Problem",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Problem",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Solution",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Solution",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Scope",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Scope",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Cost",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Cost",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How soon?",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "How soon?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ROLrrdi9qCrbt80dpn27UrnXydCRH_oGKbW61_G_liw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ROLrrdi9qCrbt80dpn27UrnXydCRH_oGKbW61_G_liw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ROLrrdi9qCrbt80dpn27UrnXydCRH_oGKbW61_G_liw/edit?usp=drivesdk",
          "cachedResultName": "CRM"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "4fd08224-8981-44b4-93ae-0caf1b499c26",
      "name": "Write Cold Email to CRM",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4352,
        1248
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.output[1].content[0].text.email_address }}",
            "Cold Email": "={{ $json.output[1].content[0].text }}"
          },
          "schema": [
            {
              "id": "Source URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Source URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Legal Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Legal Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Raw",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Raw",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone E164",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone E164",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Type",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Label",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Label",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social Platform",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Social Platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Social URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Social Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Social Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Messenger Platform",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Messenger Platform",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Messenger Handle",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Messenger Handle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Messenger Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Messenger Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contact Page URL",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Contact Page URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Contact Page Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Contact Page Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address Line",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address Line",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address Label",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address Label",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Address Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Phone Raw",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Phone Raw",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Context",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Context",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Notes",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Notes",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Confidence Overall",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Confidence Overall",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Icebreaker Line",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Icebreaker Line",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Logo",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Logo",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Cold Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Cold Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Qualified",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Qualified",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Problem",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Problem",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Solution",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Solution",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Scope",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Scope",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Cost",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Cost",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "How soon?",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "How soon?",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ROLrrdi9qCrbt80dpn27UrnXydCRH_oGKbW61_G_liw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ROLrrdi9qCrbt80dpn27UrnXydCRH_oGKbW61_G_liw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ROLrrdi9qCrbt80dpn27UrnXydCRH_oGKbW61_G_liw/edit?usp=drivesdk",
          "cachedResultName": "CRM"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "115f1d4e-75ac-4434-b1e7-680ef4f3ff90",
      "name": "Get dataset items",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        2112,
        1136
      ],
      "parameters": {
        "limit": 1,
        "offset": {},
        "resource": "Datasets",
        "datasetId": "DYsNRwZgOhOhmXttk",
        "authentication": "apifyOAuth2Api"
      },
      "credentials": {
        "apifyOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7dbe1d4a-65bc-4619-bb0c-7ac539da4aa6",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        1888,
        1136
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "cc00d4cf-472f-4771-b807-b1fca0a31837",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        2336,
        1136
      ],
      "parameters": {
        "maxItems": 3
      },
      "typeVersion": 1
    },
    {
      "id": "59838c68-cc52-42ee-970e-af9c78d25f22",
      "name": "Scrape Home",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        2752,
        1152
      ],
      "parameters": {
        "url": "={{ $json.organicResults.url }}",
        "options": {
          "redirect": {
            "redirect": {
              "maxRedirects": 5
            }
          },
          "allowUnauthorizedCerts": false
        }
      },
      "executeOnce": false,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "15ac4695-71b5-44e1-abc8-fb9e1ffc924a",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2560,
        1136
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "d7686d18-407f-4648-a708-98b719399bb1",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        4624,
        1232
      ],
      "parameters": {
        "mode": "chooseBranch"
      },
      "typeVersion": 3.2
    },
    {
      "id": "2b3342ff-ab73-4631-a5f2-c8a5ac470489",
      "name": "Lead Normalize Agent",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3984,
        1008
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "GPT-5-MINI"
        },
        "options": {
          "reasoning": {
            "reasoningOptions": {
              "effort": "low",
              "summary": "none"
            }
          },
          "textFormat": {
            "textOptions": {
              "type": "json_object"
            }
          }
        },
        "simplify": false,
        "responses": {
          "values": [
            {
              "content": "You will receive stripped HTML / site text (raw content with tags removed or simplified). Extract real contact details, normalize them, and return ONLY a JSON object that validates against the schema below.\n\nIf a field is missing, leave it as an empty string \"\" (or empty array [] if the schema says array). Never guess. Never invent. No null. No \"N/A\". No comments. No extra keys.\n\nPriority order:\n1) emails\n2) phone numbers (convert to E.164 only when you can infer country reliably)\n3) everything else that helps reach them: names/titles, company name, address, contact page URL, socials, messengers, hours, generic inboxes\n4) one single-line icebreaker for outreach\n\nBe strict:\n- Only include items explicitly present in the text, including common obfuscations like \"name [at] domain dot com\" (de-obfuscate conservatively).\n- Emails: lowercase + trim; must include @ and a valid TLD; ignore obvious junk (image filenames, example.com, lorem).\n- Phones: keep phone_raw; E.164 only if country is clear from context (country name/code/format). If unclear, keep e164 as \"\".\n- URLs: keep as seen; include scheme if present.\n- Names/titles: human-readable; don't guess gender.\n- Addresses: single line, keep as written; don't mix hours/directions into it.\n- Deduplicate case-insensitively; keep the clearest variant.\n- confidence_overall is a heuristic 0\u20131; reserve 0.95+ for unambiguous labeled contact info.\n- For each extracted item, include a short context snippet (<=140 chars) in the corresponding *_context field.\n\nIf you are unsure about an item, leave it out.\n\nIcebreaker:\nAfter filling the schema, set icebreaker_line to exactly one polite sentence in this format:\n\"Hi\u2014I'm not sure if this is {name} or perhaps the front office, but I'm a big fan of {paraphrasedApproach} and wanted to run something by {him/her}.\"\n- {name} = person_name if present, else company_legal_name\n- {paraphrasedApproach} = 3\u20138 words describing what they do\n- {him/her} = only if clearly inferable; otherwise use \"them\"\nReturn one single line.\n\nReturn format: ONLY the JSON object. No preamble. No markdown.\n\n\u2e3b\n\nJSON Schema (Draft 2020-12) \u2014 Single-Item Contact\n\n{\n  \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n  \"title\": \"ContactExtractionSingle\",\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\n    \"source_url\",\n    \"company_legal_name\",\n    \"email\",\n    \"email_context\",\n    \"phone_raw\",\n    \"phone_e164\",\n    \"phone_type\",\n    \"phone_label\",\n    \"phone_context\",\n    \"social_platform\",\n    \"social_url\",\n    \"social_context\",\n    \"messenger_platform\",\n    \"messenger_handle\",\n    \"messenger_context\",\n    \"contact_page_url\",\n    \"contact_page_context\",\n    \"address_line\",\n    \"address_label\",\n    \"address_context\",\n    \"person_name\",\n    \"person_title\",\n    \"person_email\",\n    \"person_phone_raw\",\n    \"person_context\",\n    \"notes\",\n    \"confidence_overall\",\n    \"icebreaker_line\"\n  ],\n  \"properties\": {\n    \"source_url\": { \"type\": \"string\", \"default\": \"\" },\n    \"company_legal_name\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"email\": { \"type\": \"string\", \"default\": \"\" },\n    \"email_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"phone_raw\": { \"type\": \"string\", \"default\": \"\" },\n    \"phone_e164\": { \"type\": \"string\", \"default\": \"\" },\n    \"phone_type\": {\n      \"type\": \"string\",\n      \"enum\": [\"main\", \"mobile\", \"toll_free\", \"fax\", \"sales\", \"support\", \"billing\", \"other\"],\n      \"default\": \"other\"\n    },\n    \"phone_label\": { \"type\": \"string\", \"default\": \"\" },\n    \"phone_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"social_platform\": {\n      \"type\": \"string\",\n      \"enum\": [\"facebook\", \"instagram\", \"linkedin\", \"twitter\", \"x\", \"youtube\", \"tiktok\", \"github\", \"glassdoor\", \"other\", \"\"],\n      \"default\": \"\"\n    },\n    \"social_url\": { \"type\": \"string\", \"default\": \"\" },\n    \"social_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"messenger_platform\": {\n      \"type\": \"string\",\n      \"enum\": [\"whatsapp\", \"telegram\", \"wechat\", \"line\", \"signal\", \"facebook_messenger\", \"other\", \"\"],\n      \"default\": \"\"\n    },\n    \"messenger_handle\": { \"type\": \"string\", \"default\": \"\" },\n    \"messenger_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"contact_page_url\": { \"type\": \"string\", \"default\": \"\" },\n    \"contact_page_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"address_line\": { \"type\": \"string\", \"default\": \"\" },\n    \"address_label\": { \"type\": \"string\", \"default\": \"\" },\n    \"address_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"person_name\": { \"type\": \"string\", \"default\": \"\" },\n    \"person_title\": { \"type\": \"string\", \"default\": \"\" },\n    \"person_email\": { \"type\": \"string\", \"default\": \"\" },\n    \"person_phone_raw\": { \"type\": \"string\", \"default\": \"\" },\n    \"person_context\": { \"type\": \"string\", \"default\": \"\" },\n\n    \"notes\": { \"type\": \"string\", \"maxLength\": 180, \"default\": \"\" },\n    \"confidence_overall\": { \"type\": \"number\", \"minimum\": 0, \"maximum\": 1 },\n\n    \"icebreaker_line\": {\n      \"type\": \"string\",\n      \"description\": \"One-line icebreaker email of the format: 'Hi\u2014I'm not sure if this is {name} or perhaps the front office, but I'm a big fan of {paraphrasedApproach} and wanted to run something by {him/her}.'\",\n      \"default\": \"\"\n    }\n  }\n}"
            },
            {
              "content": "={{ $('Scrape Lead Website').item.json.content }}{{ $json.results }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "f9290323-6427-4c4d-9069-ac06471f3464",
      "name": "Cold Email Writer AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3984,
        1248
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "GPT-5-MINI"
        },
        "options": {
          "reasoning": {
            "reasoningOptions": {
              "effort": "low",
              "summary": "none"
            }
          },
          "textFormat": {
            "textOptions": {
              "type": "json_object"
            }
          }
        },
        "simplify": false,
        "responses": {
          "values": [
            {
              "content": "You\u2019re personalizing a cold email based on a prospect\u2019s LinkedIn profile.\n\nYou must fill 5 parts: subjectLine, icebreaker, elevatorPitch, callToAction, ps.\nUse the templates below as the base, but make them feel human:\n- Paraphrase. Don\u2019t copy LinkedIn text.\n- Keep it short, casual, \u201cbar conversation\u201d. No fancy language.\n- Subject line MUST be non-capitalized.\n\nTemplates:\nSubject Line: \"hey {name}, think I have something for you re: {thingAboutThem}\"\nIcebreaker: \"I know you're doing {thing} and I've been following {relatedThing} for a while so I figured it made sense to chat\"\nElevator Pitch: \"The TLDR: I think I can add ~$5K/mo to {theirParaphrasedBusiness} with a few automated systems\"\nCall to Action: \"I just did this for a very similar {industry} company and we hit $28,350 in a few months\u2014they do {relatedThing}\u2014so am very confident I can duplicate this at minimum. Would be 100% risk-free, I'd guarantee at least 20 appts booked or you wouldn't pay.\"\nPS: \"even if we just chat I'd love to hear about what you're doing with {thing}\"\n\nReturn ONLY valid JSON in exactly this shape (no extra keys, no prose):\n{\"email_address\":\"\",\"subjectLine\":\"\",\"icebreaker\":\"\",\"elevatorPitch\":\"\",\"callToAction\":\"\",\"ps\":\"\"}"
            },
            {
              "content": "={{ $('Scrape Lead Website').item.json.content }}{{ $json.results }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "87bb37dd-2317-4633-b9fd-0ea79ee5fccd",
      "name": "Hunter",
      "type": "n8n-nodes-base.hunter",
      "position": [
        3440,
        1136
      ],
      "parameters": {
        "email": "={{ $json.output[1].content[0].text[\"email (if exists)\"] }}",
        "operation": "emailVerifier"
      },
      "credentials": {
        "hunterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a1103cc3-2888-45fb-9763-c4845ad7b60b",
      "name": "Search",
      "type": "@tavily/n8n-nodes-tavily.tavily",
      "position": [
        3776,
        1136
      ],
      "parameters": {
        "query": "={{ $('Lead Qualification Agent').item.json.output[1].content[0].text[\"email (if exists)\"] }}",
        "options": {}
      },
      "credentials": {
        "tavilyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "dce23c6e-dac0-4ea4-82fc-ef880a63454c",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        864
      ],
      "parameters": {
        "width": 464,
        "height": 864,
        "content": "# AI-Powered Local Business Lead Scraping, Qualification & Outreach System\n\nWhat this workflow does (end-to-end)\nThis workflow automatically:\n\t1.\tPulls local business leads from Apify (Google Search / SERP data)\n\t2.\tScrapes each business website\n\t3.\tExtracts & normalizes contact info using AI\n\t4.\tClassifies lead quality & ops needs\n\t5.\tVerifies email deliverability\n\t6.\tWrites qualified leads into a CRM (Google Sheets)\n\t7.\tGenerates personalized cold emails for outreach\n\nThis is a modular, production-ready lead pipeline, you can disable or swap components without breaking the rest.\n\n## \u2699\ufe0f Required Setup (DO THIS FIRST)\nAccounts / Credentials you must connect\n\t\u2022\tApify (Dataset access)\n\t\u2022\tOpenAI (for normalization + email writing)\n\t\u2022\tGoogle Sheets (CRM destination)\n\t\u2022\tHunter (email verification)\n\t\u2022\tTavily (optional enrichment / validation)\n\nBefore running\n\t1.\tReplace Apify Dataset ID with your own\n\t2.\tUpdate Google Sheet ID + Sheet Name\n\t3.\tConfirm OpenAI model access (default: gpt-5-mini)\n\t4.\t(Optional) Adjust quality thresholds in Filter Qualified Leads\n\nHow to run\n\t\u2022\tManual trigger \u2192 Execute workflow\n\t\u2022\tStart small (Limit node is enabled intentionally)\n\t\u2022\tIncrease batch size only after validation\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e66fea58-f9b1-4c4e-b14f-3669c4dde0b0",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2000,
        864
      ],
      "parameters": {
        "width": 336,
        "height": 368,
        "content": "## Lead Source (Apify)\n\nThis section pulls raw local business results from Apify.\nEverything downstream assumes each item has a website URL.\n\nIf you want different industries or cities, change it in Apify, not here.\nThe Limit node is intentional \u2014 don\u2019t remove it until you trust the pipeline."
      },
      "typeVersion": 1
    },
    {
      "id": "cd890b32-c201-4142-b816-f4d4a0ce06b8",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2736,
        880
      ],
      "parameters": {
        "width": 384,
        "height": 416,
        "content": "## Website Scraping\n\nThis section fetches the business homepage and raw site content.\n\nSome sites will fail or block scraping. That\u2019s expected.\nFailures won\u2019t stop the workflow, they just won\u2019t qualify later.\n\nThe raw text is passed directly into AI for flexible parsing."
      },
      "typeVersion": 1
    },
    {
      "id": "c662617d-22c5-4742-a696-fb5e82e6f385",
      "name": "Lead Qualification Agent",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3136,
        1136
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "GPT-5-MINI"
        },
        "options": {
          "reasoning": {
            "reasoningOptions": {
              "effort": "low",
              "summary": "none"
            }
          },
          "textFormat": {
            "textOptions": {
              "type": "json_object"
            }
          }
        },
        "simplify": false,
        "responses": {
          "values": [
            {
              "content": "You are an experienced AI automation agency expert.\nYou apply real-world conversion experience only to interpret explicit signals.\nDo not infer or assume missing information.\nIf uncertain, default to false.\nOutput only valid JSON.\n\n1. Classification (3 category in total)\nDetermine Lead Ops Needs (boolean), can be any of the below:\n    \u2022   needs_lead_centralization\n\t\u2022\tneeds_follow_up_automation\n\t\u2022\tneeds_booking_automation\nStrong evidence examples:\n\t\u2022\tMultiple inbound channels (form + email + phone + social)\n\t\u2022\tNo clear booking flow\n\t\u2022\tGeneric contact inbox\n\t\u2022\tNo response-time or follow-up expectations stated\n\nDetermine Email AND website (bool)\n\nDetermine other social (linkedin, X, facebook etc) (bool)\n\u2e3b\n\nQuality tiers\nNot qualified  (0)\n\t\u2022\tNo email AND website\n\u2192 You can\u2019t reliably reach them\n\n\u2e3b\n\nAcceptable Quality (1)\n\nHas email and site\n\nReachable, but fragile or manual.\n\n\u2e3b\nMed Quality (2)\n\nHas email and site and Any one of Ops need Or other social\n\t\n\u2e3b\n\nHigh Quality (3)\n\nHas all 3 cate\n\n\n{\n  \"has_email and phone\": false,\n  \"need lead op\": false,\n  \"has social: false,\n  \"quality_tier\": \"0 | 1 | 2 | 3\"\n}\n\n\n\n1. Classification (3 categories total)\n\nDetermine the following three categories.\n\n\u2e3b\n\nA. Lead Ops Needs (boolean)\n\nSet to true if any of the following lead operations needs are evident:\n\t\u2022\tneeds_lead_centralization\n\t\u2022\tneeds_follow_up_automation\n\t\u2022\tneeds_booking_automation\n\nStrong evidence examples:\n\t\u2022\tMultiple inbound channels (form + email + phone + social)\n\t\u2022\tNo clear booking or scheduling flow\n\t\u2022\tGeneric contact inbox (e.g. info@, contact@)\n\t\u2022\tNo stated response-time or follow-up expectations\n\n\u2e3b\n\nB. Email AND Website (boolean)\n\nDetermine whether both an email address and a website are present.\n\n\u2e3b\n\nC. Other Social Presence (boolean)\n\nDetermine whether any social presence is listed\n(e.g. LinkedIn, X/Twitter, Facebook, Instagram).\n\n\u2e3b\n\nQuality Tiers\n\n0 \u2014 Not Qualified\n\t\u2022\tNo email and website\n\u2192 The business cannot be reliably reached.\n\n\u2e3b\n\n1 \u2014 Acceptable Quality\n\t\u2022\tHas email and website\n\n\u2e3b\n\n2 \u2014 Medium Quality\n\t\u2022\tHas email and website\n\t\u2022\tAND any one of:\n\t\u2022\tLead ops need\n\t\u2022\tSocial presence\n\n\u2e3b\n\n3 \u2014 High Quality\n\t\u2022\tHas all three categories:\n\t\u2022\tEmail + website\n\t\u2022\tLead ops need\n\t\u2022\tSocial presence\n\noutput schema:\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"has_email_and_site\": {\n      \"type\": \"boolean\"\n    },\n    \"has_lead_ops_need\": {\n      \"type\": \"boolean\"\n    },\n    \"has_social_presence\": {\n      \"type\": \"boolean\"\n    },\n    \"quality_tier\": {\n      \"type\": \"integer\",\n      \"enum\": [0, 1, 2, 3]\n    }\n  },\n  \"required\": [\n    \"has_email_and_site\",\n    \"has_lead_ops_need\",\n    \"has_social_presence\",\n    \"quality_tier\",\n    \"email (if exists)\"\n  ],\n  \"additionalProperties\": false\n}"
            },
            {
              "content": "={{ $('Scrape Lead Website').item.json.content }}"
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "df3c4163-67a4-4bbd-b2a2-a1799a22ac77",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3264,
        880
      ],
      "parameters": {
        "width": 528,
        "height": 416,
        "content": "## Qualification & Validation\n\nThis section decides whether a lead is worth keeping.\n\nIt checks:\n\t\u2022\tReachability (email + site)\n\t\u2022\tBasic ops signals\n\t\u2022\tSocial presence (if any)\n\nLow-quality leads are filtered out before hitting the CRM.\nIf you want more or fewer leads, adjust the filter \u2014 not the AI prompt."
      },
      "typeVersion": 1
    },
    {
      "id": "74f92ec9-fa01-46d5-83b7-bfd160991c13",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4048,
        736
      ],
      "parameters": {
        "width": 352,
        "height": 368,
        "content": "## CRM Write\n\nThis is the system of record.\n\nQualified leads are written to Google Sheets using append-or-update logic.\nRe-running the workflow won\u2019t duplicate rows if the email already exists.\n\nIf you\u2019re debugging, always inspect the sheet first."
      },
      "typeVersion": 1
    },
    {
      "id": "43a21083-78d0-4766-949c-dfc6b45774c0",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        4048,
        1232
      ],
      "parameters": {
        "width": 352,
        "height": 336,
        "content": "\n\n\n\n\n\n\n\n\n\n## Cold Email Drafting\n\nThis agent writes human-sounding cold email drafts using the extracted context.\n\nThese are drafts only.\nThey are stored in the CRM for review, sequencing, or export.\n\nDo not auto-send unless you add your own approval layer."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "versionId": "c73223d6-f652-43ac-b834-29bfea7d2d73",
  "connections": {
    "Limit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Hunter": {
      "main": [
        [
          {
            "node": "Filter Qualified Leads",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search": {
      "main": [
        [
          {
            "node": "Lead Normalize Agent",
            "type": "main",
            "index": 0
          },
          {
            "node": "Cold Email Writer AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Home": {
      "main": [
        [
          {
            "node": "Scrape Lead Website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Scrape Home",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get dataset items": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Lead Website": {
      "main": [
        [
          {
            "node": "Lead Qualification Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Lead Normalize Agent": {
      "main": [
        [
          {
            "node": "Write Qualified Leads to CRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Qualified Leads": {
      "main": [
        [
          {
            "node": "Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Cold Email to CRM": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Lead Qualification Agent": {
      "main": [
        [
          {
            "node": "Hunter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cold Email Writer AI Agent1": {
      "main": [
        [
          {
            "node": "Write Cold Email to CRM",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Qualified Leads to CRM": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Get dataset items",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Search → Scrape → Qualify → CRM → Email Draft Automation

Source: https://n8n.io/workflows/12855/ — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

This workflow is Part 2 of the HR Client Acquisition system and builds on the lead discovery pipeline from the previous workflow:

Google Sheets, HTTP Request, OpenAI +2
Web Scraping

Community nodes are used, and template can only be used on self-hosted n8n instances. Sales Development Representatives (SDRs) Business Development Teams Growth Hackers Startup Founders Marketing Agen

@Apify/N8N Nodes Apify, HTTP Request, Google Sheets +1
Web Scraping

This workflow is designed for entrepreneurs, sales teams, marketers, and agencies who want to automate lead discovery and build qualified business contact lists — without manual searching or copying d

@Apify/N8N Nodes Apify, Google Sheets, Telegram Trigger +3
Web Scraping

This workflow automates the entire process of lead generation and personalized outreach drafting for local businesses. It utilizes Apify to scrape business data from Google Maps based on your search c

HTTP Request, OpenAI, Google Sheets +1
Web Scraping

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

OpenAI, Google Sheets, @Apify/N8N Nodes Apify +1