Un fil de discussion r/BusinessHub demandait comment passer à l'échelle la génération de leads Google Maps sans copier-coller manuel. La réponse que la plupart des gens ignorent : les requêtes SERP ciblées sur google.com/maps renvoient des résultats structurés du pack local sans navigateur. Ce tutoriel détaille le modèle.
Prérequis
- Python 3.10+
- Clé API Scavio
Parcours
Étape 1: Définir la liste de départ
Paires ville + domaine d'activité.
SEEDS = [('Austin TX', 'dentist'), ('Austin TX', 'med spa'), ('Austin TX', 'real estate broker')]Étape 2: Requête SERP pour le pack local
La requête ciblée sur Maps renvoie des fiches d'entreprises.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def local_pack(city, practice):
return requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'{practice} {city}', 'search_type': 'local'}).json()Étape 3: Extraire les données de chaque résultat
Nom, téléphone, site web sont renvoyés de manière structurée.
def normalize(local):
rows = []
for biz in local.get('local_results', []):
rows.append({'name': biz.get('title'), 'phone': biz.get('phone'), 'website': biz.get('website'), 'address': biz.get('address')})
return rowsÉtape 4: Vérifier le site web et récupérer la page d'accueil
L'endpoint Extract convertit la page d'accueil en markdown.
def verify(rows):
for r in rows:
if r.get('website'):
md = requests.post('https://api.scavio.dev/api/v1/extract',
headers={'x-api-key': API_KEY}, json={'url': r['website'], 'format': 'markdown'}).json()
r['site_excerpt'] = md.get('markdown', '')[:500]
return rowsÉtape 5: Dédoublonner + écrire le CSV
Importer dans un CRM ou un outil de BI.
import csv
with open('leads.csv', 'w') as f:
w = csv.DictWriter(f, fieldnames=['name','phone','website','address','site_excerpt'])
w.writeheader(); w.writerows(verified)Exemple Python
import os, requests, csv
API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY}
def leads(city, niche):
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'query': f'{niche} {city}', 'search_type': 'local'}).json()
return [{'name': b.get('title'), 'phone': b.get('phone'), 'website': b.get('website')} for b in r.get('local_results', [])]
print(leads('Austin TX', 'dentist'))Exemple JavaScript
const H = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
export async function leads(city, niche) {
const r = await fetch('https://api.scavio.dev/api/v1/search', { method:'POST', headers:H, body: JSON.stringify({ query: `${niche} ${city}`, search_type: 'local' }) }).then(r => r.json());
return r.local_results || [];
}Sortie attendue
About 20 local businesses per (city, niche) seed, with name, phone, website, and address. Verified excerpt for each that has a public site.