{
  "name": "Find leads on Google Maps and reach out automatically (GPT-4 + Airtable + Gmail)",
  "nodes": [
    {
      "id": "ca87077f-4fe9-4c15-955e-57aac8d40fec",
      "name": "Fetch Business Data from Google Maps (Apify)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        240,
        0
      ]
    },
    {
      "id": "ba6cc087-750f-424a-8707-c57c3a38a897",
      "name": "Clean Google Maps Data",
      "type": "n8n-nodes-base.set",
      "position": [
        512,
        0
      ]
    },
    {
      "id": "0e63ff27-e62f-4161-9015-177f5cec970e",
      "name": "Manual Workflow Execution",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        0
      ]
    },
    {
      "id": "06ea1c9e-e38c-471e-8a19-54ef9e637dc0",
      "name": "Iterate Through Each Business Contact",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        752,
        0
      ]
    },
    {
      "id": "90db8934-379e-4199-963d-e0dbf255f2f7",
      "name": "Extract Only Website URLs",
      "type": "n8n-nodes-base.set",
      "position": [
        1024,
        16
      ]
    },
    {
      "id": "fb9f0823-6d37-4633-b255-fc60810fbc66",
      "name": "Fetch Raw HTML Content from Business Website",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1264,
        16
      ]
    },
    {
      "id": "59ccca05-d725-4a87-a07d-5cc59698266f",
      "name": "Extract Business Email from Website HTML (GPT-4)",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        1472,
        16
      ]
    },
    {
      "id": "6a5b523b-58d7-429b-b75a-1857ced2d351",
      "name": "Save Cleaned Lead Data into Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1856,
        16
      ]
    },
    {
      "id": "5242f67b-ba4d-448f-a22b-24353fb3076b",
      "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": "050f1c72-62dc-44e9-90d1-c74088319dac",
      "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": "ebee292e-a095-4f1e-8371-2ba7ab1eebb6",
      "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": "e5108547-ac63-4148-a1b8-206970200676",
      "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": "447dec14-b73f-4800-bef7-1d791b76ef42",
      "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": "f7f95c1a-7fb5-4062-a2f1-1786e33ba02a",
      "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": "df761d36-58b3-4d6c-bb15-b35aef012a9f",
      "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 Output:"
      }
    },
    {
      "id": "283932b7-9d71-4648-8ed9-a511bb5fbda2",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1728,
        -560
      ],
      "parameters": {
        "width": 320,
        "height": 736,
        "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": "7afd389c-858e-4d26-8709-26efeafc14a0",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2192,
        16
      ]
    },
    {
      "id": "c1832863-372b-4862-b040-2870c4aa139f",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        -432
      ],
      "parameters": {
        "width": 384,
        "height": 608,
        "content": "## Step 8 – Automated Email via Gmail (The Final Touch)\n\n- Add a **Gmail → Send Email node** after your Airtable node.  \n- Configure it like this:  \n\nRecipient (To): {{ $json.fields.Email }}\nSubject: "
      }
    },
    {
      "id": "d2f3dd40-d553-45f9-8afc-e8602936e354",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        -928
      ],
      "parameters": {
        "width": 512,
        "height": 352,
        "content": "![gif](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExb296OG5sbzJnYjVtbXZndDM3ejkzMXQ1Z3QwM21oa2hsd2ZmZnkwNyZlcD12MV9naWZzX3NlYXJjaCZjdD1n/L5aC2b3jRvURi/giphy.gif)\n"
      }
    }
  ],
  "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": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "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
          }
        ]
      ]
    }
  }
}