Automatisez la découverte de prospects locaux en interrogeant Google Maps via une API de recherche pour trouver des entreprises correspondant à vos critères cibles dans des zones géographiques spécifiques. La recherche manuelle de prospects sur Google Maps est fastidieuse et ne passe pas à l'échelle au-delà de quelques codes postaux. Ce tutoriel construit un pipeline qui prend une catégorie d'entreprise et une liste de lieux, interroge le point de terminaison de recherche Google de Scavio avec une intention locale, et produit une liste structurée de prospects avec nom, adresse, téléphone et site Web. Il couvre le traitement par lots, la déduplication et l'exportation vers CSV.
Prérequis
- Python 3.8+ installé
- bibliothèques requests et csv (les deux dans la stdlib Python sauf requests)
- Une clé API Scavio depuis scavio.dev
- Une liste d'emplacements cibles et de catégories d'entreprises
Parcours
Étape 1: Définir les emplacements et catégories cibles
Configurer la matrice de recherche des types d'entreprises et des zones géographiques que vous souhaitez prospecter.
import os, requests, csv
API_KEY = os.environ['SCAVIO_API_KEY']
CATEGORIES = ['plumber', 'hvac contractor', 'roofing company']
LOCATIONS = ['Austin TX', 'Denver CO', 'Nashville TN']
def build_queries(categories: list, locations: list) -> list:
queries = []
for cat in categories:
for loc in locations:
queries.append(f'{cat} in {loc}')
return queries
print(f'Generated {len(build_queries(CATEGORIES, LOCATIONS))} search queries')Étape 2: Rechercher et extraire les données des entreprises locales
Interroger Scavio avec une intention locale et analyser les listes d'entreprises à partir des résultats.
def search_local_leads(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
resp.raise_for_status()
data = resp.json()
leads = []
for r in data.get('local_results', data.get('organic_results', [])):
leads.append({
'name': r.get('title', ''),
'address': r.get('address', ''),
'phone': r.get('phone', ''),
'website': r.get('link', ''),
'rating': r.get('rating', ''),
'query': query,
})
return leadsÉtape 3: Dédupliquer entre les requêtes
Supprimer les entreprises en double apparaissant dans plusieurs requêtes en faisant correspondre le nom et le numéro de téléphone.
def deduplicate_leads(all_leads: list) -> list:
seen = set()
unique = []
for lead in all_leads:
key = (lead['name'].lower().strip(), lead.get('phone', ''))
if key not in seen:
seen.add(key)
unique.append(lead)
return unique
def collect_all_leads(queries: list) -> list:
all_leads = []
for q in queries:
leads = search_local_leads(q)
all_leads.extend(leads)
print(f'{q}: {len(leads)} leads')
return deduplicate_leads(all_leads)Étape 4: Exporter vers CSV
Écrire les prospects dédupliqués dans un fichier CSV prêt à être importé dans votre CRM ou outil de prospection.
def export_csv(leads: list, filename: str = 'local_leads.csv'):
if not leads:
print('No leads to export')
return
fields = ['name', 'address', 'phone', 'website', 'rating', 'query']
with open(filename, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
writer.writerows(leads)
print(f'Exported {len(leads)} leads to {filename}')
queries = build_queries(CATEGORIES, LOCATIONS)
leads = collect_all_leads(queries)
export_csv(leads)Exemple Python
import requests, os, csv
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def find_leads(category, location):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{category} in {location}'}).json()
return [{'name': r.get('title', ''), 'url': r.get('link', '')}
for r in data.get('local_results', data.get('organic_results', []))]
for lead in find_leads('plumber', 'Austin TX'):
print(lead['name'])Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function findLeads(category, location) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${category} in ${location}`})
});
const data = await r.json();
return (data.local_results || data.organic_results || []).map(r => ({name: r.title, url: r.link}));
}
findLeads('plumber', 'Austin TX').then(leads => leads.forEach(l => console.log(l.name)));Sortie attendue
A CSV file of deduplicated local business leads with name, address, phone, website, and rating, collected from Google Maps results across multiple locations.