Enrichissez les prospects d'emails à froid en chargeant un CSV de domaines cibles, en recherchant sur Google l'activité récente de chaque entreprise, en extrayant des signaux comme les levées de fonds, les mentions de stack tech, les pages de recrutement et les couvertures médiatiques, en notant chaque prospect selon la force des signaux, et en exportant un CSV enrichi prêt pour la prospection. Les emails à froid génériques sont ignorés. Les emails enrichis qui font référence à une récente levée de fonds ou au choix de stack tech d'une entreprise convertissent 3 à 5 fois mieux. Ce pipeline automatise l'étape de recherche que les commerciaux font manuellement.
Prérequis
- Python 3.8+ installé
- bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Un fichier CSV avec les domaines ou noms d'entreprises des prospects
Parcours
Étape 1: Charger le CSV des prospects
Lire la liste des prospects et la préparer pour l'enrichissement.
import os, requests, csv, json
API_KEY = os.environ['SCAVIO_API_KEY']
def load_prospects(csv_path: str) -> list:
prospects = []
with open(csv_path) as f:
reader = csv.DictReader(f)
for row in reader:
prospects.append({
'company': row.get('company', row.get('name', '')),
'domain': row.get('domain', row.get('website', '')),
'email': row.get('email', ''),
})
return prospects
# Demo data
prospects = [
{'company': 'Acme Corp', 'domain': 'acme.com', 'email': '[email protected]'},
{'company': 'Beta Labs', 'domain': 'betalabs.io', 'email': '[email protected]'},
]
print(f'Loaded {len(prospects)} prospects')Étape 2: Rechercher des signaux pour chaque domaine
Effectuer des recherches Google ciblées pour chaque prospect afin de trouver des signaux de financement, recrutement, stack tech et actualités.
SIGNAL_QUERIES = [
('{company} funding round 2026', 'funding'),
('{company} hiring engineers 2026', 'hiring'),
('{company} tech stack', 'tech_stack'),
('{company} news 2026', 'news'),
]
def search_signals(company: str) -> dict:
signals = {}
for query_template, signal_type in SIGNAL_QUERIES:
query = query_template.format(company=company)
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=10)
results = resp.json().get('organic_results', [])[:3]
signals[signal_type] = [{
'title': r.get('title', ''),
'snippet': r.get('snippet', ''),
'url': r.get('link', ''),
} for r in results]
return signals
signals = search_signals('Vercel')
for sig_type, results in signals.items():
print(f'{sig_type}: {len(results)} results')Étape 3: Analyser et extraire les signaux clés
Extraire des signaux significatifs des résultats de recherche : montants des levées de fonds, mentions tech et indicateurs de recrutement.
import re
def parse_signals(raw_signals: dict) -> dict:
parsed = {'funding': '', 'hiring': False, 'tech_stack': [], 'recent_news': ''}
# Funding
for r in raw_signals.get('funding', []):
text = f"{r['title']} {r['snippet']}"
amounts = re.findall(r'\$[\d.]+[MBK]', text)
if amounts:
parsed['funding'] = amounts[0]
break
# Hiring
for r in raw_signals.get('hiring', []):
text = f"{r['title']} {r['snippet']}".lower()
if any(w in text for w in ['hiring', 'open position', 'join our team', 'careers']):
parsed['hiring'] = True
break
# Tech stack
tech_keywords = ['react', 'python', 'node', 'aws', 'gcp', 'kubernetes', 'typescript', 'go', 'rust']
for r in raw_signals.get('tech_stack', []):
text = f"{r['title']} {r['snippet']}".lower()
for tech in tech_keywords:
if tech in text and tech not in parsed['tech_stack']:
parsed['tech_stack'].append(tech)
# News
if raw_signals.get('news'):
parsed['recent_news'] = raw_signals['news'][0].get('title', '')
return parsed
parsed = parse_signals(signals)
print(json.dumps(parsed, indent=2))Étape 4: Noter chaque prospect
Attribuer un score de signaux à chaque prospect en fonction de la richesse des données trouvées.
def score_prospect(parsed_signals: dict) -> int:
score = 0
if parsed_signals.get('funding'):
score += 3 # Strong buy signal
if parsed_signals.get('hiring'):
score += 2 # Growth signal
if len(parsed_signals.get('tech_stack', [])) >= 2:
score += 2 # Tech-aware prospect
if parsed_signals.get('recent_news'):
score += 1 # Active company
return score
def enrich_prospects(prospects: list) -> list:
enriched = []
for p in prospects:
signals = search_signals(p['company'])
parsed = parse_signals(signals)
score = score_prospect(parsed)
enriched.append({**p, **parsed, 'score': score})
print(f"{p['company']}: score={score}")
enriched.sort(key=lambda x: x['score'], reverse=True)
return enriched
enriched = enrich_prospects(prospects)
for e in enriched:
print(f" {e['company']}: score={e['score']}, funding={e.get('funding', 'N/A')}")Étape 5: Exporter le CSV enrichi
Écrire les données enrichies des prospects dans un nouveau CSV prêt à être importé dans votre outil de prospection.
def export_enriched(enriched: list, output_path: str = 'enriched_prospects.csv'):
if not enriched:
print('No prospects to export')
return
fieldnames = ['company', 'domain', 'email', 'score', 'funding', 'hiring', 'tech_stack', 'recent_news']
with open(output_path, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames, extrasaction='ignore')
writer.writeheader()
for e in enriched:
row = {**e}
row['tech_stack'] = ', '.join(e.get('tech_stack', []))
writer.writerow(row)
print(f'Exported {len(enriched)} enriched prospects to {output_path}')
export_enriched(enriched)Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def enrich(company):
signals = {}
for q in [f'{company} funding 2026', f'{company} tech stack']:
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': q}).json()
signals[q] = [r.get('snippet', '')[:100] for r in data.get('organic_results', [])[:2]]
return signals
print(enrich('Vercel'))Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function enrich(company) {
const signals = {};
for (const q of [`${company} funding 2026`, `${company} tech stack`]) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query: q})
});
signals[q] = ((await r.json()).organic_results || []).slice(0, 2).map(r => r.snippet?.slice(0, 100));
}
return signals;
}
enrich('Vercel').then(console.log);Sortie attendue
An enriched prospect CSV with funding signals, hiring indicators, tech stack mentions, and recent news for each company, scored and sorted by signal strength.