ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment construire un pipeline de leads locaux avec l'enrichissement SERP
Tutoriel

Comment construire un pipeline de leads locaux avec l'enrichissement SERP

Construisez un pipeline de génération de leads pour entreprises locales en utilisant les résultats de l'API de recherche. Trouvez des entreprises par catégorie et emplacement, puis enrichissez avec des données de contact.

Obtenez une clé API gratuiteDocumentation API

La génération de leads locaux à grande échelle nécessite de rechercher des entreprises par type et par emplacement, d'extraire les informations de contact et de qualifier les leads. Ce tutoriel construit un pipeline qui recherche les entreprises locales à l'aide des données SERP, extrait les sites web, les e-mails et les numéros de téléphone des résultats, et note chaque lead. Une recherche coûte 0,005 $, et un scan typique ville-catégorie de 20 requêtes coûte 0,10 $.

Prérequis

  • Python 3.9+ installé
  • bibliothèque requests installée
  • Une clé API Scavio depuis scavio.dev

Parcours

Étape 1: Définir les emplacements cibles et les catégories d'entreprises

Configurez les villes et les types d'entreprises à rechercher. Chaque combinaison devient une requête de recherche.

Python
locations = [
    'Austin TX', 'Denver CO', 'Portland OR',
    'Nashville TN', 'Raleigh NC'
]

categories = [
    'plumber', 'electrician', 'HVAC contractor',
    'roofing company'
]

total_queries = len(locations) * len(categories)
cost = total_queries * 0.005
print(f'{len(locations)} cities x {len(categories)} categories = {total_queries} queries')
print(f'Estimated cost: ${cost:.2f}')

Étape 2: Rechercher des entreprises locales

Exécutez des requêtes de recherche pour chaque paire emplacement-catégorie et collectez les listes d'entreprises à partir des résultats SERP.

Python
import requests, os, time, re

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def search_local(category: str, location: str) -> list:
    query = f'{category} in {location}'
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us', 'num_results': 10})
    resp.raise_for_status()
    results = resp.json().get('organic_results', [])
    leads = []
    for r in results:
        domain = r['link'].split('/')[2] if '/' in r['link'] else ''
        # Skip aggregator sites
        if any(agg in domain for agg in ['yelp.com', 'yellowpages.com',
               'homeadvisor.com', 'angi.com', 'thumbtack.com', 'bbb.org']):
            continue
        leads.append({
            'business_name': r['title'].split(' - ')[0].split(' | ')[0].strip(),
            'website': r['link'],
            'domain': domain,
            'snippet': r.get('snippet', ''),
            'category': category,
            'location': location
        })
    return leads

# Test one query
leads = search_local('plumber', 'Austin TX')
print(f'Found {len(leads)} leads for plumber in Austin TX')
for l in leads[:3]:
    print(f'  {l["business_name"]}: {l["domain"]}')

Étape 3: Extraire les informations de contact des extraits

Analysez les numéros de téléphone, les e-mails et les adresses des extraits SERP. De nombreuses listes d'entreprises locales incluent directement les informations de contact.

Python
def extract_contacts(lead: dict) -> dict:
    text = lead.get('snippet', '') + ' ' + lead.get('business_name', '')
    # Phone numbers
    phones = re.findall(r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}', text)
    # Email patterns
    emails = re.findall(r'[\w.+-]+@[\w-]+\.[\w.-]+', text)
    # Rating patterns (e.g., "4.8 stars", "4.8/5")
    ratings = re.findall(r'(\d\.\d)\s*(?:stars?|/5|rating)', text.lower())
    lead['phone'] = phones[0] if phones else ''
    lead['email'] = emails[0] if emails else ''
    lead['rating'] = float(ratings[0]) if ratings else 0.0
    return lead

# Enrich existing leads
enriched = [extract_contacts(l) for l in leads]
for l in enriched[:3]:
    print(f'  {l["business_name"]}: phone={l["phone"] or "N/A"}, '
          f'rating={l["rating"] or "N/A"}')

Étape 4: Exécuter le pipeline complet et exporter les résultats

Scannez toutes les combinaisons emplacement-catégorie, enrichissez les leads, dédupliquez par domaine et exportez en CSV.

Python
import csv

def run_pipeline(locations: list, categories: list) -> list:
    all_leads = []
    seen_domains = set()
    for location in locations:
        for category in categories:
            leads = search_local(category, location)
            for lead in leads:
                if lead['domain'] not in seen_domains:
                    seen_domains.add(lead['domain'])
                    all_leads.append(extract_contacts(lead))
            time.sleep(0.3)
    return all_leads

leads = run_pipeline(locations[:2], categories[:2])  # small test
print(f'Total unique leads: {len(leads)}')

