Skip to content

Repository files navigation

Maps Prospector

Trouve des établissements en France sans site web via l'API Google Places, puis envoie automatiquement un email de prospection depuis ton Outlook.

⚠️ Le pipeline est en 2 étapes car Google Places ne fournit pas d'email. L'étape 1 collecte nom / adresse / téléphone / lien Maps. Tu complètes la colonne email, puis l'étape 2 envoie les messages.


1. Installation

cd C:\Users\louey\maps-prospector
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt

2. Clé API Google

  1. Va sur https://console.cloud.google.com/ → crée un projet.
  2. Active « Places API (New) » et active la facturation (crédit gratuit mensuel généreux ; au-delà c'est payant — surveille ta conso).
  3. Crée une clé API (APIs & Services → Credentials).
  4. Copie .env.example en .env et colle ta clé :
Copy-Item .env.example .env
notepad .env

3. Cibler puis collecter

Édite config.py : CITIES, CATEGORIES (villes et métiers visés).

python collect_leads.py

➡️ Crée data/leads.csv (uniquement les établissements sans site web). Relance autant que tu veux : les doublons sont ignorés.

4. Remplir les emails

collect_leads.py laisse la colonne email vide : Google ne fournit jamais l'email, et comme ces commerces n'ont pas de site, il n'existe pas de source automatique fiable. Tu la complètes donc toi-même.

Le plus rapide : depuis le dashboard. Chaque ligne a des liens cliquables qui pré-remplissent une recherche avec le nom + la ville :

  • 🔎 Google (« nom ville email contact »),
  • f Facebook (les pros y affichent souvent un email),
  • PJ Pages Jaunes (fiche annuaire).

Tu cliques → tu trouves l'email → tu le colles dans la colonne email de data/leads.csv → tu recharges la page (touche R).

💡 Tu as déjà les téléphones : pour un pitch « vous n'avez pas de site », un appel convertit souvent mieux qu'un email froid.

Les lignes sans email valide sont automatiquement ignorées à l'envoi.

5. Personnaliser et envoyer

Renseigne ton identité dans config.py (SENDER_NAME, SENDER_PHONE, …) — c'est obligatoire pour la conformité.

python send_emails.py --dry-run     # 1) simulation, ne rien envoyer
python send_emails.py --limit 5     # 2) test réel sur 5 emails
python send_emails.py               # 3) envoi (limite = DAILY_SEND_LIMIT)

Sécurités intégrées : anti-doublon (data/sent_log.csv), limite par exécution, pause entre chaque envoi, mention d'identité + désinscription dans l'email.

6. 📊 Tableau de bord (recommandé)

Une interface web pour tout suivre et tout piloter depuis les boutons :

streamlit run dashboard.py

ou double-clic sur lancer_dashboard.ps1. Ça ouvre le navigateur sur http://localhost:8501.

Le dashboard affiche :

  • Compteurs : Total, En attente, Envoyés, Réponses, STOP, Erreurs.
  • Graphe des emails envoyés par jour.
  • Tableau filtrable des prospects avec leur statut (⏳ en attente · 📤 envoyé · ✅ répondu · 🛑 STOP · ⚠️ erreur · ✉️❓ email manquant).
  • Boutons (barre de gauche) : Collecter · Vérifier les réponses · Simuler · Envoyer (avec case de confirmation pour l'envoi réel).

D'où viennent les statuts ?

Statut Source
En attente / Envoyé / Erreur data/leads.csv croisé avec data/sent_log.csv
Répondu / STOP data/replies.csv, généré par python check_replies.py

check_replies.py scanne ta boîte de réception Outlook et marque comme « Répondu » tout établissement contacté qui t'a écrit, et « STOP » si le message contient un mot de désabonnement. Lance-le régulièrement (ou via le bouton).


⚖️ Conformité (à lire)

  • Prospection B2B en France : autorisée sans consentement préalable si le message concerne l'activité professionnelle du destinataire et qu'il peut s'opposer facilement (règle CNIL). Le template inclut identité + « STOP ».
  • RGPD : tu constitues un fichier de contacts → tu dois pouvoir répondre aux demandes de suppression. Traite les réponses « STOP » sans délai.
  • Volume : garde des limites basses (défaut 30/exéc., 45 s d'intervalle) pour éviter d'être classé spam et de faire bloquer ta boîte Outlook.
  • CGU Google : on utilise l'API officielle (pas de scraping du site Maps).

About

Trouve des etablissements francais sans site web via l'API Google Places, puis pilote une campagne de prospection email. Python + Streamlit.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages