AutomationFlowsMarketing & Ads › Automate Google Maps Lead Generation with Perplexity AI and Email Verification

Automate Google Maps Lead Generation with Perplexity AI and Email Verification

ByAntxon Pous @verificaremails on n8n.io

This template finds businesses on Google Maps → writes to Google Sheets → enriches + verifies email contact so your outreach stays clean and deliverable. It includes Sticky Notes** to explain the flow and setup. Search & save: Fetch places and append rows (Name, Address,…

Event trigger★★★★☆ complexity18 nodesHTTP RequestGoogle Sheets@Verificaremails/N8N Nodes VerificaremailsGoogle Sheets Trigger
Marketing & Ads Trigger: Event Nodes: 18 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #8904 — we link there as the canonical source.

This workflow follows the Google Sheets → Googlesheetstrigger recipe pattern — see all workflows that pair these two integrations.

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": "5xiooM6nIMsvcr9o",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Google Maps Data Extraction",
  "tags": [],
  "nodes": [
    {
      "id": "a495a9d9-782f-46e0-b2f7-55476ebe4ed8",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1632,
        1440
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "0e74a10e-ce5c-4616-842d-53812d1ff6e3",
      "name": "Set parameters",
      "type": "n8n-nodes-base.set",
      "position": [
        -1392,
        1440
      ],
      "parameters": {
        "values": {
          "number": [
            {
              "name": "num",
              "value": 10
            },
            {
              "name": "pageStart",
              "value": 1
            },
            {
              "name": "pageLimit",
              "value": 100
            }
          ],
          "string": [
            {
              "name": "q",
              "value": "librer\u00edas Vic"
            },
            {
              "name": "gl",
              "value": "es"
            },
            {
              "name": "hl",
              "value": "es"
            },
            {
              "name": "resultsSheetName",
              "value": "Resultados"
            },
            {
              "name": "logSheetName",
              "value": "Log"
            },
            {
              "name": "language",
              "value": "spanish"
            }
          ]
        },
        "options": {},
        "keepOnlySet": true
      },
      "typeVersion": 2
    },
    {
      "id": "1a3392af-449c-4c1d-8bed-2fee02f2bd7d",
      "name": "Split In Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -864,
        1440
      ],
      "parameters": {
        "options": {},
        "batchSize": "=1"
      },
      "typeVersion": 2
    },
    {
      "id": "ea10290d-ca7c-4437-bf82-90153c203e1b",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -448,
        1424
      ],
      "parameters": {
        "url": "https://google.serper.dev/places",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "sendBody": true,
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "q",
              "value": "={{ $('Set parameters').item.json.q }}"
            },
            {
              "name": "gl",
              "value": "={{ $('Set parameters').item.json.gl }}"
            },
            {
              "name": "page",
              "value": "={{ $json.page }}"
            },
            {
              "name": "hl",
              "value": "={{ $('Set parameters').item.json.hl }}"
            },
            {
              "name": "num",
              "value": "={{ $('Set parameters').item.json.num }}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {}
          ]
        }
      },
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f3911359-b48f-4860-9a9f-3e6199444d9f",
      "name": "Append row in sheet (Resultados)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        432,
        1024
      ],
      "parameters": {
        "columns": {
          "value": {
            "Name": "={{ $json.Name }}",
            "UUID": "={{ $json.UUID }}",
            "Email": "={{ $json.Email }}",
            "Phone": "={{ $json.Phone }}",
            "Rating": "={{ $json.Rating }}",
            "Address": "={{ $json.Address }}",
            "Website": "={{ $json.Website }}"
          },
          "schema": [
            {
              "id": "UUID",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "UUID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "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": "Website",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rating",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Valid Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Valid Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Valid Phone",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Valid Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 958337799,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E/edit#gid=958337799",
          "cachedResultName": "Resultados"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E/edit?usp=drivesdk",
          "cachedResultName": "Google_Maps_Leads"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "b1f3ae25-09f9-4ec4-96eb-70cb99b437c3",
      "name": "JavaScript - Page Management",
      "type": "n8n-nodes-base.code",
      "position": [
        -1120,
        1440
      ],
      "parameters": {
        "jsCode": "const { pageStart = 1, pageLimit = 50 } = $json;\nconst out = [];\nfor (let p = pageStart; p <= pageLimit; p++) out.push({ json: { page: p } });\nreturn out;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "1826c04a-c862-4f4e-9242-fa307254013e",
      "name": "JavaScript1 - Places Objects",
      "type": "n8n-nodes-base.code",
      "position": [
        240,
        1024
      ],
      "parameters": {
        "jsCode": "const places = $json.places || [];\nreturn places.map(p => ({\n  json: {\n    UUID: p.cid || '',\n    Name: p.title || '',\n    Address: p.address || '',\n    Website: p.website || '',\n    Rating: p.rating ?? '',\n    Email: '',\n    Phone: String(p.phoneNumber || '').replace(/^\\+/, '').replace(/\\s+/g, ''),\n    \"Opening Hours\": ''\n  }\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "c35c5058-c07d-45cd-9c2d-e2a2c4dfd107",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1984,
        848
      ],
      "parameters": {
        "width": 2672,
        "height": 784,
        "content": "## Google Maps Data Extraction\n**What it does:**\nPages through Serper\u2019s **Google Places** results, turns each `place` into a row, **appends to Google Sheets**, and **stops** when `places` is empty.\n\n**Nodes (brief):**\n\n* **Manual Trigger** \u2013 Start.\n* **Set parameters** \u2013 q, gl, hl, num, apiKey, spreadsheetId, sheet names, pageStart/pageLimit.\n* **Code: Make pages** \u2013 Emits `{page: 1..N}`.\n* **Split In Batches** \u2013 Sends one page per run.\n* **HTTP Request** \u2013 POST to `https://google.serper.dev/places` with `{ q, gl, hl, num, page }`.\n* **IF** \u2013 If `places.length > 0`, continue; else end loop.\n* **Code: Map to rows** \u2013 Map each place \u2192 `{ UUID, Name, Address, Website, Rating, Phone(normalized), Opening Hours }`.\n* **Google Sheets: Append row (Resultados)** \u2013 Append rows; then back to **Split In Batches** for next page.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d62bc2a6-ad41-4bd0-bf44-fb704efb47d7",
      "name": "If End Batch",
      "type": "n8n-nodes-base.if",
      "position": [
        -192,
        1424
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "275e97cf-7809-4268-9a4d-3d6fa7886798",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ Array.isArray($json.places) && $json.places.length > 0 }}\n\n",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "91bf3742-845b-404c-ae80-4076e5b638ef",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -992,
        1968
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "ef5e11b3-355f-49c8-809e-37de55f706dc",
      "name": "Convert to JSON Object1",
      "type": "n8n-nodes-base.code",
      "position": [
        -544,
        1984
      ],
      "parameters": {
        "jsCode": "const items = $input.all()[0].json.choices[0].message.content;\nconst cleaned = items.replace('```json', '').replace('```', '')\nconst parsed = JSON.parse(cleaned);\n\nreturn {data: parsed}"
      },
      "typeVersion": 2
    },
    {
      "id": "ede2a523-da1b-4104-a21f-46025fcd3cb1",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        -1312,
        1968
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "781fc345-87ce-4f2a-84f4-059bd802fc17",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.Name }}",
              "rightValue": "Name"
            },
            {
              "id": "bbaeb84c-0c19-42f2-9e06-e826e69833fa",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.Name }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4a819d88-0e33-428e-a921-e3efd637425b",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1984,
        1648
      ],
      "parameters": {
        "color": 3,
        "width": 2668,
        "height": 652,
        "content": "**Workflow: Maps \u2192 Sheet \u2192 Email Verification**\n\n1. **Search & save:** Find places on Google Maps and add them to the sheet.\n2. **Fill details:** Add missing info (email + short description).\n3. **Verify emails:** Every email is checked (format, domain, and inbox when possible). If it can\u2019t be confirmed, we set **\u201cN/A\u201d**.\n4. **Update sheet:** Only **verified** emails are written back.\n\n**Why this matters:** You keep clean, reliable contact data and avoid sending to bad addresses.\n\n**IMPORTANT** Before run that workflow you need a Verificaremails.com account.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f7d88b7d-4c34-454b-81b8-c2f8a6bd0767",
      "name": "Get Contact Details via Perplexity",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -752,
        1984
      ],
      "parameters": {
        "url": "https://api.perplexity.ai/chat/completions",
        "method": "POST",
        "options": {},
        "jsonBody": "= {\n  \"model\": \"sonar\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"You are a research assistant. Retrieve data from a company and return it. If a field does not exist, return \\\"N/A\\\" for that field. Return JSON only, without any other information. Use spanish as outputlanguege.\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"Get the Email and Company Background of {{ $json.Name }} in {{ $json.Address }}, reference website: {{ $json.Website }}\"\n    }\n  ],\n  \"response_format\": {\n    \"type\": \"json_schema\",\n    \"json_schema\": {\n      \"schema\": {\n        \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n        \"title\": \"CompanyDetails\",\n        \"type\": \"object\",\n        \"properties\": {\n          \"Email\": {\n            \"type\": \"string\"\n          },\n          \"Background\": {\n            \"type\": \"string\"\n          }\n      },\n      \"required\": [\n        \"Email\",\n        \"Background\"\n      ]\n    }\n    }\n  }\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "f3dd6c14-9e38-464d-8438-034124be5e6f",
      "name": "Update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        512,
        1984
      ],
      "parameters": {
        "columns": {
          "value": {
            "UUID": "={{ $('Google Sheets Trigger').item.json.UUID }}",
            "Email": "={{ $('Convert to JSON Object1').item.json.data.Email }}",
            "Summary": "={{ $('Convert to JSON Object1').item.json.data.Background }}",
            "Valid Email": "={{ $json.apiResponse.result.status }}"
          },
          "schema": [
            {
              "id": "UUID",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "UUID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Address",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Rating",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Rating",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Valid Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Valid Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Valid Phone",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Valid Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "UUID"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 958337799,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E/edit#gid=958337799",
          "cachedResultName": "Resultados"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E/edit?usp=drivesdk",
          "cachedResultName": "Google_Maps_Leads"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "87a8e074-faed-4ec7-9650-42b610e2e11b",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -272,
        1984
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "cd1148ba-bbcb-4f5c-ba26-0f3138760cec",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.data.Email }}",
              "rightValue": "N/A"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4811c3db-b958-43eb-9700-5a134e5f8e6b",
      "name": "VerificarEmails",
      "type": "@verificaremails/n8n-nodes-verificaremails.verificaremails",
      "position": [
        16,
        2048
      ],
      "parameters": {
        "email": "={{ $json.data.Email }}"
      },
      "credentials": {
        "verificaremailsApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e69b897c-c75e-4254-957e-946c3038735a",
      "name": "Google Sheets Trigger",
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "position": [
        -1680,
        1968
      ],
      "parameters": {
        "event": "rowAdded",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 958337799,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E/edit#gid=958337799",
          "cachedResultName": "Resultados"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NfDypwQx-NkaFwemG-WaL7qFfa0lwSC9I4ijByex41E/edit?usp=drivesdk",
          "cachedResultName": "Google_Maps_Leads"
        }
      },
      "credentials": {
        "googleSheetsTriggerOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "50ac0811-d697-4722-8025-d6fe982adab8",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Update row in sheet",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "VerificarEmails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "If End Batch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If End Batch": {
      "main": [
        [
          {
            "node": "JavaScript1 - Places Objects",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Set parameters": {
      "main": [
        [
          {
            "node": "JavaScript - Page Management",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Get Contact Details via Perplexity",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "VerificarEmails": {
      "main": [
        [
          {
            "node": "Update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split In Batches": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Update row in sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets Trigger": {
      "main": [
        [
          {
            "node": "Filter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to JSON Object1": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JavaScript - Page Management": {
      "main": [
        [
          {
            "node": "Split In Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "JavaScript1 - Places Objects": {
      "main": [
        [
          {
            "node": "Append row in sheet (Resultados)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append row in sheet (Resultados)": {
      "main": [
        [
          {
            "node": "Split In Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Contact Details via Perplexity": {
      "main": [
        [
          {
            "node": "Convert to JSON Object1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Set parameters",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This template finds businesses on Google Maps → writes to Google Sheets → enriches + verifies email contact so your outreach stays clean and deliverable. It includes Sticky Notes** to explain the flow and setup. Search & save: Fetch places and append rows (Name, Address,…

Source: https://n8n.io/workflows/8904/ — original creator credit. Request a take-down →

More Marketing & Ads workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Marketing & Ads

Description:

Google Sheets Trigger, Google Sheets, HTTP Request
Marketing & Ads

Description:

Google Sheets Trigger, Google Sheets, HTTP Request
Marketing & Ads

This automated n8n workflow qualifies B2B leads via voice calls using the VAPI API and integrates the collected data into Google Sheets. It triggers when a new lead’s phone number is added, streamlini

Google Sheets Trigger, HTTP Request, Google Sheets
Marketing & Ads

Transform your lead generation process with this powerful n8n workflow that automatically captures form submissions from Google Forms and creates organized lead cards in Trello.

Google Sheets Trigger, Trello, HTTP Request
Marketing & Ads

This workflow scrapes Google Maps business listings (e.g., carpenters in Tarragona) to extract websites and email addresses — perfect for lead generation, local business prospecting, or agency outreac

HTTP Request, Google Sheets