Les démarchages génériques sont ignorés. Un démarchage personnalisé qui fait référence aux actualités récentes, aux décisions technologiques ou aux activités de recrutement d’un prospect obtient des réponses. Ce tutoriel construit un pipeline d’enrichissement de leads qui prend un CSV de noms d’entreprises, recherche le contexte pertinent via l’API Scavio et produit un CSV enrichi avec des accroches de personnalisation. Chaque lead coûte environ 0,010 $ (2 recherches) à enrichir, ce qui rend la personnalisation de milliers de leads réalisable.
Prérequis
- Python 3.9+ installé
- Bibliothèques requests et csv
- Une clé API Scavio provenant de scavio.dev
- Un fichier CSV contenant les noms des entreprises leads
Parcours
Étape 1: Charger la liste de leads
Lisez vos leads à partir d’un fichier CSV. Au minimum, vous avez besoin du nom de l’entreprise. Des champs supplémentaires comme le secteur ou la localisation améliorent la qualité de la recherche.
import os, requests, csv, time, json
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
URL = 'https://api.scavio.dev/api/v1/search'
# Sample leads (in practice, load from CSV)
leads = [
{'company': 'Vercel', 'industry': 'developer tools'},
{'company': 'Linear', 'industry': 'project management'},
{'company': 'Resend', 'industry': 'email infrastructure'},
]
print(f'Loaded {len(leads)} leads to enrich')Étape 2: Rechercher des accroches de personnalisation par lead
Pour chaque lead, recherchez les actualités récentes et le contexte technologique. Extrayez les accroches de personnalisation les plus utiles des résultats.
def enrich_lead(lead: dict) -> dict:
company = lead['company']
# Recent news search
resp = requests.post(URL, headers=H,
json={'query': f'{company} news announcement 2026', 'country_code': 'us', 'num_results': 3})
news = resp.json().get('organic_results', [])
time.sleep(0.3)
# Tech/product search
resp2 = requests.post(URL, headers=H,
json={'query': f'{company} product launch update', 'country_code': 'us', 'num_results': 3})
product = resp2.json().get('organic_results', [])
# Extract hooks
hooks = []
for r in (news + product)[:4]:
snippet = r.get('snippet', '')
if snippet and len(snippet) > 30:
hooks.append(snippet[:120])
lead['news_headline'] = news[0]['title'] if news else ''
lead['personalization_hook'] = hooks[0] if hooks else ''
lead['recent_context'] = ' | '.join(hooks[:2])
lead['enriched'] = True
return lead
enriched = enrich_lead(leads[0])
print(f'{enriched["company"]}:')
print(f' Headline: {enriched["news_headline"][:60]}')
print(f' Hook: {enriched["personalization_hook"][:80]}')Étape 3: Enrichissement par lots et export vers CSV
Traitez tous les leads avec limitation de débit et exportez les données enrichies vers un nouveau fichier CSV prêt pour votre outil d’emailing.
def batch_enrich(leads: list, output_file: str = 'enriched_leads.csv') -> list:
enriched = []
for i, lead in enumerate(leads):
try:
result = enrich_lead(lead)
enriched.append(result)
print(f'[{i+1}/{len(leads)}] {lead["company"]}: enriched')
except Exception as e:
lead['enriched'] = False
lead['personalization_hook'] = ''
enriched.append(lead)
print(f'[{i+1}/{len(leads)}] {lead["company"]}: failed ({e})')
time.sleep(0.3)
# Export to CSV
if enriched:
keys = enriched[0].keys()
with open(output_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader()
writer.writerows(enriched)
success = sum(1 for l in enriched if l.get('enriched'))
cost = len(leads) * 0.010
print(f'\nEnriched {success}/{len(leads)} leads')
print(f'Cost: ${cost:.3f}')
print(f'Saved to {output_file}')
return enriched
batch_enrich(leads)Exemple Python
import os, requests, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
def enrich_lead(company):
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'query': f'{company} news 2026', 'country_code': 'us', 'num_results': 3})
results = resp.json().get('organic_results', [])
headline = results[0]['title'] if results else 'N/A'
hook = results[0].get('snippet', '')[:100] if results else ''
print(f'{company}: {headline[:50]}')
print(f' Hook: {hook[:70]}')
for co in ['Vercel', 'Linear', 'Resend']:
enrich_lead(co)
time.sleep(0.3)
print(f'\nCost: $0.015 (3 leads x $0.005)')Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function enrichLead(company) {
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: `${company} news 2026`, country_code: 'us', num_results: 3 })
});
const results = (await resp.json()).organic_results || [];
const headline = results[0]?.title || 'N/A';
console.log(`${company}: ${headline.slice(0, 50)}`);
}
(async () => {
for (const co of ['Vercel', 'Linear', 'Resend']) await enrichLead(co);
console.log('Cost: $0.015');
})();Sortie attendue
[1/3] Vercel: enriched
[2/3] Linear: enriched
[3/3] Resend: enriched
Vercel:
Headline: Vercel Launches v0 2.0 with Full-Stack AI Code Gen
Hook: Vercel announced v0 2.0, its AI-powered code generation tool
Linear:
Headline: Linear Raises $50M Series C for Project Management
Hook: Linear closed a $50M Series C led by Accel to expand its p
Enriched 3/3 leads
Cost: $0.030
Saved to enriched_leads.csv