{
  "name": "Scrape Google Maps leads (email, phone, website) using Apify + GPT + Airtable",
  "nodes": [
    {
      "id": "14b47bce-f9fa-49cf-b8e9-263fd7d781d3",
      "name": "Fetch Business Data from Google Maps (Apify)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        240,
        0
      ]
    },
    {
      "id": "07c0d3e0-0a93-4cc7-900e-5f23a46a9f50",
      "name": "Clean Google Maps Data",
      "type": "n8n-nodes-base.set",
      "position": [
        480,
        0
      ]
    },
    {
      "id": "39439d62-c9ca-4f2b-bd37-6850cf14875c",
      "name": "Manual Workflow Execution",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        0
      ]
    },
    {
      "id": "1f9442b7-799e-4334-8126-5d501ef59e9e",
      "name": "Iterate Through Each Business Contact",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        752,
        0
      ]
    },
    {
      "id": "e1f2abe8-ae2c-4d91-b117-0bee95d5155c",
      "name": "Extract Only Website URLs",
      "type": "n8n-nodes-base.set",
      "position": [
        992,
        16
      ]
    },
    {
      "id": "0e2c8c55-ece3-4816-aaaa-bf293d2ea31a",
      "name": "Fetch Raw HTML Content from Business Website",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1280,
        16
      ]
    },
    {
      "id": "794ed0f3-8a69-405a-a985-ac94d31e7bd3",
      "name": "Extract Business Email from Website HTML (GPT-4)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1472,
        16
      ]
    },
    {
      "id": "03a525b4-448e-4259-bcd1-d4369dc6e902",
      "name": "Save Cleaned Lead Data into Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1872,
        16
      ]
    },
    {
      "id": "0856829d-5ae2-4af5-abb2-2f44b693eda4",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        -320
      ],
      "parameters": {
        "width": null,
        "height": 496,
        "content": "### Who is it for?  \nThis workflow is perfect for **marketers, sales teams, agencies, and local businesses** who want to save time by automating **lead generation from Google Maps**.  \n\nIt’s ideal for"
      }
    },
    {
      "id": "65e8fca8-b0dd-4243-a2b8-91874f80d870",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -928
      ],
      "parameters": {
        "width": null,
        "height": 1104,
        "content": "## Step 1 – Scraping Google Maps with Apify\n\nStart simply:\n\n- Open your n8n workflow and choose the trigger: “Execute Workflow” (manual trigger).  \n- Add an **HTTP Request node** (POST method).  \n- Go"
      }
    },
    {
      "id": "50426f1c-ef9b-4273-b58b-aa50c4ad2b4e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        416,
        -416
      ],
      "parameters": {
        "width": 272,
        "height": 592,
        "content": "## Step 2 – Cleaning Things Up (Edit Fields)\n\nRaw data is cool, but messy.  \n\n- Add an **Edit Fields node** (Manual Mapping mode).  \n- Keep only these fields:  \n\nTitle → {{ $json.title }}\nAddress → {{"
      }
    },
    {
      "id": "ff53aa61-c496-4102-a652-5cc8c6729784",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        688,
        -400
      ],
      "parameters": {
        "width": null,
        "height": 576,
        "content": "## Step 3 – Handling Each Contact Individually (Loop Over Items)\n\nNext, we process each contact one by one.  \n\n- Add the **Loop Over Items node**  \n- Set **Batch Size** to 20 (or more, depending on yo"
      }
    },
    {
      "id": "b444966c-2665-424d-918c-6ca2546743ed",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        -320
      ],
      "parameters": {
        "width": 256,
        "height": 496,
        "content": "## Step 5 – Scraping Each Website (HTTP Request)\n\n- Add another **HTTP Request node**  \n- Configure it as:  \n\nMethod: GET\nURL: {{ $json.website }}\n\nThis returns the raw HTML content of each website."
      }
    },
    {
      "id": "79bf33aa-1a55-430b-a54f-1c240bb2f0f8",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1440,
        -608
      ],
      "parameters": {
        "width": 288,
        "height": 784,
        "content": "## Step 6 – Extracting Emails with ChatGPT\n\n- Add an **OpenAI (Message a Model) node**  \n- Configure as follows:  \n  - Model: GPT-4-1-mini (or higher)  \n  - Operation: Message a Model  \n  - Simplify O"
      }
    },
    {
      "id": "0ccceeaf-5e73-4939-bb04-c82b484684f6",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        -544
      ],
      "parameters": {
        "width": 336,
        "height": 720,
        "content": "## Step 7 – Neatly Store Everything in Airtable\n\nAlmost done!  \n\n- Add an **Airtable → Create Record node**  \n- Map the fields like this:  \n\n| **Airtable Field** | **Content**                     | **"
      }
    },
    {
      "id": "4ea1da54-e1d2-4ddc-b503-0397715e5fb5",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        -256
      ],
      "parameters": {
        "width": 256,
        "height": 432,
        "content": "## Step 4 – Isolating Websites (Edit Fields again)\n\n- Add another **Edit Fields node** (Manual Mapping).  \n- Keep only:  \n\nWebsite → {{ $json.website }}"
      }
    },
    {
      "id": "c0deaef6-ca0f-4e62-92b3-9ea1e6a40ab8",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        768,
        -832
      ],
      "parameters": {
        "width": 512,
        "height": 288,
        "content": "![gif](https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExdnFscmdzNnZna2ppaWVjcWJneGQyYThqb2liOHZ6YzV0enI2ZTV3OSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/MC6eSuC3yypCU/giphy.gif)"
      }
    }
  ],
  "connections": {
    "Clean Google Maps Data": {
      "main": [
        [
          {
            "node": "Iterate Through Each Business Contact",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Only Website URLs": {
      "main": [
        [
          {
            "node": "Fetch Raw HTML Content from Business Website",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Workflow Execution": {
      "main": [
        [
          {
            "node": "Fetch Business Data from Google Maps (Apify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save Cleaned Lead Data into Airtable": {
      "main": [
        []
      ]
    },
    "Iterate Through Each Business Contact": {
      "main": [
        [],
        [
          {
            "node": "Extract Only Website URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Business Data from Google Maps (Apify)": {
      "main": [
        [
          {
            "node": "Clean Google Maps Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Raw HTML Content from Business Website": {
      "main": [
        [
          {
            "node": "Extract Business Email from Website HTML (GPT-4)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Business Email from Website HTML (GPT-4)": {
      "main": [
        [
          {
            "node": "Save Cleaned Lead Data into Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}