Collecteur d'e-mails Google Maps avec requêtes HTTP et JavaScript
Ceci est unLead Generationworkflow d'automatisation du domainecontenant 19 nœuds.Utilise principalement des nœuds comme Code, Wait, Limit, Filter, SplitOut. Système de génération de prospects : de Google Maps vers un collecteur d'e-mails, exportation vers Google Sheets
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
Nœuds utilisés (19)
Catégorie
{
"id": "xiabGWCXUOe469Nm",
"meta": {
"instanceId": "d7661a849ead114a9aa6d9ceaf4160465aeb79532a35bde62160c840ffba9fc8"
},
"name": "Google Maps Email Scraper with HTTP Requests & JavaScript",
"tags": [
{
"id": "l8MPK4ZirgwFWMno",
"name": "N8N Course",
"createdAt": "2025-01-23T18:12:52.273Z",
"updatedAt": "2025-01-23T18:12:52.273Z"
}
],
"nodes": [
{
"id": "sticky-note-1",
"type": "n8n-nodes-base.stickyNote",
"position": [
100,
-280
],
"parameters": {
"width": 350,
"height": 180,
"content": "## 🗺️ STEP 1: Google Maps Data Extraction\n\nThis workflow starts by scraping Google Maps for business listings:\n\n**Process:** Uses HTTP requests to search Google Maps with queries like \"Calgary dentists\"\n**Output:** Raw HTML containing business listings and website URLs\n**Key:** No APIs required - direct HTML scraping\n\n**Note:** Replace search URL with your target location and business type"
},
"typeVersion": 1,
"name": "Lors du clic sur 'Tester le workflow'"
},
{
"id": "sticky-note-2",
"type": "n8n-nodes-base.stickyNote",
"position": [
300,
-320
],
"parameters": {
"width": 380,
"height": 200,
"content": "## 🔗 STEP 2: Website URL Processing\n\nExtracts and cleans business website URLs:\n\n1. **Extract URLs:** JavaScript regex finds all website URLs in Google Maps data\n2. **Filter Google URLs:** Removes irrelevant domains (google.com, gstatic, etc.)\n3. **Remove Duplicates:** Eliminates duplicate websites\n4. **Limit:** Controls batch size for testing (adjust for production)\n\n**Result:** Clean list of actual business websites ready for email extraction"
},
"typeVersion": 1,
"name": "Supprimer les doublons"
},
{
"id": "sticky-note-3",
"type": "n8n-nodes-base.stickyNote",
"position": [
700,
-320
],
"parameters": {
"width": 380,
"height": 200,
"content": "## 🔄 STEP 3: Smart Website Scraping\n\nProcesses each website individually to prevent IP blocking:\n\n**Loop Over Items:** Processes websites one by one with built-in delays\n**Scrape Site:** Downloads HTML content from each business website\n**Wait Nodes:** Prevent rate limiting and IP blocking\n**Error Handling:** Continues processing even if some sites fail\n\n**Critical:** The batching and delays are essential for reliable operation at scale"
},
"typeVersion": 1,
"name": "Boucler sur les éléments"
},
{
"id": "sticky-note-4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1100,
-340
],
"parameters": {
"width": 400,
"height": 220,
"content": "## 📧 STEP 4: Email Extraction & Export\n\nFinal processing pipeline:\n\n1. **Extract Emails:** JavaScript regex finds all email addresses in website HTML\n2. **Filter Out Empties:** Removes websites with no emails found\n3. **Split Out:** Converts email arrays into individual items\n4. **Remove Duplicates:** Final deduplication across all sources\n5. **Add to Sheet:** Exports clean email list to Google Sheets\n\n**Result:** Organized database of business emails ready for outreach"
},
"typeVersion": 1,
"name": "Attendre"
},
{
"id": "4a6f9faa-5b11-41fe-88c9-cc8a262a2de2",
"name": "Limite",
"type": "n8n-nodes-base.manualTrigger",
"position": [
140,
0
],
"parameters": {},
"typeVersion": 1
},
{
"id": "47d741e7-a53f-40c7-bf7c-09a446b0d229",
"name": "Attendre1",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
940,
0
],
"parameters": {
"options": {}
},
"typeVersion": 2
},
{
"id": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
"name": "Diviser",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1340,
0
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "3c3a3870-034d-4147-936a-4b0f19b7727d",
"name": "Extraire les emails",
"type": "n8n-nodes-base.wait",
"position": [
1700,
100
],
"webhookId": "19cc6ed4-4fe7-485b-b879-c679e4b3374d",
"parameters": {
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "a377879d-517d-4c90-a3d4-a7a0c190787e",
"name": "Extraire les URLs",
"type": "n8n-nodes-base.limit",
"position": [
1120,
0
],
"parameters": {
"maxItems": 10
},
"typeVersion": 1
},
{
"id": "5f4ae91a-29c7-4fb3-b535-34bc5194b183",
"name": "Scraper __PROTECTED_41__ Maps",
"type": "n8n-nodes-base.wait",
"position": [
1520,
-60
],
"webhookId": "0fe34756-6e43-4603-8891-5747a9a6500a",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "645bf31c-4b3c-4f4c-b90b-610fc2d6007c",
"name": "Scraper le site",
"type": "n8n-nodes-base.splitOut",
"position": [
1880,
-60
],
"parameters": {
"options": {},
"fieldToSplitOut": "emails"
},
"typeVersion": 1
},
{
"id": "7e9c227c-2321-429a-a3f3-4c3a77bc6cf3",
"name": "Filtrer les vides",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
1880,
100
],
"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}}"
},
"typeVersion": 2,
"alwaysOutputData": true
},
{
"id": "fb76c70c-385d-4e7f-93cd-43023690076a",
"name": "Filtrer les URLs __PROTECTED_41__",
"type": "n8n-nodes-base.code",
"position": [
540,
0
],
"parameters": {
"jsCode": "const input = $input.first().json.data\nconst regex = /https?:\\/\\/[^\\/\\s\"'>]+/g\nconst websites = input.match(regex)\nreturn websites.map(website => ({json:{website}}))"
},
"typeVersion": 2
},
{
"id": "b10c0ed6-5a94-4272-b65c-bd19bd674fa0",
"name": "Supprimer les doublons (2)",
"type": "n8n-nodes-base.httpRequest",
"position": [
340,
0
],
"parameters": {
"url": "https://www.google.com/maps/search/calgary+dentists",
"options": {
"response": {
"response": {
"fullResponse": true
}
},
"allowUnauthorizedCerts": true
}
},
"typeVersion": 4.2
},
{
"id": "58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb",
"name": "Ajouter à la feuille (ou autre destination !)",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1520,
100
],
"parameters": {
"url": "={{ $json.website }}",
"options": {
"redirect": {
"redirect": {
"followRedirects": false
}
}
}
},
"typeVersion": 4.2
},
{
"id": "4618e775-d14d-4355-b3a2-cd6a6bbc70e8",
"name": "Filter Out Empties",
"type": "n8n-nodes-base.filter",
"position": [
1700,
-60
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a6786c58-424a-409a-b87f-8a7592cb7944",
"operator": {
"type": "array",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.emails }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "74513e7e-a7dc-4b19-b23e-01efd82c9d6d",
"name": "Filter Google URLs",
"type": "n8n-nodes-base.filter",
"position": [
740,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "bf0a5053-9660-457c-9581-964793bb6d7d",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $json.website }}",
"rightValue": "schema"
},
{
"id": "9110b9e0-12aa-45cc-bde0-9eda8c10970e",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $json.website }}",
"rightValue": "google"
},
{
"id": "fb9b6ed6-96a5-4560-ab10-b8a4b9a61a2b",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $json.website }}",
"rightValue": "gg"
},
{
"id": "10500c0b-cdbd-4816-aba3-df60d69845dc",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $json.website }}",
"rightValue": "gstatic"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "035fbbe8-7758-4c7b-be8e-c1cba8fc48bc",
"name": "Remove Duplicates (2)",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
2080,
-60
],
"parameters": {
"options": {}
},
"typeVersion": 2
},
{
"id": "aa3e9285-235d-4fda-ab0e-45134cf825dd",
"name": "Add to Sheet (or whatever you want!)",
"type": "n8n-nodes-base.googleSheets",
"position": [
2280,
-60
],
"parameters": {
"columns": {
"value": {
"emails": "={{ $json.emails }}"
},
"schema": [
{
"id": "emails",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "emails",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"emails"
]
},
"options": {
"useAppend": true
},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68/edit#gid=0",
"cachedResultName": "emails"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1fcijyZM1oU73i2xUbXYJ4j6RshmVEduOkCJji2SJP68/edit?usp=drivesdk",
"cachedResultName": "Scrape WITHOUT Paying for APIs"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "EOibXIc4U8wcXyRR",
"name": "YouTube"
}
},
"typeVersion": 4.5
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "9e487a0d-a606-4859-a6e2-b70372b61388",
"connections": {
"3c3a3870-034d-4147-936a-4b0f19b7727d": {
"main": [
[
{
"node": "7e9c227c-2321-429a-a3f3-4c3a77bc6cf3",
"type": "main",
"index": 0
}
]
]
},
"a377879d-517d-4c90-a3d4-a7a0c190787e": {
"main": [
[
{
"node": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
"type": "main",
"index": 0
}
]
]
},
"5f4ae91a-29c7-4fb3-b535-34bc5194b183": {
"main": [
[
{
"node": "4618e775-d14d-4355-b3a2-cd6a6bbc70e8",
"type": "main",
"index": 0
}
]
]
},
"645bf31c-4b3c-4f4c-b90b-610fc2d6007c": {
"main": [
[
{
"node": "035fbbe8-7758-4c7b-be8e-c1cba8fc48bc",
"type": "main",
"index": 0
}
]
]
},
"58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb": {
"main": [
[
{
"node": "3c3a3870-034d-4147-936a-4b0f19b7727d",
"type": "main",
"index": 0
}
]
]
},
"fb76c70c-385d-4e7f-93cd-43023690076a": {
"main": [
[
{
"node": "74513e7e-a7dc-4b19-b23e-01efd82c9d6d",
"type": "main",
"index": 0
}
]
]
},
"7e9c227c-2321-429a-a3f3-4c3a77bc6cf3": {
"main": [
[
{
"node": "6cd049c8-425e-45e0-8d45-6a4883c2f496",
"type": "main",
"index": 0
}
]
]
},
"6cd049c8-425e-45e0-8d45-6a4883c2f496": {
"main": [
[
{
"node": "5f4ae91a-29c7-4fb3-b535-34bc5194b183",
"type": "main",
"index": 0
}
],
[
{
"node": "58a0d85d-f6eb-47d1-ba9c-3af69ddd30fb",
"type": "main",
"index": 0
}
]
]
},
"47d741e7-a53f-40c7-bf7c-09a446b0d229": {
"main": [
[
{
"node": "a377879d-517d-4c90-a3d4-a7a0c190787e",
"type": "main",
"index": 0
}
]
]
},
"74513e7e-a7dc-4b19-b23e-01efd82c9d6d": {
"main": [
[
{
"node": "47d741e7-a53f-40c7-bf7c-09a446b0d229",
"type": "main",
"index": 0
}
]
]
},
"4618e775-d14d-4355-b3a2-cd6a6bbc70e8": {
"main": [
[
{
"node": "645bf31c-4b3c-4f4c-b90b-610fc2d6007c",
"type": "main",
"index": 0
}
]
]
},
"b10c0ed6-5a94-4272-b65c-bd19bd674fa0": {
"main": [
[
{
"node": "fb76c70c-385d-4e7f-93cd-43023690076a",
"type": "main",
"index": 0
}
]
]
},
"035fbbe8-7758-4c7b-be8e-c1cba8fc48bc": {
"main": [
[
{
"node": "aa3e9285-235d-4fda-ab0e-45134cf825dd",
"type": "main",
"index": 0
}
]
]
},
"4a6f9faa-5b11-41fe-88c9-cc8a262a2de2": {
"main": [
[
{
"node": "b10c0ed6-5a94-4272-b65c-bd19bd674fa0",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Génération de leads
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Nick Saraev
@nicksaraevHi 👋 I'm Nick. I make money with automation & teach others how they can too. If you have any questions about my templates or about my n8n builds, feel free to ask and I'll happily respond in the comments. Thanks for reading!
Partager ce workflow