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.
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.
Get notified if the actual data release is positive or negative for the relevant currency. Use the Telegram chat message about the news release as a trigger to open a trading position in MetaTrader 4.
Automatically processes new orders added to Google Sheets. Small orders are approved instantly; large orders trigger an HTML email with one-click Approve / Reject links — each handled by an independen
Submit any YouTube, Vimeo, or Zoom webinar URL using a simple form and the workflow handles everything from there. It runs a two-phase pipeline: first identifying the top viral moments in your video w