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 →
{
"name": "Google Maps Scraper No API",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
140,
0
],
"id": "4a6f9faa-5b11-41fe-88c9-cc8a262a2de2",
"name": "When clicking \u2018Test workflow\u2019"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.removeDuplicates",
"typeVersion": 2,
"position": [
940,
0
],
"id": "47d741e7-a53f-40c7-bf7c-09a446b0d229",
"name": "Remove Duplicates"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.splitInBatches",
"typeVersion": 3,
"position": [
1340,
0
],
"id": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
"name": "Loop Over Items"
},
{
"parameters": {
"amount": 1
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1700,
100
],
"id": "3c3a3870-034d-4147-936a-4b0f19b7727d",
"name": "Wait"
},
{
"parameters": {
"maxItems": 10
},
"type": "n8n-nodes-base.limit",
"typeVersion": 1,
"position": [
1120,
0
],
"id": "a377879d-517d-4c90-a3d4-a7a0c190787e",
"name": "Limit"
},
{
"parameters": {},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
1520,
-60
],
"id": "5f4ae91a-29c7-4fb3-b535-34bc5194b183",
"name": "Wait1"
},
{
"parameters": {
"fieldToSplitOut": "emails",
"options": {}
},
"type": "n8n-nodes-base.splitOut",
"typeVersion": 1,
"position": [
1880,
-60
],
"id": "645bf31c-4b3c-4f4c-b90b-610fc2d6007c",
"name": "Split Out"
},
{
"parameters": {
"jsCode": "const input = $input.first().json.data\nconst regex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.(?!jpeg|jpg|png|gif|webp|svg)[a-zA-Z]{2,}/g\nconst emails = input.match(regex)\nreturn {json: {emails:emails}}"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
1880,
100
],
"id": "7e9c227c-2321-429a-a3f3-4c3a77bc6cf3",
"name": "Extract Emails",
"alwaysOutputData": true,
"onError": "continueRegularOutput"
},
{
"parameters": {
"jsCode": "const input = $input.first().json.data\nconst regex = /https?:\\/\\/[^\\/\\s\"'>]+/g\nconst websites = input.match(regex)\nreturn websites.map(website => ({json:{website}}))"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
540,
0
],
"id": "fb76c70c-385d-4e7f-93cd-43023690076a",
"name": "Extract URLs"
},
{
"parameters": {
"url": "https://www.google.com/maps/search/calgary+dentists",
"options": {
"allowUnauthorizedCerts": true,
"response": {
"response": {
"fullResponse": true
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
340,
0
],
"id": "b10c0ed6-5a94-4272-b65c-bd19bd674fa0",
"name": "Scrape Google Maps"
},
{
"parameters": {
"url": "={{ $json.website }}",
"options": {
"redirect": {
"redirect": {
"followRedirects": false
}
}
}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [
1520,
100
],
"id": "58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb",
"name": "Scrape Site",
"onError": "continueRegularOutput"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "a6786c58-424a-409a-b87f-8a7592cb7944",
"leftValue": "={{ $json.emails }}",
"rightValue": "",
"operator": {
"type": "array",
"operation": "exists",
"singleValue": true
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
1700,
-60
],
"id": "4618e775-d14d-4355-b3a2-cd6a6bbc70e8",
"name": "Filter Out Empties"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "strict",
"version": 2
},
"conditions": [
{
"id": "bf0a5053-9660-457c-9581-964793bb6d7d",
"leftValue": "={{ $json.website }}",
"rightValue": "schema",
"operator": {
"type": "string",
"operation": "notContains"
}
},
{
"id": "9110b9e0-12aa-45cc-bde0-9eda8c10970e",
"leftValue": "={{ $json.website }}",
"rightValue": "google",
"operator": {
"type": "string",
"operation": "notContains"
}
},
{
"id": "fb9b6ed6-96a5-4560-ab10-b8a4b9a61a2b",
"leftValue": "={{ $json.website }}",
"rightValue": "gg",
"operator": {
"type": "string",
"operation": "notContains"
}
},
{
"id": "10500c0b-cdbd-4816-aba3-df60d69845dc",
"leftValue": "={{ $json.website }}",
"rightValue": "gstatic",
"operator": {
"type": "string",
"operation": "notContains"
}
}
],
"combinator": "and"
},
"options": {}
},
"type": "n8n-nodes-base.filter",
"typeVersion": 2.2,
"position": [
740,
0
],
"id": "74513e7e-a7dc-4b19-b23e-01efd82c9d6d",
"name": "Filter Google URLs"
},
{
"parameters": {
"options": {}
},
"type": "n8n-nodes-base.removeDuplicates",
"typeVersion": 2,
"position": [
2080,
-60
],
"id": "035fbbe8-7758-4c7b-be8e-c1cba8fc48bc",
"name": "Remove Duplicates (2)"
},
{
"parameters": {
"operation": "append",
"documentId": {
"__rl": true,
"value": "1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68",
"mode": "list",
"cachedResultName": "Scrape WITHOUT Paying for APIs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68/edit?usp=drivesdk"
},
"sheetName": {
"__rl": true,
"value": "gid=0",
"mode": "list",
"cachedResultName": "emails",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68/edit#gid=0"
},
"columns": {
"mappingMode": "defineBelow",
"value": {
"emails": "={{ $json.emails }}"
},
"matchingColumns": [
"emails"
],
"schema": [
{
"id": "emails",
"displayName": "emails",
"required": false,
"defaultMatch": false,
"display": true,
"type": "string",
"canBeUsedToMatch": true,
"removed": false
}
]
},
"options": {
"useAppend": true
}
},
"type": "n8n-nodes-base.googleSheets",
"typeVersion": 4.5,
"position": [
2280,
-60
],
"id": "aa3e9285-235d-4fda-ab0e-45134cf825dd",
"name": "Add to Sheet (or whatever you want!)",
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
}
}
],
"connections": {
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Scrape Google Maps",
"type": "main",
"index": 0
}
]
]
},
"Remove Duplicates": {
"main": [
[
{
"node": "Limit",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Wait1",
"type": "main",
"index": 0
}
],
[
{
"node": "Scrape Site",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Extract Emails",
"type": "main",
"index": 0
}
]
]
},
"Limit": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Wait1": {
"main": [
[
{
"node": "Filter Out Empties",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "Remove Duplicates (2)",
"type": "main",
"index": 0
}
]
]
},
"Extract Emails": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Extract URLs": {
"main": [
[
{
"node": "Filter Google URLs",
"type": "main",
"index": 0
}
]
]
},
"Scrape Google Maps": {
"main": [
[
{
"node": "Extract URLs",
"type": "main",
"index": 0
}
]
]
},
"Scrape Site": {
"main": [
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Filter Out Empties": {
"main": [
[
{
"node": "Split Out",
"type": "main",
"index": 0
}
]
]
},
"Filter Google URLs": {
"main": [
[
{
"node": "Remove Duplicates",
"type": "main",
"index": 0
}
]
]
},
"Remove Duplicates (2)": {
"main": [
[
{
"node": "Add to Sheet (or whatever you want!)",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "9e487a0d-a606-4859-a6e2-b70372b61388",
"id": "xiabGWCXUOe469Nm",
"tags": [
{
"createdAt": "2025-01-23T18:12:52.273Z",
"updatedAt": "2025-01-23T18:12:52.273Z",
"id": "l8MPK4ZirgwFWMno",
"name": "N8N Course"
}
]
}
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.
googleSheetsOAuth2Api
About this workflow
Google Maps Scraper No API. Uses manualTrigger, removeDuplicates, splitInBatches, limit. Event-driven trigger; 15 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →