{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "50f8bf9b-b49a-4caf-816c-0a19f2c42d8a",
      "name": "Wait5",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1584,
        640
      ],
      "parameters": {
        "amount": 60
      },
      "typeVersion": 1.1
    },
    {
      "id": "fb7673ef-58ef-47a7-a6ab-59a96c600113",
      "name": "Count1",
      "type": "n8n-nodes-base.set",
      "position": [
        -2064,
        384
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ef3259b8-3818-4584-ad70-72ea81dafda2",
              "name": "count",
              "type": "number",
              "value": 0
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0bf29afc-517a-4df0-a8a5-3db4f228fb43",
      "name": "Count Increment1",
      "type": "n8n-nodes-base.set",
      "position": [
        -1408,
        640
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d05a51e9-98b5-4f27-a9bc-a7a2a7a16c8d",
              "name": "=count",
              "type": "number",
              "value": "={{ $('No Operation, do nothing4').last().json.count + 1}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "26054f12-cd84-409d-ace8-8e974d4ad3cf",
      "name": "No Operation, do nothing4",
      "type": "n8n-nodes-base.noOp",
      "position": [
        -1840,
        384
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "40669acb-1761-4296-8eb4-579660d1dac3",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -2736,
        384
      ],
      "parameters": {
        "options": {
          "buttonLabel": "Scrape",
          "appendAttribution": false,
          "respondWithOptions": {
            "values": {
              "formSubmittedText": "Scraping started \ud83d\udd0e"
            }
          }
        },
        "formTitle": "Maps Extractor",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Location URL",
              "placeholder": "https://www.google.com.br/maps/@-27.0969036,-52.6273034,14z?hl=pt-BR&entry=ttu&g_ep=EgoyMDI1MDcwOS4wIKXMDSoASAFQAw%3D%3D",
              "requiredField": true
            },
            {
              "fieldLabel": "Keyword Search",
              "placeholder": "Restaurant",
              "requiredField": true
            },
            {
              "fieldLabel": "Country",
              "placeholder": "US",
              "requiredField": true
            },
            {
              "fieldLabel": "My company's segment",
              "placeholder": "Marketing Agency",
              "requiredField": true
            }
          ]
        },
        "formDescription": "Use this form to scrape businesses from Google Maps, based on a starting location.\n\nMake sure to copy the URL from your browser address bar. DO NOT use the Share feature in Google Maps."
      },
      "typeVersion": 2.2
    },
    {
      "id": "259bf7c0-e7fe-40d4-99b5-2b14c81f425c",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        880,
        384
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "d9ebef8c-b67e-48b6-8c9e-1de9365f7783",
      "name": "Create Table",
      "type": "n8n-nodes-base.postgres",
      "position": [
        -2448,
        -96
      ],
      "parameters": {
        "query": "CREATE TABLE business_scraping_result (\n    place_id text PRIMARY KEY,\n    page_summary TEXT,\n    name TEXT,\n    category TEXT,\n    address TEXT,\n    description TEXT,\n    google_url TEXT,\n    website TEXT,\n    phone_number TEXT,\n    reviews_count INTEGER,\n    rating NUMERIC(2,1),\n    services_provided TEXT[],\n    top_reviews JSONB,\n    sales_helper TEXT\n);\n",
        "options": {},
        "operation": "executeQuery"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "92750861-c9e6-49e3-ac95-a795873f6333",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "disabled": true,
      "position": [
        -2720,
        -96
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "f2026d33-7f29-4626-963f-411990cd4afc",
      "name": "scrape_as_markdown",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        496,
        208
      ],
      "parameters": {
        "include": "selected",
        "endpointUrl": "=https://mcp.brightdata.com/mcp?token=YOUR_BRIGHT_DATA_TOKEN",
        "includeTools": [
          "scrape_as_markdown"
        ],
        "serverTransport": "httpStreamable"
      },
      "typeVersion": 1.1
    },
    {
      "id": "e8c95bf2-2bcf-451d-a465-1e1d8e91b584",
      "name": "Request finished",
      "type": "n8n-nodes-base.if",
      "position": [
        -1424,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "ea3eb544-5ee9-49b4-85b2-3af89684ed61",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "=running"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "01576305-68c7-4617-b144-e8d6d53c231c",
      "name": "Reached retry limit",
      "type": "n8n-nodes-base.if",
      "position": [
        -1824,
        640
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f118e0f7-8+1234567890-f0f31b4cdfd6",
              "operator": {
                "type": "number",
                "operation": "equals"
              },
              "leftValue": "={{ $('No Operation, do nothing4').last().json.count }}",
              "rightValue": 10
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "85ffc9bb-fce9-4fe9-af75-937bf3c78773",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2096,
        272
      ],
      "parameters": {
        "color": 7,
        "width": 848,
        "height": 592,
        "content": "## Retry logic\nRetries until the extraction is ready or until the retry limit is reached"
      },
      "typeVersion": 1
    },
    {
      "id": "b71ae4f9-184d-4bd1-994a-adc04f2783f5",
      "name": "Message Generator",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1088,
        384
      ],
      "parameters": {
        "text": "={{ JSON.stringify($json) }}",
        "batching": {},
        "messages": {
          "messageValues": [
            {
              "message": "=You are a business development assistant helping an entrepreneur prepare for a cold call to a business lead.\n\nTake into account that my company segment is: {{ $('On form submission').first().json['My company\\'s segment'] }}\n\n# TASK\nYou will receive structured data about a business, including basic info, services, reviews, and contact details.\n\nYour job is to generate:\n1. A short cold call opening message the entrepreneur can use to start the conversation.\n2. A list of supportive talking points or insights the entrepreneur can use during the call to sound informed and build rapport.\n\n# OUTPUT STRUCTURE\n1. Opening Message (Spoken Script):\n- 2\u20134 sentences.\n- Friendly, confident, respectful tone.\n- Show that the caller is familiar with the business.\n- Mention something specific (e.g. high rating, food quality, atmosphere, community praise).\n- Introduce the caller\u2019s intention (e.g. connect, collaborate, learn more).\n\n2. Call Support Notes (Bullet List):\n- Provide 3\u20135 relevant talking points about the business based on reviews, services, and offerings.\n- Suggest areas the entrepreneur can mention or ask about (e.g. \u201cYour place seems popular with tourists and locals alike \u2014 how do you approach that balance?\u201d)\n- Avoid quoting reviews verbatim \u2014 instead, summarize sentiment or praise.\n\n# INSTRUCTIONS\n- Generate a personalized cold call opening message\n- Generate a list of insightful, natural talking points to help the entrepreneur carry the conversation confidently\n\n# GUIDELINES\n- Output only the results, without any intro or outro text."
            }
          ]
        },
        "promptType": "define"
      },
      "executeOnce": false,
      "typeVersion": 1.7
    },
    {
      "id": "9859f00a-697b-4053-97d4-0b9995fcbc7a",
      "name": "Company website exists",
      "type": "n8n-nodes-base.if",
      "position": [
        16,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "48807393-7b5c-4403-9d00-7dff6d9b1a5b",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json?.company?.open_website }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "a347e372-2f66-4420-a242-6a78805dda6c",
      "name": "Organize data",
      "type": "n8n-nodes-base.set",
      "position": [
        -688,
        384
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e695fad7-d55c-4d88-8ce8-f7940f0bb902",
              "name": "place_id",
              "type": "string",
              "value": "={{ $json.place_id }}"
            },
            {
              "id": "5ec77d22-6cae-49a2-9bad-16a542f0929c",
              "name": "=company.google_url",
              "type": "string",
              "value": "={{ $json.url }}"
            },
            {
              "id": "d318da82-27c7-431c-9fe0-dfd1819436e1",
              "name": "company.name",
              "type": "string",
              "value": "={{ $json.name }}"
            },
            {
              "id": "6b040b65-255c-4f3a-9bb8-e40eda983106",
              "name": "company.category",
              "type": "string",
              "value": "={{ $json.category }}"
            },
            {
              "id": "13ebb481-c965-4c2e-aa4f-da4a5a5f9de2",
              "name": "company.address",
              "type": "string",
              "value": "={{ $json.address }}"
            },
            {
              "id": "eeebdad8-ca95-4b94-a7d1-f9a260b91844",
              "name": "company.description",
              "type": "string",
              "value": "={{ $json.description }}"
            },
            {
              "id": "f4d61c24-1dea-48c8-b0c5-b34db06f434a",
              "name": "company.reviews_count",
              "type": "number",
              "value": "={{ $json.reviews_count }}"
            },
            {
              "id": "06cc04a8-dc98-4deb-aaa9-8d3258cefc31",
              "name": "company.rating",
              "type": "number",
              "value": "={{ $json.rating }}"
            },
            {
              "id": "5db1cdc7-e02f-4aa0-8a63-fac3b404ba5f",
              "name": "company.services_provided",
              "type": "array",
              "value": "={{ $json.services_provided }}"
            },
            {
              "id": "0d22b017-0cc9-4e04-9b1e-1cb15474f56c",
              "name": "company.open_website",
              "type": "string",
              "value": "={{ $json.open_website }}"
            },
            {
              "id": "2abb740f-0dcf-4d1b-96a9-408013eb76fe",
              "name": "company.phone_number",
              "type": "string",
              "value": "={{ $json.phone_number }}"
            },
            {
              "id": "11b1a2e5-c226-4585-a2cc-42d08918dcd8",
              "name": "company.top_reviews",
              "type": "array",
              "value": "={{ $json.top_reviews }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "33646f79-938a-4664-8db0-300b084555e9",
      "name": "Set Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        -464,
        384
      ],
      "parameters": {
        "maxItems": 15
      },
      "typeVersion": 1
    },
    {
      "id": "73d9e7c7-f169-44f7-9d1e-3cca73b836bd",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        352
      ],
      "parameters": {
        "color": 3,
        "width": 192,
        "height": 80,
        "content": "### \u261d\ufe0f Bright Data MCP\nPlace your token here"
      },
      "typeVersion": 1
    },
    {
      "id": "3b641cc7-1b9b-44a5-8d7c-e4f0a92d722d",
      "name": "Bright Data | Request data",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2304,
        384
      ],
      "parameters": {
        "url": "https://api.brightdata.com/datasets/v3/trigger",
        "method": "POST",
        "options": {},
        "jsonBody": "=[\n  {\n    \"country\": \"{{ $json.Country }}\",\n    \"zoom_level\": \"14\",\n    \"keyword\": \"{{ $json['Keyword Search'] }}\",\n    \"lat\": \"{{ $json.latitude }}\",\n    \"long\": {{ $json.longitude.toNumber() }}\n  }\n]",
        "sendBody": true,
        "sendQuery": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "dataset_id",
              "value": "gd_m8ebnr0q2qlklc02fz"
            },
            {
              "name": "include_errors",
              "value": "true"
            },
            {
              "name": "type",
              "value": "discover_new"
            },
            {
              "name": "discover_by",
              "value": "location"
            }
          ]
        },
        "nodeCredentialType": "brightdataApi"
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0b1c5b72-e2b8-47f6-a4a8-c1c8079fe1d7",
      "name": "Set Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        640,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "aacc7f04-f2db-4dbd-8089-21a11ce5eaa4",
              "name": "summary",
              "type": "string",
              "value": "={{ $json.output }}"
            },
            {
              "id": "9011fbcc-142b-4366-ad43-5462b4d1a4c1",
              "name": "company",
              "type": "object",
              "value": "={{ $('Set Limit').item.json.company }}"
            },
            {
              "id": "84077369-7220-47d3-b072-72e7f976b20a",
              "name": "place_id",
              "type": "string",
              "value": "={{ $('Set Limit').item.json.place_id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "18b73983-a302-47a8-8713-23769d72caad",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2768,
        -336
      ],
      "parameters": {
        "color": 4,
        "width": 528,
        "height": 432,
        "content": "## Run this to create your Supabase table"
      },
      "typeVersion": 1
    },
    {
      "id": "3652dcbb-195a-49bd-8cfd-9135fc9f5c5f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2384,
        224
      ],
      "parameters": {
        "color": 7,
        "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_m8ebnr0q2qlklc02fz/location/) from BrightData"
      },
      "typeVersion": 1
    },
    {
      "id": "138123ad-ccbf-44b5-a880-16048feabaa4",
      "name": "Extract latitude and logitude from URL",
      "type": "n8n-nodes-base.set",
      "position": [
        -2528,
        384
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3210b179-d62e-458a-a265-c8ecdb21423f",
              "name": "latitude",
              "type": "string",
              "value": "={{ $json['Location URL'].match(/@(-?\\d+\\.\\d+),(-?\\d+\\.\\d+)/)[1] }}"
            },
            {
              "id": "b2c0c095-08a1-434e-86cd-a68901666d1a",
              "name": "longitude",
              "type": "string",
              "value": "={{ $json['Location URL'].match(/@(-?\\d+\\.\\d+),(-?\\d+\\.\\d+)/)[2] }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "20692ebd-54d3-466f-8fc3-4680ae6c6649",
      "name": "Check status of data extraction",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -1632,
        384
      ],
      "parameters": {
        "resource": "webScrapper",
        "operation": "monitorProgressSnapshot",
        "snapshot_id": "={{ $('Bright Data | Request data').item.json.snapshot_id }}",
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4ad46e5e-fd26-479f-82fe-9e9eadc6f726",
      "name": "Download the snapshot content",
      "type": "@brightdata/n8n-nodes-brightdata.brightData",
      "position": [
        -1168,
        384
      ],
      "parameters": {
        "resource": "webScrapper",
        "operation": "downloadSnapshot",
        "snapshot_id": "={{ $('Bright Data | Request data').item.json.snapshot_id }}",
        "requestOptions": {}
      },
      "credentials": {
        "brightdataApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cb24cd2f-6573-4ca4-932e-e3facbd99e63",
      "name": "Snapshot finished building",
      "type": "n8n-nodes-base.if",
      "position": [
        -928,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "7095f725-e308-44a2-884b-23f64a38b5cf",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "building"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "29293465-3a93-4594-9351-8d753414092c",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -912,
        592
      ],
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "49295de7-384b-4ded-80d3-be6d82d624db",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 224,
        "content": "Limit the amount of items to save in your database, if you'd like."
      },
      "typeVersion": 1
    },
    {
      "id": "2b0580c3-098b-4cbb-8df0-a202fab50c76",
      "name": "Google Gemini Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1088,
        592
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0d412f34-8db8-444a-8b4e-3ef535f7bf66",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        384
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "38e7f499-1212-413f-9654-b5a784b4b428",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        240
      ],
      "parameters": {
        "color": 7,
        "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."
      },
      "typeVersion": 1
    },
    {
      "id": "f96bfc5e-9d97-4941-84c3-02803bfafbe5",
      "name": "Scrape & Summarize",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        272,
        0
      ],
      "parameters": {
        "text": "=Use the tool 'scrape_as_markdown' with the url:\n{{ $json.company.open_website }}",
        "options": {
          "systemMessage": "=You are a web-scraping AI agent equipped with the tool 'scrape_as_markdown'.\n\n# TASK\nScrape the homepage of the provided website and generate a structured summary of the company based on the main content.\n\n## OBJECTIVES\n1. Scrape.\n2. Extract only the core content of the page.\n3. Identify key information:\n   - Company mission or vision\n   - Products or services offered\n   - Target audience or market\n   - Key messaging, branding, or positioning\n   - Any highlighted achievements, updates, or announcements\n\n## CONSTRAINTS\n- Prioritize meaningful textual content over visuals or layout elements.\n- Ensure clarity and neutrality in the summary.\n\n# OUTPUT REQUIREMENTS\nReturn a summary of 300-500 words in the following format:\n[Company Name]:\n\n[Summary of company in 300-500 words, clearly structured and written in neutral, informative language.]"
        },
        "promptType": "define"
      },
      "executeOnce": false,
      "typeVersion": 2.2
    },
    {
      "id": "ba12786e-24b4-4262-a7f8-e883cf3d2367",
      "name": "Supabase | Upsert row",
      "type": "n8n-nodes-base.postgres",
      "position": [
        1456,
        384
      ],
      "parameters": {
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "business_scraping_result",
          "cachedResultName": "business_scraping_result"
        },
        "schema": {
          "__rl": true,
          "mode": "list",
          "value": "public"
        },
        "columns": {
          "value": {
            "name": "={{ $('Merge').item.json.company.name }}",
            "rating": "={{ $('Merge').item.json.company.rating }}",
            "address": "={{ $('Merge').item.json.company.address }}",
            "website": "={{ $('Merge').item.json.company.open_website }}",
            "category": "={{ $('Merge').item.json.company.category }}",
            "place_id": "={{ $('Merge').item.json.place_id }}",
            "google_url": "={{ $('Merge').item.json.company.google_url }}",
            "description": "={{ $('Merge').item.json.company.description }}",
            "top_reviews": "={{ { \"reviews\": $('Merge').item.json.company.top_reviews } }}",
            "page_summary": "={{ $('Merge').item.json.summary }}",
            "phone_number": "={{ $('Merge').item.json.company.phone_number }}",
            "sales_helper": "={{ $json.text }}",
            "reviews_count": "={{ $('Merge').item.json.company.reviews_count }}",
            "services_provided": "={{ $('Merge').item.json.company.services_provided }}"
          },
          "schema": [
            {
              "id": "place_id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": true,
              "displayName": "place_id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "page_summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "page_summary",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "category",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "category",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "address",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "google_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "google_url",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "website",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "website",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "phone_number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone_number",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "reviews_count",
              "type": "number",
              "display": true,
              "required": false,
              "displayName": "reviews_count",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "rating",
              "type": "number",
              "display": true,
              "required": false,
              "displayName": "rating",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "services_provided",
              "type": "array",
              "display": true,
              "required": false,
              "displayName": "services_provided",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "top_reviews",
              "type": "object",
              "display": true,
              "required": false,
              "displayName": "top_reviews",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            },
            {
              "id": "sales_helper",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sales_helper",
              "defaultMatch": false,
              "canBeUsedToMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "place_id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "upsert"
      },
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "eec559ce-5a6b-4ef5-9571-4501b0aead51",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1376,
        224
      ],
      "parameters": {
        "color": 7,
        "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/guides/database/connecting-to-postgres)"
      },
      "typeVersion": 1
    },
    {
      "id": "2e2c2538-d0f9-4b99-8416-01fa05155707",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2544,
        -256
      ],
      "parameters": {
        "color": 7,
        "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/guides/database/connecting-to-postgres)"
      },
      "typeVersion": 1
    },
    {
      "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 Bright Data MCP for scraping and AI message generation.\n\n### **How it works**\n1. **Form Submission**\n    \n    User provides Google Maps starting location, keyword and country.\n    \n2. **Bright Data Scraping**\n    \n    [Bright Data](https://brightdata.com/) community node triggers a Maps scraping job, monitors progress, and downloads results.\n    \n3. **AI Message Generation**\n    \n    Uses Bright Data MCP with LLMs to create a personalized cold call script and talking points for each lead.\n    \n4. **Database Storage**\n    \n    Enriched leads and scripts are upserted to Supabase.\n    \n\n### **How to use**\nSet up all the credentials, create your Postgres table and submit the form. The rest happens automatically.\n\n### **Requirements**\n- LLM account (OpenAI, Gemini\u2026) for API usage.\n- [Bright Data](https://brightdata.com/) account for API and MCP usage.\n- Supabase account (or other Postgres database) to store information."
      },
      "typeVersion": 1
    },
    {
      "id": "ff9438ac-9290-491f-b057-b201aa5cc2b0",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 660,
        "height": 664,
        "content": "# Author\n![Solomon](https://gravatar.com/avatar/79aa147f090807fe0f618fb47a1de932669e385bb0c84bf3a7f891ae7d174256?r=pg&d=retro&size=200)\n### Solomon\n\ud83c\udf93 AI & Automation Educator - Follow me on [LinkedIn](https://www.linkedin.com/in/guisalomao/)\n\nFor business inquiries:\n- automations.solomon@gmail.com\n- [Telegram](https://t.me/salomaoguilherme)\n- [LinkedIn](https://www.linkedin.com/in/guisalomao/)\n\n\n### Check out my other templates\n### \ud83d\udc49 https://n8n.io/creators/solomon/\n"
      },
      "typeVersion": 1
    },
    {
      "id": "17b4edba-7e3b-4e15-99b9-d8a2744e4e41",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        448
      ],
      "parameters": {
        "color": 4,
        "width": 620,
        "height": 80,
        "content": "### \ud83d\udca1 **Want to learn advanced n8n skills and earn money building workflows?**\n\u200e \u200e \u200e \u200e \u200e \u200e \u200e \u200eCheck out [Scrapes Academy](https://www.skool.com/scrapes/about?ref=21f10ad99f4d46ba9b8aaea8c9f58c34)"
      },
      "typeVersion": 1
    },
    {
      "id": "e1b4b9c1-4abb-493c-b744-7729cf105337",
      "name": "gpt-5-mini",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        272,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "gpt-5-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    }
  ],
  "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 \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Create Table",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract latitude and logitude from URL": {
      "main": [
        [
          {
            "node": "Bright Data | Request data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}