使用 Bright Data 抓取 Google 地图并生成 AI 外联消息用于潜在客户开发

高级

这是一个Lead Generation、Multimodal AI领域的自动化工作流,包含 36 个节点。主要使用 If、Set、Wait、Limit、Merge 等节点。 使用 Bright Data 抓取 Google 地图并生成 AI 外联消息用于潜在客户开发

前置要求
  • PostgreSQL 数据库连接信息
  • 可能需要目标 API 的认证凭证
  • OpenAI API Key
  • Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "meta": {
    "instanceId": "d6b502dfa4d9dd072cdc5c2bb763558661053f651289291352a84403e01b3d1b",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "50f8bf9b-b49a-4caf-816c-0a19f2c42d8a",
      "name": "等待5",
      "type": "n8n-nodes-base.wait",
      "position": [
        -1584,
        640
      ],
      "webhookId": "96e898b2-3f02-4654-9054-4b69dd63f87b",
      "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": "表单提交时",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -2736,
        384
      ],
      "webhookId": "dce1367e-cff9-4659-b0e4-28d77cffbbb8",
      "parameters": {
        "options": {
          "buttonLabel": "Scrape",
          "appendAttribution": false,
          "respondWithOptions": {
            "values": {
              "formSubmittedText": "Scraping started 🔎"
            }
          }
        },
        "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": "合并",
      "type": "n8n-nodes-base.merge",
      "position": [
        880,
        384
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "d9ebef8c-b67e-48b6-8c9e-1de9365f7783",
      "name": "创建表格",
      "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": {
          "id": "UhvXgYq3LTvFrpoz",
          "name": "Supabase | Bright Data"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "92750861-c9e6-49e3-ac95-a795873f6333",
      "name": "当点击“执行工作流”时",
      "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": "请求完成",
      "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": "达到重试限制",
      "type": "n8n-nodes-base.if",
      "position": [
        -1824,
        640
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "f118e0f7-8005-4064-8597-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": "便签",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2096,
        272
      ],
      "parameters": {
        "color": 7,
        "width": 848,
        "height": 592,
        "content": "## 重试逻辑"
      },
      "typeVersion": 1
    },
    {
      "id": "b71ae4f9-184d-4bd1-994a-adc04f2783f5",
      "name": "消息生成器",
      "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–4 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’s intention (e.g. connect, collaborate, learn more).\n\n2. Call Support Notes (Bullet List):\n- Provide 3–5 relevant talking points about the business based on reviews, services, and offerings.\n- Suggest areas the entrepreneur can mention or ask about (e.g. “Your place seems popular with tourists and locals alike — how do you approach that balance?”)\n- Avoid quoting reviews verbatim — 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": "公司网站存在",
      "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": "组织数据",
      "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": "设置限制",
      "type": "n8n-nodes-base.limit",
      "position": [
        -464,
        384
      ],
      "parameters": {
        "maxItems": 15
      },
      "typeVersion": 1
    },
    {
      "id": "73d9e7c7-f169-44f7-9d1e-3cca73b836bd",
      "name": "便签1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        480,
        352
      ],
      "parameters": {
        "color": 3,
        "width": 192,
        "height": 80,
        "content": "### ☝️ Bright Data MCP"
      },
      "typeVersion": 1
    },
    {
      "id": "3b641cc7-1b9b-44a5-8d7c-e4f0a92d722d",
      "name": "Bright 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": {
          "id": "szPPrbXtY1yv0t7E",
          "name": "BrightData test account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "0b1c5b72-e2b8-47f6-a4a8-c1c8079fe1d7",
      "name": "设置字段",
      "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": "便签2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2768,
        -336
      ],
      "parameters": {
        "color": 4,
        "width": 528,
        "height": 432,
        "content": "## 运行此操作以创建您的 Supabase 表"
      },
      "typeVersion": 1
    },
    {
      "id": "3652dcbb-195a-49bd-8cfd-9135fc9f5c5f",
      "name": "便签3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2384,
        224
      ],
      "parameters": {
        "color": 7,
        "width": 256,
        "height": 336,
        "content": "`zoom_level` 控制您的搜索半径。较低的缩放级别意味着较大的半径。"
      },
      "typeVersion": 1
    },
    {
      "id": "138123ad-ccbf-44b5-a880-16048feabaa4",
      "name": "从 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": "检查数据提取状态",
      "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": {
          "id": "szPPrbXtY1yv0t7E",
          "name": "BrightData test account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4ad46e5e-fd26-479f-82fe-9e9eadc6f726",
      "name": "下载快照内容",
      "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": {
          "id": "szPPrbXtY1yv0t7E",
          "name": "BrightData test account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "cb24cd2f-6573-4ca4-932e-e3facbd99e63",
      "name": "快照构建完成",
      "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": "等待",
      "type": "n8n-nodes-base.wait",
      "position": [
        -912,
        592
      ],
      "webhookId": "13bc3a84-cfab-4f8a-a31b-dcefd2ea197c",
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "49295de7-384b-4ded-80d3-be6d82d624db",
      "name": "便签4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 224,
        "height": 224,
        "content": "限制要保存到数据库中的项目数量(如果您愿意)。"
      },
      "typeVersion": 1
    },
    {
      "id": "e1b4b9c1-4abb-493c-b744-7729cf105337",
      "name": "OpenAI 聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        272,
        208
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0.5
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "5LVOlVwHUgB8MAj2",
          "name": "OpenAI - n8n project"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "2b0580c3-098b-4cbb-8df0-a202fab50c76",
      "name": "Google Gemini聊天模型",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1088,
        592
      ],
      "parameters": {
        "options": {},
        "modelName": "models/gemini-2.5-pro"
      },
      "credentials": {
        "googlePalmApi": {
          "id": "9iKgzeC7G4p9Z4Yu",
          "name": "Gemini API"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0d412f34-8db8-444a-8b4e-3ef535f7bf66",
      "name": "遍历项目",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        384
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "38e7f499-1212-413f-9654-b5a784b4b428",
      "name": "便签6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        240
      ],
      "parameters": {
        "color": 7,
        "width": 208,
        "height": 288,
        "content": "这里使用循环是为了确保即使某个项目出现错误,所有先前的项目仍将保存在数据库中。"
      },
      "typeVersion": 1
    },
    {
      "id": "f96bfc5e-9d97-4941-84c3-02803bfafbe5",
      "name": "抓取与总结",
      "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 | 更新或插入行",
      "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": {
          "id": "UhvXgYq3LTvFrpoz",
          "name": "Supabase | Bright Data"
        }
      },
      "typeVersion": 2.6
    },
    {
      "id": "eec559ce-5a6b-4ef5-9571-4501b0aead51",
      "name": "便签7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1376,
        224
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 320,
        "content": "要使用 Postgres 凭据连接到 Supabase,只需点击 Supabase 标题中的 `Connect` 按钮,并使用 `Transaction pooler` 参数。"
      },
      "typeVersion": 1
    },
    {
      "id": "2e2c2538-d0f9-4b99-8416-01fa05155707",
      "name": "便签8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2544,
        -256
      ],
      "parameters": {
        "color": 7,
        "width": 272,
        "height": 320,
        "content": "要使用 Postgres 凭据连接到 Supabase,只需点击 Supabase 标题中的 `Connect` 按钮,并使用 `Transaction pooler` 参数。"
      },
      "typeVersion": 1
    },
    {
      "id": "2afe13ea-056e-4cf6-89cf-004185d14da9",
      "name": "便签5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3216,
        -336
      ],
      "parameters": {
        "width": 416,
        "height": 848,
        "content": "### 此 n8n 工作流自动化从 Google Maps 提取潜在客户,使用 AI 丰富数据,并存储结果用于冷外展。"
      },
      "typeVersion": 1
    },
    {
      "id": "ff9438ac-9290-491f-b057-b201aa5cc2b0",
      "name": "便签10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        -112
      ],
      "parameters": {
        "color": 7,
        "width": 660,
        "height": 664,
        "content": "# 作者"
      },
      "typeVersion": 1
    },
    {
      "id": "17b4edba-7e3b-4e15-99b9-d8a2744e4e41",
      "name": "便签16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        448
      ],
      "parameters": {
        "color": 4,
        "width": 620,
        "height": 80,
        "content": "### 💡 **想学习高级n8n技能并通过构建工作流赚钱吗?**"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {
    "On form submission": [
      {
        "Country": "US",
        "formMode": "test",
        "submittedAt": "2025-08-05T02:44:02.015-03:00",
        "Location URL": "https://www.google.com/maps/place/Costco+Wholesale/@37.4761982,-122.2192525,16z/data=!4m15!1m8!3m7!1s0x808fb68ad0cfc739:0x7eb356b66bd4b50e!2sSilicon+Valley,+CA,+USA!3b1!8m2!3d37.387474!4d-122.0575434!16zL20vMDZwdzY!3m5!1s0x808fa308fb20aca3:0x4fcccf4c41f3ed6a!8m2!3d37.4784321!4d-122.2162829!16s%2Fg%2F1tg6vy9k?entry=ttu&g_ep=EgoyMDI1MDczMC4wIKXMDSoASAFQAw%3D%3D",
        "Keyword Search": "Restaurant",
        "My company's segment": "AI Agency"
      }
    ]
  },
  "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
          }
        ]
      ]
    },
    "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
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Scrape & Summarize",
            "type": "ai_languageModel",
            "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
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

这是一个高级难度的工作流,适用于Lead Generation、Multimodal AI等场景。适合高级用户,包含 16+ 个节点的复杂工作流

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量36
分类2
节点类型18
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Solomon

Solomon

@solomon

Teaching at the Scrapes Academy (see link below). For business inquiries: automations.solomon@gmail.com | Telegram: t.me/salomaoguilherme | LinkedIn: linkedin.com/in/guisalomao/

外部链接
在 n8n.io 上查看 →

分享此工作流