# Export to CSV
if leads:
    with open('local_leads.csv', 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['business_name', 'domain',
            'phone', 'email', 'rating', 'category', 'location', 'website'])
        writer.writeheader()
        writer.writerows(leads)
    print(f'Exported to local_leads.csv')
    queries_used = len(locations[:2]) * len(categories[:2])
    print(f'Cost: {queries_used} queries = ${queries_used * 0.005:.3f}')

Exemple Python

Python
import requests, os, re, time, csv

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def find_leads(category, location):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': f'{category} in {location}', 'country_code': 'us', 'num_results': 10})
    leads = []
    for r in resp.json().get('organic_results', []):
        domain = r['link'].split('/')[2] if '/' in r['link'] else ''
        if not any(a in domain for a in ['yelp.com', 'yellowpages.com', 'angi.com']):
            phones = re.findall(r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}', r.get('snippet', ''))
            leads.append({'name': r['title'].split(' - ')[0], 'domain': domain,
                          'phone': phones[0] if phones else ''})
    return leads

leads = find_leads('plumber', 'Austin TX')
for l in leads[:5]:
    print(f'{l["name"]}: {l["domain"]} {l["phone"]}')

Exemple JavaScript

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function findLeads(category, location) {
  const resp = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: `${category} in ${location}`, country_code: 'us', num_results: 10 })
  });
  const data = await resp.json();
  return (data.organic_results || []).filter(r => {
    const domain = new URL(r.link).hostname;
    return !['yelp.com', 'yellowpages.com', 'angi.com'].some(a => domain.includes(a));
  }).map(r => ({
    name: r.title.split(' - ')[0],
    link: r.link,
    phone: (r.snippet || '').match(/\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}/)?.[0] || ''
  }));
}

findLeads('plumber', 'Austin TX').then(leads => leads.forEach(l => console.log(`${l.name}: ${l.phone}`)));

Sortie attendue

JSON
5 cities x 4 categories = 20 queries
Estimated cost: $0.10

Found 7 leads for plumber in Austin TX
  Radiant Plumbing: radiantplumbing.com
  ABC Home Services: abchomeservices.com
  Mr Rooter Plumbing: mrrooter.com

Total unique leads: 24
Exported to local_leads.csv
Cost: 4 queries = $0.020

Tutoriels associés

  • Comment réaliser un audit SERP pour la personnalisation des e-mails froids
  • Comment trouver des entreprises sans site web à grande échelle
  • Comment construire un pipeline de cold emailing avec Google Maps

Questions fréquentes

La plupart des développeurs terminent ce tutoriel en 15 à 30 minutes. Vous aurez besoin d'une clé API Scavio (l'offre gratuite suffit) et d'un environnement Python ou JavaScript fonctionnel.

Python 3.9+ installé. bibliothèque requests installée. Une clé API Scavio depuis scavio.dev. Une clé API Scavio vous donne 50 crédits gratuits à l'inscription.

Oui. L'offre gratuite comprend 50 crédits à l'inscription, ce qui est largement suffisant pour terminer ce tutoriel et prototyper une solution fonctionnelle.

Scavio dispose d'un package natif LangChain (langchain-scavio), d'un serveur MCP et d'une API REST simple qui fonctionne avec tout client HTTP. Ce tutoriel utilise the raw REST API, mais vous pouvez l'adapter à votre framework de prédilection.

Ressources connexes

Best Of

Meilleure API Google Maps pour l'extraction de leads en 2026

Read more
Best Of

Meilleures API d'enrichissement commercial pour les PME en 2026

Read more
Solution

Découverte locale de prospects avec pipeline d'enrichissement SERP

Read more
Glossary

Enrichissement des leads via l'API de recherche

Read more
Solution

Enrichissez les leads commerciaux avec des données de recherche au lieu d'Apollo.

Read more
Use Case

Génération de leads locaux Google Maps

Read more

Commencer

Construisez un pipeline de génération de leads pour entreprises locales en utilisant les résultats de l'API de recherche. Trouvez des entreprises par catégorie et emplacement, puis enrichissez avec des données de contact.

Obtenez une clé API gratuiteLire la documentation
ScavioScavio

API de recherche en temps réel pour agents IA. Recherchez sur toutes les plateformes, pas seulement Google.

Produit

  • Fonctionnalités
  • Tarifs
  • Tableau de bord
  • Affiliés

Développeurs

  • Documentation
  • Référence API
  • Démarrage rapide
  • Intégration MCP
  • SDK Python

Alternatives

  • Alternative à Tavily
  • Alternative à SerpAPI
  • Alternative à Firecrawl
  • Alternative à Exa

Outils

  • Formateur JSON
  • cURL vers code
  • Compteur de jetons
  • Tous les outils

© 2026 Scavio. Tous droits réservés.

Featured on TAAFT
Conditions d'utilisationPolitique de confidentialité