AutomationFlowsData & Sheets › Extract Business Leads from Google Maps with Dumpling AI to Google Sheets

Extract Business Leads from Google Maps with Dumpling AI to Google Sheets

Extract Business Leads from Google Maps with Dumpling AI to Google Sheets. Uses stickyNote, manualTrigger, httpRequest, splitOut. Event-driven trigger; 5 nodes.

Event trigger★★☆☆☆ complexity5 nodesHttp RequestGoogle Sheets
Data & Sheets Trigger: Event Nodes: 5 Complexity: ★★☆☆☆

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "YZpFvpXOTYkBpiUU",
  "name": "Extract Business Leads from Google Maps with Dumpling AI to Google Sheets",
  "tags": [
    {
      "id": "TlcNkmb96fUfZ2eA",
      "name": "Tutorials",
      "createdAt": "2025-04-15T17:02:00.249Z",
      "updatedAt": "2025-04-15T17:02:00.249Z"
    }
  ],
  "nodes": [
    {
      "id": "3a49e594-6c62-4128-825e-99cdfd7e6ed5",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -660,
        -200
      ],
      "parameters": {
        "width": 600,
        "height": 700,
        "content": "#### \ud83d\udd0d Workflow Goal\nAutomatically search Google Maps using Dumpling AI based on a keyword (e.g., best restaurants in New York), extract results, and log them into a structured Google Sheet.\n\n## \ud83d\ude80 Workflow Steps\n1. **Manual Trigger**\n   - Starts the workflow when testing manually.\n\n2. **Dumpling AI Google Search**\n   - Sends a POST request to Dumpling AI to search for locations on Google Maps based on your query.\n\n3. **Split Out Node**\n   - Breaks the `places[]` array into individual items so each result can be handled separately.\n\n4. **Google Sheets Node**\n   - Appends each place\u2019s data (name, address, phone, website, rating, etc.) into a specific tab of your Google Sheets.\n\n##### \ud83e\udde0 Notes\n- The search query is currently set to: `\"best+restaurants+in+New+York\"`\n- Output columns include rating, price level, website, phone, booking links, etc.\n- Each run consumes Dumpling AI credits per query.\n- You can customize search keywords or location in the HTTP Request body.\n\n#### \u2705 Tip\nTo automate this regularly, change the trigger node to a **Schedule Trigger** and add dynamic query input using a **Set** or **Webhook** node.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0a4ee00a-19cf-4d1e-a145-b5c5619ce636",
      "name": "Trigger: Manual Test Run",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        120
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "26fdb640-93a0-4312-beaf-4c07fff87751",
      "name": "Search Google Maps via Dumpling AI",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        220,
        120
      ],
      "parameters": {
        "url": "https://app.dumplingai.com/api/v1/search-maps",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"query\": \"best+restaurants+in+New+York\", \n  \"language\": \"en\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d3fafc2c-0b9d-4e83-83aa-de24d11fc0e1",
      "name": "Split Places List for Processing",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        440,
        120
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "places"
      },
      "typeVersion": 1
    },
    {
      "id": "83b48532-b1fb-4ab3-9596-6e96526bfd49",
      "name": "Save Results to Google Sheet (Place Info)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        660,
        120
      ],
      "parameters": {
        "columns": {
          "value": {
            "type": "={{ $json.type }}",
            "Name ": "={{ $json.title }}",
            "rating": "={{ $json.rating }}",
            "Address": "={{ $json.address }}",
            "Website": "={{ $json.website }}",
            "Position": "={{ $json.position }}",
            "priceLevel": "={{ $json.priceLevel }}",
            "Booking Link": "={{ $json.bookingLinks[0] }}",
            "Phone number": "={{ $json.phoneNumber }}"
          },
          "schema": [
            {
              "id": "Name ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Name ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "rating",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "priceLevel",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "priceLevel",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "type",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "type",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "I use an HTTP request in n8n, I returned up to 10",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "I use an HTTP request in n8n, I returned up to 10",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Booking Link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Booking Link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Phone number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Position",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Position",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pb4WLqv2EruLM1z9-utehcINolSj0vlUqZionyLoRUs/edit#gid=1069765279",
          "cachedResultName": "Google Maps"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1pb4WLqv2EruLM1z9-utehcINolSj0vlUqZionyLoRUs/edit?usp=drivesdk",
          "cachedResultName": "Places"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "171ef405-bac6-42c0-a3c3-c28cb49ff21a",
  "connections": {
    "Trigger: Manual Test Run": {
      "main": [
        [
          {
            "node": "Search Google Maps via Dumpling AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Places List for Processing": {
      "main": [
        [
          {
            "node": "Save Results to Google Sheet (Place Info)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Google Maps via Dumpling AI": {
      "main": [
        [
          {
            "node": "Split Places List for Processing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

About this workflow

Extract Business Leads from Google Maps with Dumpling AI to Google Sheets. Uses stickyNote, manualTrigger, httpRequest, splitOut. Event-driven trigger; 5 nodes.

Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →