Collecteur d'e-mails Google Maps avec requêtes HTTP et JavaScript

Avancé

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

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "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
          }
        ]
      ]
    }
  }
}
Foire aux questions

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.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds19
Catégorie1
Types de nœuds11
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Nick Saraev

Nick Saraev

@nicksaraev

Hi 👋 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!

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34