{
  "name": "Scrape Google Maps by area & generate outreach messages for lead generation",
  "nodes": [
    {
      "id": "50f8bf9b-b49a-4caf-816c-0a19f2c42d8a",
      "name": "Wait5",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1584,
        640
      ]
    },
    {
      "id": "fb7673ef-58ef-47a7-a6ab-59a96c600113",
      "name": "Count1",
      "type": "n8n-nodes-base.set",
      "position": [
        -2064,
        384
      ]
    },
    {
      "id": "0bf29afc-517a-4df0-a8a5-3db4f228fb43",
      "name": "Count Increment1",
      "type": "n8n-nodes-base.set",
      "position": [
        -1408,
        640
      ]
    },
    {
      "id": "26054f12-cd84-409d-ace8-8e974d4ad3cf",
      "name": "No Operation, do nothing4",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1840,
        384
      ]
    },
    {
      "id": "40669acb-1761-4296-8eb4-579660d1dac3",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -2736,
        384
      ]
    },
    {
      "id": "259bf7c0-e7fe-40d4-99b5-2b14c81f425c",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        880,
        384
      ]
    },
    {
      "id": "d9ebef8c-b67e-48b6-8c9e-1de9365f7783",
      "name": "Create Table",
      "type": "n8n-nodes-base.postgres",
      "position": [
        -2448,
        -96
      ]
    },
    {
      "id": "92750861-c9e6-49e3-ac95-a795873f6333",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2720,
        -96
      ]
    },
    {
      "id": "f2026d33-7f29-4626-963f-411990cd4afc",
      "name": "scrape_as_markdown",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        496,
        208
      ]
    },
    {
      "id": "e8c95bf2-2bcf-451d-a465-1e1d8e91b584",
      "name": "Request finished",
      "type": "n8n-nodes-base.if",
      "position": [
        -1424,
        384
      ]
    },
    {
      "id": "01576305-68c7-4617-b144-e8d6d53c231c",
      "name": "Reached retry limit",
      "type": "n8n-nodes-base.if",
      "position": [
        -1824,
        640
      ]
    },
    {
      "id": "85ffc9bb-fce9-4fe9-af75-937bf3c78773",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2096,
        272
      ],
      "parameters": {
        "width": 848,
        "height": 592,
        "content": "## Retry logic\nRetries until the extraction is ready or until the retry limit is reached"
      }
    },
    {
      "id": "b71ae4f9-184d-4bd1-994a-adc04f2783f5",
      "name": "Message Generator",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1088,
        384
      ]
    },
    {
      "id": "9859f00a-697b-4053-97d4-0b9995fcbc7a",
      "name": "Company website exists",
      "type": "n8n-nodes-base.if",
      "position": [
        16,
        384
      ]
    },
    {
      "id": "a347e372-2f66-4420-a242-6a78805dda6c",
      "name": "Organize data",
      "type": "n8n-nodes-base.set",
      "position": [
        -688,
        384
      ]
    },
    {
      "id": "33646f79-938a-4664-8db0-300b084555e9",
      "name": "Set Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        -464,
        384
      ]
    },
    {
      "id": "73d9e7c7-f169-44f7-9d1e-3cca73b836bd",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        352
      ],
      "parameters": {
        "width": 192,
        "height": 80,
        "content": "### ☝️ Bright Data MCP\nPlace your token here"
      }
    },
    {
      "id": "3b641cc7-1b9b-44a5-8d7c-e4f0a92d722d",
      "name": "Bright Data | Request data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2304,
        384
      ]
    },
    {
      "id": "0b1c5b72-e2b8-47f6-a4a8-c1c8079fe1d7",
      "name": "Set Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        640,
        0
      ]
    },
    {
      "id": "18b73983-a302-47a8-8713-23769d72caad",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2768,
        -336
      ],
      "parameters": {
        "width": 528,
        "height": 432,
        "content": "## Run this to create your Supabase table"
      }
    },
    {
      "id": "3652dcbb-195a-49bd-8cfd-9135fc9f5c5f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2384,
        224
      ],
      "parameters": {
        "width": 256,
        "height": 336,
        "content": "The `zoom_level` controls the radius of your search. A lower zoom means a higher radius.\n\nThe `dataset_id` refers to the [Google Maps scraper](https://brightdata.com/cp/scrapers/api/gd_m8ebnr0q2qlklc0"
      }
    },
    {
      "id": "138123ad-ccbf-44b5-a880-16048feabaa4",
      "name": "Extract latitude and logitude from URL",
      "type": "n8n-nodes-base.set",
      "position": [
        -2528,
        384
      ]
    },
    {
      "id": "20692ebd-54d3-466f-8fc3-4680ae6c6649",
      "name": "Check status of data extraction",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -1632,
        384
      ]
    },
    {
      "id": "4ad46e5e-fd26-479f-82fe-9e9eadc6f726",
      "name": "Download the snapshot content",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -1168,
        384
      ]
    },
    {
      "id": "cb24cd2f-6573-4ca4-932e-e3facbd99e63",
      "name": "Snapshot finished building",
      "type": "n8n-nodes-base.if",
      "position": [
        -928,
        384
      ]
    },
    {
      "id": "29293465-3a93-4594-9351-8d753414092c",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -912,
        592
      ]
    },
    {
      "id": "49295de7-384b-4ded-80d3-be6d82d624db",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        304
      ],
      "parameters": {
        "width": 224,
        "height": 224,
        "content": "Limit the amount of items to save in your database, if you'd like."
      }
    },
    {
      "id": "2b0580c3-098b-4cbb-8df0-a202fab50c76",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1088,
        592
      ]
    },
    {
      "id": "0d412f34-8db8-444a-8b4e-3ef535f7bf66",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        384
      ]
    },
    {
      "id": "38e7f499-1212-413f-9654-b5a784b4b428",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        240
      ],
      "parameters": {
        "width": 208,
        "height": 288,
        "content": "A loop is used here to ensure that even if an error occurs with one of the items, all previous items will still be saved in the database."
      }
    },
    {
      "id": "f96bfc5e-9d97-4941-84c3-02803bfafbe5",
      "name": "Scrape & Summarize",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        272,
        0
      ]
    },
    {
      "id": "ba12786e-24b4-4262-a7f8-e883cf3d2367",
      "name": "Supabase | Upsert row",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1456,
        384
      ]
    },
    {
      "id": "eec559ce-5a6b-4ef5-9571-4501b0aead51",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1376,
        224
      ],
      "parameters": {
        "width": 272,
        "height": 320,
        "content": "To connect to Supabase using Postgres credentials, just click the `Connect` button in Supabase header and use the `Transaction pooler` parameters.\n\n[Official documentation](https://supabase.com/docs/g"
      }
    },
    {
      "id": "2e2c2538-d0f9-4b99-8416-01fa05155707",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2544,
        -256
      ],
      "parameters": {
        "width": 272,
        "height": 320,
        "content": "To connect to Supabase using Postgres credentials, just click the `Connect` button in Supabase header and use the `Transaction pooler` parameters.\n\n[Official documentation](https://supabase.com/docs/g"
      }
    },
    {
      "id": "2afe13ea-056e-4cf6-89cf-004185d14da9",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3216,
        -336
      ],
      "parameters": {
        "width": 416,
        "height": 848,
        "content": "### This n8n workflow automates lead extraction from Google Maps, enriches data with AI, and stores results for cold outreach.\n\nIt uses the [Bright Data](https://brightdata.com/) community node and Br"
      }
    },
    {
      "id": "ff9438ac-9290-491f-b057-b201aa5cc2b0",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -112
      ],
      "parameters": {
        "width": 660,
        "height": 664,
        "content": "# Author\n![Solomon](https://gravatar.com/avatar/79aa147f090807fe0f618fb47a1de932669e385bb0c84bf3a7f891ae7d174256?r=pg&d=retro&size=200)\n### Solomon\n🎓 AI & Automation Educator - Follow me on [LinkedIn]"
      }
    },
    {
      "id": "17b4edba-7e3b-4e15-99b9-d8a2744e4e41",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        448
      ],
      "parameters": {
        "width": 620,
        "height": 80,
        "content": "### 💡 **Want to learn advanced n8n skills and earn money building workflows?**\n‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎Check out [Scrapes Academy](https://www.skool.com/scrapes/about?ref=21f10ad99f4d46ba9b8aaea8c9f58c34)"
      }
    },
    {
      "id": "e1b4b9c1-4abb-493c-b744-7729cf105337",
      "name": "gpt-5-mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        272,
        208
      ]
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Download the snapshot content",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Message Generator",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait5": {
      "main": [
        [
          {
            "node": "Count Increment1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Count1": {
      "main": [
        [
          {
            "node": "No Operation, do nothing4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Limit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Fields": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "gpt-5-mini": {
      "ai_languageModel": [
        [
          {
            "node": "Scrape & Summarize",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Organize data": {
      "main": [
        [
          {
            "node": "Set Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Company website exists",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Count Increment1": {
      "main": [
        [
          {
            "node": "No Operation, do nothing4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Request finished": {
      "main": [
        [
          {
            "node": "Download the snapshot content",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Reached retry limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message Generator": {
      "main": [
        [
          {
            "node": "Supabase | Upsert row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Extract latitude and logitude from URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape & Summarize": {
      "main": [
        [
          {
            "node": "Set Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "scrape_as_markdown": {
      "ai_tool": [
        [
          {
            "node": "Scrape & Summarize",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Reached retry limit": {
      "main": [
        [],
        [
          {
            "node": "Wait5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Supabase | Upsert row": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Company website exists": {
      "main": [
        [
          {
            "node": "Scrape & Summarize",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Message Generator",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "No Operation, do nothing4": {
      "main": [
        [
          {
            "node": "Check status of data extraction",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Bright Data | Request data": {
      "main": [
        [
          {
            "node": "Count1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Snapshot finished building": {
      "main": [
        [
          {
            "node": "Organize data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download the snapshot content": {
      "main": [
        [
          {
            "node": "Snapshot finished building",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check status of data extraction": {
      "main": [
        [
          {
            "node": "Request finished",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Create Table",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract latitude and logitude from URL": {
      "main": [
        [
          {
            "node": "Bright Data | Request data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}