This workflow corresponds to n8n.io template #7906 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request 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 →
{
"id": "y8Q9qf0kUTM7rFX3",
"meta": {
"templateId": "2063"
},
"name": "Google Maps Scraper & generic email search",
"tags": [],
"nodes": [
{
"id": "edef59f6-0197-408e-a819-141c1ca8dedd",
"name": "When clicking \"Execute Workflow\"",
"type": "n8n-nodes-base.manualTrigger",
"position": [
864,
592
],
"parameters": {},
"typeVersion": 1
},
{
"id": "d56deaf5-1ad8-45a2-bbf0-3b71560f8036",
"name": "Extract next start value",
"type": "n8n-nodes-base.code",
"position": [
1792,
352
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let nextUrl\n\nif ($json && $json[\"serpapi_pagination\"] && $json[\"serpapi_pagination\"][\"next\"]) {\n nextUrl = $json[\"serpapi_pagination\"][\"next\"];\n\n$input.item.json.start = nextUrl.split('&').find(param => param.startsWith('start=')).split('=')[1];\n}\n\n\nreturn $input.item;"
},
"typeVersion": 2
},
{
"id": "6562c236-c957-437b-91a9-15e98af09858",
"name": "Merge all values from SERPAPI",
"type": "n8n-nodes-base.code",
"position": [
2224,
528
],
"parameters": {
"jsCode": "const allData = []\n\nlet counter = 0;\ndo {\n try {\n const items = $items(\"SERPAPI - Scrape Google Maps URL\", 0, counter).map(item => item.json.local_results);\n allData.push.apply(allData, items);\n } catch (error) {\n return [{json: {allData}}]; \n }\n\n counter++;\n} while(true);\nreturn $input.all();"
},
"typeVersion": 2
},
{
"id": "357e8a57-dbb5-4241-b9c2-863b3ae3fd96",
"name": "Transform data in the right format",
"type": "n8n-nodes-base.code",
"position": [
2880,
528
],
"parameters": {
"jsCode": "console.log($input.all())\n\n\nconst data = $input.all()\n\nconsole.log(\"error\",data)\n\nfunction mergeData(data) {\n let merged = [];\n data.forEach(entry => {\n for (const key in entry.json) {\n merged.push(entry.json[key]);\n }\n });\n return merged;\n}\n\nconst mergedData = mergeData(data);\nconsole.log(mergedData);\n\n\nreturn mergedData.filter(item => item !== null);"
},
"typeVersion": 2
},
{
"id": "4e8e9ae9-f5e3-4bfd-b0d4-9403a1c38d39",
"name": "Add rows in Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
4288,
512
],
"parameters": {
"columns": {
"value": {
"type": "={{ $json.type }}",
"email": "={{ $json.email }}",
"hours": "={{ $json.hours }}",
"phone": "={{ $json.phone }}",
"title": "={{ $json.title }}",
"types": "={{ $json.types }}",
"rating": "={{ $json.rating }}",
"address": "={{ $json.address }}",
"data_id": "={{ $json.data_id }}",
"reviews": "={{ $json.reviews }}",
"website": "={{ $json.website }}",
"data_cid": "={{ $json.data_cid }}",
"place_id": "={{ $json.place_id }}",
"position": "={{ $json.position }}",
"amenities": "={{ $json.extensions[2].amenities }}",
"thumbnail": "={{ $json.thumbnail }}",
"confidence": "={{ $json.confidence }}",
"open_state": "={{ $json.open_state }}",
"photos_link": "={{ $json.photos_link }}",
"provider_id": "={{ $json.provider_id }}",
"reviews_link": "={{ $json.reviews_link }}",
"gps_coordinates": "={{ $json.gps_coordinates }}",
"operating_hours": "={{ $json.operating_hours }}",
"place_id_search": "={{ $json.place_id_search }}"
},
"schema": [
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "phone",
"type": "string",
"display": true,
"required": false,
"displayName": "phone",
"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": "reviews",
"type": "string",
"display": true,
"required": false,
"displayName": "reviews",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "type",
"type": "string",
"display": true,
"required": false,
"displayName": "type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "address",
"type": "string",
"display": true,
"required": false,
"displayName": "address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "price",
"type": "string",
"display": true,
"required": false,
"displayName": "price",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "place_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "place_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "position",
"type": "string",
"display": true,
"required": false,
"displayName": "position",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "data_id",
"type": "string",
"display": true,
"required": false,
"displayName": "data_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "data_cid",
"type": "string",
"display": true,
"required": false,
"displayName": "data_cid",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reviews_link",
"type": "string",
"display": true,
"required": false,
"displayName": "reviews_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "photos_link",
"type": "string",
"display": true,
"required": false,
"displayName": "photos_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gps_coordinates",
"type": "string",
"display": true,
"required": false,
"displayName": "gps_coordinates",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "place_id_search",
"type": "string",
"display": true,
"required": false,
"displayName": "place_id_search",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "provider_id",
"type": "string",
"display": true,
"required": false,
"displayName": "provider_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "types",
"type": "string",
"display": true,
"required": false,
"displayName": "types",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "open_state",
"type": "string",
"display": true,
"required": false,
"displayName": "open_state",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hours",
"type": "string",
"display": true,
"required": false,
"displayName": "hours",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "operating_hours",
"type": "string",
"display": true,
"required": false,
"displayName": "operating_hours",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "service_options",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "service_options",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "order_online",
"type": "string",
"display": true,
"required": false,
"displayName": "order_online",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "thumbnail",
"type": "string",
"display": true,
"required": false,
"displayName": "thumbnail",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "editorial_reviews",
"type": "string",
"display": true,
"required": false,
"displayName": "editorial_reviews",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "unclaimed_listing",
"type": "string",
"display": true,
"required": false,
"displayName": "unclaimed_listing",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reserve_a_table",
"type": "string",
"display": true,
"required": false,
"displayName": "reserve_a_table",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "user_review",
"type": "string",
"display": true,
"required": false,
"displayName": "user_review",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "amenities",
"type": "string",
"display": true,
"required": false,
"displayName": "amenities",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "book_online",
"type": "string",
"display": true,
"required": false,
"displayName": "book_online",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "type_id",
"type": "string",
"display": true,
"required": false,
"displayName": "type_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "type_ids",
"type": "string",
"display": true,
"required": false,
"displayName": "type_ids",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email",
"type": "string",
"display": true,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "confidence",
"type": "string",
"display": true,
"required": false,
"displayName": "confidence",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"place_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1794997208,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit#gid=1794997208",
"cachedResultName": "Emails"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit?gid=2023033319#gid=2023033319"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "90194aa3-5960-47bd-9e0e-efee827004c4",
"name": "SERPAPI - Scrape Google Maps URL",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
1568,
544
],
"parameters": {
"url": "https://serpapi.com/search.json",
"options": {},
"sendQuery": true,
"authentication": "predefinedCredentialType",
"queryParameters": {
"parameters": [
{
"name": "engine",
"value": "google_maps"
},
{
"name": "q",
"value": "={{$json?.search_parameters?.q || $json.keyword }} "
},
{
"name": "ll",
"value": "={{ $json?.search_parameters?.ll|| $json.geo }}"
},
{
"name": "type",
"value": "search"
},
{
"name": "start",
"value": "={{ $json.start|| 0 }}"
}
]
},
"nodeCredentialType": "serpApi"
},
"credentials": {
"serpApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.1
},
{
"id": "9cfd1e76-2d7c-4618-86d6-e1f3c7729044",
"name": "Remove duplicate items",
"type": "n8n-nodes-base.itemLists",
"position": [
3088,
528
],
"parameters": {
"compare": "selectedFields",
"options": {},
"operation": "removeDuplicates",
"fieldsToCompare": "place_id"
},
"typeVersion": 3.1
},
{
"id": "e47dfa17-fc84-4694-950d-165302a9075f",
"name": "Split out items",
"type": "n8n-nodes-base.itemLists",
"position": [
2448,
528
],
"parameters": {
"options": {},
"fieldToSplitOut": "allData"
},
"typeVersion": 3.1
},
{
"id": "decc89ee-f836-4ec2-9a1a-0371a8889ef5",
"name": "Remove empty values",
"type": "n8n-nodes-base.filter",
"position": [
2672,
528
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json[0] }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "bd7ca3a5-2697-4653-abf6-372088d925e6",
"name": "Google Sheets - Get searches to scrap",
"type": "n8n-nodes-base.googleSheets",
"position": [
1120,
544
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit#gid=0",
"cachedResultName": "Add your search url here"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit?gid=0#gid=0"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "6d0be482-b1ad-4fa0-8d2e-bef9a4414924",
"name": "Extract keyword and location from URL",
"type": "n8n-nodes-base.set",
"position": [
1344,
544
],
"parameters": {
"fields": {
"values": [
{
"name": "keyword",
"stringValue": "={{ $json.URL.match(/\\/search\\/(.*?)\\//)[1] }}"
},
{
"name": "geo",
"stringValue": "={{ $json.URL.match(/(@[^\\/?]+)/)[1]}}"
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "f6fb8db2-8444-4605-af9d-22ca71c7937d",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
176
],
"parameters": {
"width": 312.2965981499806,
"height": 266.8807730722022,
"content": "## Adjust frequency to your own needs"
},
"typeVersion": 1
},
{
"id": "ea2e9b89-e52c-4e25-803a-ce33c41c20fc",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1072,
208
],
"parameters": {
"height": 511.2196121145973,
"content": "## Copy my template and connect it to n8n\n\nTemplate link: \n https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit?gid=0#gid=0\n"
},
"typeVersion": 1
},
{
"id": "de515d8d-641d-4b91-9472-608ad3878e32",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1488,
192
],
"parameters": {
"height": 535.9388810024284,
"content": "## Add your SERPAPI API Key\n\nStart a free trial at serpapi.com and get your API key in \"Your account\" section"
},
"typeVersion": 1
},
{
"id": "f413f4ef-fd6d-4967-8df7-a4fee4361246",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
448
],
"parameters": {
"width": 312.2965981499806,
"height": 310.4703136043695,
"content": "## Click on Execute Workflow to run the workflow manually"
},
"typeVersion": 1
},
{
"id": "cbc53e43-f141-434c-a655-feb1f7d3c65b",
"name": "Continue IF Loop is complete",
"type": "n8n-nodes-base.if",
"position": [
2000,
528
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.search_parameters.start }}",
"operation": "isNotEmpty"
}
],
"string": [
{
"value1": "={{ $json.serpapi_pagination.next }}",
"operation": "isNotEmpty"
}
]
}
},
"typeVersion": 1
},
{
"id": "229f9652-b703-490e-aa3c-c28b0fe1f2e8",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
208,
240
],
"parameters": {
"width": 357.33341618921213,
"height": 532.3420004517685,
"content": "## Read Me\n\nThis workflow allows to scrape Google Maps data in an efficient way using SerpAPI. \n\nYou'll get all data from Gmaps at a cheaper cost than Google Maps API.\n\nAdd as input, your Google Maps search URL and you'll get a list of places with many data points such as:\n- phone number\n- website\n- rating\n- reviews\n- address\n\nAnd much more.\n\nFurthermore for contacts with a website you will get email adress with EmailListVerify API\n\n\n**Full guide to implement the workflow is here**: \n\nhttps://lempire.notion.site/Scrape-Google-Maps-places-with-n8n-b7f1785c3d474e858b7ee61ad4c21136?pvs=4"
},
"typeVersion": 1
},
{
"id": "83c6ad87-9db7-404f-b040-66a3d0c6cff7",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
4000,
144
],
"parameters": {
"height": 535.9388810024284,
"content": "## Add your ELV API Key\n\nStart a free trial at EmailListVerify.com and get your API key."
},
"typeVersion": 1
},
{
"id": "07d9546e-39da-47e9-b550-142d2d8c3054",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
3584,
-32
],
"parameters": {
"color": 3,
"width": 856,
"height": 780,
"content": "## Find email address\nFind generic email address with EmailListVerify API if the website is known\n"
},
"typeVersion": 1
},
{
"id": "234b5d18-75d7-495b-960f-06192d9e7c61",
"name": "Run workflow once a week",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
848,
288
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "2d0afc14-bb0b-4558-8c7b-bfd84960d910",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1456,
-32
],
"parameters": {
"color": 3,
"width": 1992,
"height": 780,
"content": "Scrap Google Map\n"
},
"typeVersion": 1
},
{
"id": "90ba6693-d95b-436e-9797-533890df37c7",
"name": "Save google map data to googlesheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
3328,
528
],
"parameters": {
"columns": {
"value": {
"type": "={{ $json.type }}",
"email": "={{ $json.email }}",
"hours": "={{ $json.hours }}",
"phone": "={{ $json.phone }}",
"title": "={{ $json.title }}",
"types": "={{ $json.types }}",
"rating": "={{ $json.rating }}",
"address": "={{ $json.address }}",
"data_id": "={{ $json.data_id }}",
"reviews": "={{ $json.reviews }}",
"website": "={{ $json.website }}",
"data_cid": "={{ $json.data_cid }}",
"place_id": "={{ $json.place_id }}",
"position": "={{ $json.position }}",
"amenities": "={{ $json.extensions[2].amenities }}",
"thumbnail": "={{ $json.thumbnail }}",
"confidence": "={{ $json.confidence }}",
"open_state": "={{ $json.open_state }}",
"photos_link": "={{ $json.photos_link }}",
"provider_id": "={{ $json.provider_id }}",
"reviews_link": "={{ $json.reviews_link }}",
"gps_coordinates": "={{ $json.gps_coordinates }}",
"operating_hours": "={{ $json.operating_hours }}",
"place_id_search": "={{ $json.place_id_search }}"
},
"schema": [
{
"id": "title",
"type": "string",
"display": true,
"required": false,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "phone",
"type": "string",
"display": true,
"required": false,
"displayName": "phone",
"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": "reviews",
"type": "string",
"display": true,
"required": false,
"displayName": "reviews",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "type",
"type": "string",
"display": true,
"required": false,
"displayName": "type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "address",
"type": "string",
"display": true,
"required": false,
"displayName": "address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "price",
"type": "string",
"display": true,
"required": false,
"displayName": "price",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "place_id",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "place_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "position",
"type": "string",
"display": true,
"required": false,
"displayName": "position",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "data_id",
"type": "string",
"display": true,
"required": false,
"displayName": "data_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "data_cid",
"type": "string",
"display": true,
"required": false,
"displayName": "data_cid",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reviews_link",
"type": "string",
"display": true,
"required": false,
"displayName": "reviews_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "photos_link",
"type": "string",
"display": true,
"required": false,
"displayName": "photos_link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "gps_coordinates",
"type": "string",
"display": true,
"required": false,
"displayName": "gps_coordinates",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "place_id_search",
"type": "string",
"display": true,
"required": false,
"displayName": "place_id_search",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "provider_id",
"type": "string",
"display": true,
"required": false,
"displayName": "provider_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "types",
"type": "string",
"display": true,
"required": false,
"displayName": "types",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "open_state",
"type": "string",
"display": true,
"required": false,
"displayName": "open_state",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hours",
"type": "string",
"display": true,
"required": false,
"displayName": "hours",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "operating_hours",
"type": "string",
"display": true,
"required": false,
"displayName": "operating_hours",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "description",
"type": "string",
"display": true,
"required": false,
"displayName": "description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "service_options",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "service_options",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "order_online",
"type": "string",
"display": true,
"required": false,
"displayName": "order_online",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "thumbnail",
"type": "string",
"display": true,
"required": false,
"displayName": "thumbnail",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "editorial_reviews",
"type": "string",
"display": true,
"required": false,
"displayName": "editorial_reviews",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "unclaimed_listing",
"type": "string",
"display": true,
"required": false,
"displayName": "unclaimed_listing",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reserve_a_table",
"type": "string",
"display": true,
"required": false,
"displayName": "reserve_a_table",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "user_review",
"type": "string",
"display": true,
"required": false,
"displayName": "user_review",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "amenities",
"type": "string",
"display": true,
"required": false,
"displayName": "amenities",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "book_online",
"type": "string",
"display": true,
"required": false,
"displayName": "book_online",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "type_id",
"type": "string",
"display": true,
"required": false,
"displayName": "type_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "type_ids",
"type": "string",
"display": true,
"required": false,
"displayName": "type_ids",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email",
"type": "string",
"display": true,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "confidence",
"type": "string",
"display": true,
"required": false,
"displayName": "confidence",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "extensions",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "extensions",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "unsupported_extensions",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "unsupported_extensions",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "serpapi_thumbnail",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "serpapi_thumbnail",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"place_id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2023033319,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit#gid=2023033319",
"cachedResultName": "Results"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1d5m3tmmqM1TPL0fnrrbhaPdoXVs4EIrniDI-nv01UKg/edit?gid=2023033319#gid=2023033319"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "663f26ca-de69-420b-88e9-b79ffabbd6b4",
"name": "Check if the listing has a website",
"type": "n8n-nodes-base.if",
"position": [
3632,
512
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "09a3895d-397b-4b0b-8f84-7aa54d5ae8fe",
"operator": {
"type": "string",
"operation": "notStartsWith"
},
"leftValue": "={{ $json.website }}",
"rightValue": "[undefined]"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "257df17f-c8b1-45f3-a502-26a7b2ccd5a8",
"name": "Transform website into domain name",
"type": "n8n-nodes-base.code",
"position": [
3856,
432
],
"parameters": {
"jsCode": "console.log($input.all())\n\n\nconst data = $input.all()\n\nconsole.log(\"start filter\")\nconsole.log(data)\n\nlet merged = []\nfor (let line of data){\n console.log(line)\n try{\n let lineObject = line[\"json\"] \n let url = lineObject[\"website\"];\n\n let domainStart = url.indexOf(\"/\");\n let domainEnd = url.indexOf(\"/\" ,domainStart + 2 );\n let domain = url.slice(domainStart + 2, domainEnd);\n\n if(domain.slice(0,4)==\"www.\"){\n domain = domain.slice(4,domain.length)\n }\n \n console.log(domain)\n lineObject[\"domain\"] = domain;\n merged.push(lineObject);\n } catch (e) {\n console.log(\"error\")\n console.log(e)\n }\n \n}\n\n\n\nconsole.log(merged);\n\n\nreturn merged;"
},
"typeVersion": 2
},
{
"id": "81386591-6f4d-4ad4-b32b-0930f62cadd9",
"name": "Use EmailListVerify API to find generic emails",
"type": "n8n-nodes-base.httpRequest",
"position": [
4064,
432
],
"parameters": {
"url": "https://api.emaillistverify.com/api/findContact",
"method": "POST",
"options": {},
"jsonBody": "={\n \"domain\": \"{{ $json.domain }}\"\n} ",
"sendBody": true,
"specifyBody": "json",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
}
],
"active": false,
"settings": {},
"versionId": "7919221b-feb8-4077-a344-e91263ecdd37",
"connections": {
"Split out items": {
"main": [
[
{
"node": "Remove empty values",
"type": "main",
"index": 0
}
]
]
},
"Remove empty values": {
"main": [
[
{
"node": "Transform data in the right format",
"type": "main",
"index": 0
}
]
]
},
"Remove duplicate items": {
"main": [
[
{
"node": "Save google map data to googlesheet",
"type": "main",
"index": 0
}
]
]
},
"Extract next start value": {
"main": [
[
{
"node": "Continue IF Loop is complete",
"type": "main",
"index": 0
}
]
]
},
"Run workflow once a week": {
"main": [
[
{
"node": "Google Sheets - Get searches to scrap",
"type": "main",
"index": 0
}
]
]
},
"Add rows in Google Sheets": {
"main": [
[]
]
},
"Continue IF Loop is complete": {
"main": [
[
{
"node": "SERPAPI - Scrape Google Maps URL",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge all values from SERPAPI",
"type": "main",
"index": 0
}
]
]
},
"Merge all values from SERPAPI": {
"main": [
[
{
"node": "Split out items",
"type": "main",
"index": 0
}
]
]
},
"SERPAPI - Scrape Google Maps URL": {
"main": [
[
{
"node": "Extract next start value",
"type": "main",
"index": 0
}
],
[]
]
},
"When clicking \"Execute Workflow\"": {
"main": [
[
{
"node": "Google Sheets - Get searches to scrap",
"type": "main",
"index": 0
}
]
]
},
"Check if the listing has a website": {
"main": [
[
{
"node": "Transform website into domain name",
"type": "main",
"index": 0
}
],
[]
]
},
"Transform data in the right format": {
"main": [
[
{
"node": "Remove duplicate items",
"type": "main",
"index": 0
}
]
]
},
"Transform website into domain name": {
"main": [
[
{
"node": "Use EmailListVerify API to find generic emails",
"type": "main",
"index": 0
}
]
]
},
"Save google map data to googlesheet": {
"main": [
[
{
"node": "Check if the listing has a website",
"type": "main",
"index": 0
}
]
]
},
"Extract keyword and location from URL": {
"main": [
[
{
"node": "SERPAPI - Scrape Google Maps URL",
"type": "main",
"index": 0
}
]
]
},
"Google Sheets - Get searches to scrap": {
"main": [
[
{
"node": "Extract keyword and location from URL",
"type": "main",
"index": 0
}
]
]
},
"Use EmailListVerify API to find generic emails": {
"main": [
[
{
"node": "Add rows in Google Sheets",
"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.
googleSheetsOAuth2ApihttpHeaderAuthserpApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow allows to : scrape Google Maps data using SerpAPI discovery generic email addresses like contact@ using EmailListVerify API
Source: https://n8n.io/workflows/7906/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow ingests proof-of-delivery and completion documents from Gmail or a webhook, extracts key fields with an OpenRouter vision model, reconciles them against Google Sheets dispatch data, arch
Splitout Code. Uses manualTrigger, httpRequest, stickyNote, splitOut. Event-driven trigger; 46 nodes.
Automate CSV imports into HubSpot without the mess. Powered by n8n. Supercharged by Pollup AI.
AICARE Email Blast System. Uses googleDrive, httpRequest, googleSheets, gmail. Event-driven trigger; 39 nodes.
Tiktok to video copy (paylaşılacak). Uses httpRequest, googleDrive, googleSheets, gmail. Event-driven trigger; 39 nodes.