Vous passez des heures à chercher des contacts pour vos campagnes de prospection locale. Vous ouvrez Google Maps ville par ville, vous copiez des emails un par un. Et une fois la liste faite, vous devez encore trier manuellement : qui est sérieux ? Qui vaut un appel ? Ce workflow scrape, extrait ET qualifie automatiquement. 300 contacts scorés en 10 minutes.
- Le cauchemar de la prospection manuelle
- Ce que le workflow fait (et ne fait pas)
- Architecture du système : Maps scraping + n8n + IA
- Phase 1 : le scraping Google Maps
- Phase 2 : extraction des emails (anti-encodage HTML)
- Phase 3 : la qualification IA
- La structure Google Sheets
- Avant/Après : le gain réel
- Ce que ça coûte (rien) et ce que ça rapporte
- Le workflow n8n en détail
- Timeline : 10 minutes chrono
- Ce qu'il se passe sans automatisation
- Comment le reproduire en 5 étapes
- Extensions possibles
- Glossaire
Le cauchemar de la prospection manuelle
Le processus manuel classique :
- Ouvrir Google Maps, taper le mot-clé + la ville
- Parcourir les résultats un par un
- Cliquer sur chaque fiche pour voir le site web
- Visiter le site, trouver la page contact
- Copier l'email (quand il est visible)
- Juger à l'œil si le prospect a l'air sérieux
- Répéter pour la ville suivante
Deux problèmes majeurs : les emails encodés en HTML (invisibles pour un scraper basique) et la qualification manuelle (subjective, lente, inconsistante d'une session à l'autre).
Non seulement vous passez 3 heures à collecter 50 contacts, mais vous devez ensuite les trier un par un. Et ce tri est purement subjectif : vous jugez sur le design du site, la note Google, votre humeur du moment. Un prospect excellent peut passer sous le radar parce que son site est moche. Et un prospect médiocre peut vous faire perdre 20 minutes d'appel.
Ce que le workflow fait (et ne fait pas)
Ce qu'il fait :
- Scrape Google Maps pour chaque ville de votre liste
- Récupère les établissements (nom, adresse, téléphone, site web, note, nombre d'avis)
- Visite chaque site web détecté, extrait TOUS les emails
- Décode les emails protégés par encodage HTML
- Envoie le contenu du site + les données Maps à l'IA pour qualification
- l'IA analyse et attribue un score de pertinence + des signaux d'achat
- Déduplique les résultats et les trie par score décroissant
- Remplit le Google Sheet avec tout : contacts, emails, score, signaux
Ce qu'il ne fait pas :
- Trouver le nom du dirigeant (Maps donne l'établissement, pas les personnes)
- Vérifier si l'email est valide (SMTP check non intégré, mais ajoutable)
- Envoyer des emails de prospection (ça, c'est un autre workflow)
- Remplacer votre jugement humain (le score IA est un gain de temps, pas une vérité absolue)
Architecture du système : Maps scraping + n8n + IA
Établissements + données
+ contenu des pages
+ données Maps → score
emails, score, signaux
Le flux est linéaire mais chaque étape a ses pièges. Le scraping Maps doit gérer la pagination et les changements de structure HTML. L'extraction des emails doit décoder le HTML. Et la qualification IA doit être rapide, consistante, et actionnable.
Phase 1 : le scraping Google Maps
Pour chaque combinaison mot-clé + ville, le workflow :
- Construit l'URL de recherche Maps (
google.com/maps/search/plombier+orleans) - Récupère la page de résultats et parse le HTML pour extraire la liste des établissements
- Pour chaque établissement, récupère : nom, adresse, téléphone, site web, note Google, nombre d'avis
- Stocke temporairement les résultats pour l'étape suivante
Chaque résultat Maps contient en moyenne 15 à 20 établissements. Sur 50 villes, on obtient 750 à 1 000 établissements bruts. Après filtrage (seuls ceux avec un site web sont conservés pour l'extraction d'email), on arrive à 300 à 400 contacts exploitables.
Phase 2 : extraction des emails (anti-encodage HTML)
Un email normal dans le code HTML : contact@entreprise.fr. Facile à extraire avec une regex.
Un email encodé : contact@entreprise.fr
Pour un humain, le navigateur décode ça et affiche contact@entreprise.fr. Pour un scraper basique, c'est du charabia.
La solution en deux temps :
- Décoder les entités HTML : remplacer
@par@,.par., etc. - Parser le HTML décodé : une regex classique trouve tous les emails de la page.
Le nœud HTTP Request récupère le HTML brut. Un nœud Code en aval applique le décodage HTML (fonction native JavaScript he.decode()) puis une regex standard. En deux nœuds, le problème est réglé. Pas besoin d'un service externe.
Phase 3 : la qualification IA
Pour chaque prospect, l'IA reçoit :
- Le contenu texte de la page d'accueil du site
- Les données Maps (note Google, nombre d'avis, catégorie, adresse)
- La présence ou non d'un site web (un prospect sans site = signal faible)
À partir de ces données, l'IA analyse et produit :
Sans qualification, 300 contacts = 300 appels à faire dans l'ordre du Sheet. Avec qualification, vous commencez par les 50 meilleurs scores, puis les 50 suivants. Votre taux de conversion sur les premiers appels est mécaniquement plus élevé. Et vous ne perdez pas de temps sur des prospects qui n'ont pas de site, pas de mentions légales, ou un contenu vide.
Le prompt l'IA exact est fourni dans la ressource. Il inclut les instructions précises pour chaque critère, le format de sortie JSON attendu, et les règles de scoring. Vous pouvez l'adapter à votre secteur.
La structure Google Sheets
Onglet « Input » :
| mot_cle | ville | code_postal | traite |
|---|---|---|---|
| plombier | Orléans | 45000 | oui |
| plombier | Tours | 37000 | oui |
| plombier | Blois | 41000 | oui |
| plombier | Bourges | 18000 | non |
| fleuriste | Orléans | 45000 | non |
Onglet « Résultats » (triés par score décroissant) :
| nom | adresse | tel | site | note | score | signaux | ville | |
|---|---|---|---|---|---|---|---|---|
| Dupont Plomberie | 12 rue de Paris, 45000 Orléans | 02 38 12 34 56 | contact@dupont-plomberie.fr | dupont-plomberie.fr | 4.7 | 9/10 | tarifs en ligne, mentions clients, site pro | Orléans |
| Martin Chauffage | 45 av. Gambetta, 37000 Tours | 02 47 98 76 54 | info@martin-chauffage.fr | martin-chauffage.fr | 4.5 | 7/10 | devis en ligne, réseaux sociaux | Tours |
| Bernard Sanitaire | 8 pl. du Maréchal, 45000 Orléans | 02 38 11 22 33 | pas d'email | pas de site | 3.8 | 2/10 | pas de site web, peu d'avis | Orléans |
Les colonnes score et signaux sont le résultat de l'analyse l'IA. La colonne traite dans l'Input permet de reprendre un run interrompu sans re-scraper les villes déjà faites.
Avant/Après : le gain réel
Ce que ça coûte (rien) et ce que ça rapporte
à 20 €/h = 400 €/mois
- ❌ Temps passé : 240h/an
- ❌ Coût main d'œuvre : 4 800 €/an
- ❌ 30% d'emails manqués
- ❌ Qualification subjective
+ 10 min de supervision
- ✅ Coût l'IA : ~3 € × 5 = 15 €/mois
- ✅ Supervision : 1h40/mois
- ✅ 100% des emails détectés
- ✅ Qualification IA consistante
Le workflow n8n en détail
Phase 1 : Scraping Google Maps
- Lecture du Sheet Input : récupère toutes les lignes où
traite = non - Boucle sur chaque ville : construit l'URL Maps pour chaque combinaison mot-clé + ville
- HTTP Request : récupère le HTML de la page de résultats Maps
- Parsing HTML : extrait les établissements (nom, adresse, tel, site, note)
- Marquage
traite = oui: la ville est marquée comme traitée
Phase 2 : Extraction des emails
- Boucle sur chaque site web détecté en phase 1
- HTTP Request : récupère le HTML de la page d'accueil
- Décodage HTML : transforme les entités encodées en caractères normaux
- Extraction regex : trouve toutes les adresses email
- Collecte du contenu textuel : conserve le texte de la page pour la phase 3
Phase 3 : Qualification IA
- Construction du prompt : pour chaque prospect, assemble les données Maps + le contenu du site
- Appel l'IA : envoie le prompt avec les instructions de scoring
- Parsing de la réponse : extrait le score, les signaux, la taille estimée et les red flags
- Déduplication et tri : supprime les doublons, trie par score décroissant
- Écriture dans le Sheet Résultats : tout est prêt, trié, prêt à appeler
La séparation en trois phases permet de reprendre le workflow là où il s'est arrêté. Si un site met 30 secondes à répondre et fait timeout, seule cette ligne est impactée. Si l'API l'IA a un délai, les résultats déjà obtenus ne sont pas perdus. Le traite = oui dans l'Input empêche de re-scraper les villes déjà faites.
Timeline : 10 minutes chrono
- Lecture du Sheet Input : 50 villes trouvées
- 50 pages Maps scrapées
- ~750 établissements bruts détectés
- ~400 avec un site web (conservés pour la suite)
- ~300 sites visités
- ~280 emails trouvés (décodage HTML inclus)
- Quelques timeouts, les autres continuent
- Les premiers prospects sont envoyés à l'IA
- Chaque analyse prend ~2 secondes
- ~280 contacts dans le Sheet Résultats
- Triés par score IA décroissant
- Chaque prospect a son score, ses signaux, ses red flags
- Prêt à appeler, du meilleur au moins bon
Ce qu'il se passe sans automatisation
Vous cherchez 100 contacts par mois → 6 heures de recherche → vous les qualifiez au feeling en 2 heures → 30% sont en réalité non pertinents → vous perdez 3 heures d'appels sur des mauvais contacts → votre pipe commercial est moins efficace → vous cherchez encore plus de contacts le mois suivant pour compenser.
Avec le workflow, vous cassez ce cercle. Le coût marginal de passer de 100 à 500 contacts est quasi nul. Et chaque contact est scoré sur des critères objectifs. Vous ne perdez plus de temps sur des prospects sans potentiel.
Comment le reproduire en 5 étapes
traite = non pour toutes. Créez un compte de service Google (Service Account) pour autoriser n8n à lire/écrire dans le Sheet.docs.google.com/spreadsheets/d/[ID]/edit). Ajoutez votre clé API IA dans le nœud l'IA. Vérifiez les noms d'onglets (Input, Résultats).Extensions possibles
- Vérification SMTP : ajouter une vérification de la validité des emails avant de les écrire dans le Sheet
- Enrichissement SIRET : croiser avec l'API SIRENE pour le SIRET, la forme juridique, la date de création
- Enrichissement LinkedIn : pour les prospects avec un site pro, chercher la page LinkedIn de l'entreprise
- Envoi automatique dans un CRM : pousser les contacts scorés directement dans Brevo, HubSpot ou votre CRM
- Programmation récurrente : un cron n8n qui lance le workflow chaque semaine avec de nouvelles villes
- Multi-secteurs : un seul Sheet Input avec plusieurs mots-clés (plombiers, électriciens, serruriers)
- Personnalisation du scoring par secteur : des grilles de qualification différentes selon le métier ciblé
Ce que ça change concrètement
Glossaire
Extraire automatiquement des données d'un site web. Comme si quelqu'un visitait la page et copiait les informations, mais fait par un programme.
Le bloc de 3 résultats avec étoiles que Google affiche en haut de la page pour une recherche locale (ex : « plombier Lyon »). Ces résultats viennent de Google Maps.
Une technique utilisée par les sites web pour masquer les adresses email aux robots. Le navigateur les décode automatiquement pour l'humain, mais un scraper basique voit du charabia.
Un « motif de recherche » qui permet de trouver des informations dans du texte. Ici, on utilise une regex pour repérer les adresses email (qui ont toutes la forme xxx@xxx.xx).
Un « compte robot » Google qui permet à n8n de lire et écrire dans vos Sheets sans intervention humaine.
Un modèle d'intelligence artificielle capable d'analyser du texte et de prendre des décisions structurées. Ici, il lit le contenu d'un site web et les données Maps, puis attribue un score de pertinence à chaque prospect.
Une interface qui permet à deux logiciels de se parler. Comme un standard téléphonique : n8n appelle l'API l'IA, les données circulent.
Un outil d'automatisation visuel qui permet de connecter des services entre eux sans coder. Chaque « nœud » fait une action (lire un Sheet, scraper une page, appeler l'IA).
Quand un site web met trop de temps à répondre, le workflow abandonne la requête plutôt que d'attendre indéfiniment. Le contact est marqué en échec, les autres continuent.
Supprimer les doublons. Si le même email apparaît sur 3 pages, il n'est enregistré qu'une fois dans le Sheet.
Travailler avec Alexandre →
