Le cold email fonctionne mieux lorsque chaque message est personnalisé avec des détails spécifiques sur l'entreprise du destinataire. Faire des recherches manuelles pour chaque prospect ne passe pas à l'échelle. Ce tutoriel construit un pipeline automatisé d'enrichissement de leads qui prend un CSV de noms d'entreprises, interroge Google pour chacune via l'API Scavio, extrait la description du graphe de connaissances, les actualités récentes et les détails clés des snippets organiques, puis écrit un CSV enrichi prêt pour un publipostage ou une importation CRM.
Prérequis
- Python 3.8 ou supérieur
- bibliothèque requests installée
- Une clé API Scavio
- Un fichier CSV avec des noms d'entreprises à enrichir
Parcours
Étape 1: Charger la liste de leads
Lire les noms d'entreprises à partir d'un fichier CSV. Le script attend une colonne nommée company_name.
import csv
def load_leads(path: str) -> list[dict]:
with open(path) as f:
return list(csv.DictReader(f))
leads = load_leads("leads.csv")
print(f"Loaded {len(leads)} leads")Étape 2: Rechercher chaque entreprise sur Google
Interroger Google pour le nom de l'entreprise et extraire le graphe de connaissances, les snippets organiques et les éventuels résultats d'actualités.
import requests
def search_company(name: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": name, "country_code": "us"}
)
r.raise_for_status()
data = r.json()
return {
"description": data.get("knowledge_graph", {}).get("description", ""),
"website": data.get("knowledge_graph", {}).get("website", ""),
"snippet": data.get("organic_results", [{}])[0].get("snippet", ""),
}Étape 3: Enrichir chaque lead
Parcourir les leads, rechercher chaque entreprise et fusionner les données d'enrichissement dans le dictionnaire du lead.
import time
def enrich_leads(leads: list[dict]) -> list[dict]:
for lead in leads:
enrichment = search_company(lead["company_name"])
lead.update(enrichment)
time.sleep(0.5)
return leadsÉtape 4: Exporter les données enrichies
Écrire les leads enrichis dans un nouveau CSV avec des colonnes supplémentaires pour la description, le site web et le snippet.
def export_enriched(leads: list[dict], path: str = "leads_enriched.csv") -> None:
if not leads:
return
with open(path, "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=leads[0].keys())
writer.writeheader()
writer.writerows(leads)
print(f"Exported {len(leads)} enriched leads to {path}")Exemple Python
import os
import csv
import time
import requests
API_KEY = os.environ.get("SCAVIO_API_KEY", "your_scavio_api_key")
ENDPOINT = "https://api.scavio.dev/api/v1/search"
def search_company(name: str) -> dict:
r = requests.post(ENDPOINT, headers={"x-api-key": API_KEY},
json={"query": name, "country_code": "us"})
r.raise_for_status()
data = r.json()
kg = data.get("knowledge_graph", {})
return {
"description": kg.get("description", ""),
"website": kg.get("website", ""),
"snippet": data.get("organic_results", [{}])[0].get("snippet", ""),
}
def enrich(input_csv: str, output_csv: str) -> None:
with open(input_csv) as f:
leads = list(csv.DictReader(f))
for lead in leads:
lead.update(search_company(lead["company_name"]))
time.sleep(0.5)
with open(output_csv, "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=leads[0].keys())
w.writeheader()
w.writerows(leads)
print(f"Enriched {len(leads)} leads")
if __name__ == "__main__":
enrich("leads.csv", "leads_enriched.csv")Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || "your_scavio_api_key";
const ENDPOINT = "https://api.scavio.dev/api/v1/search";
const fs = require("fs");
async function searchCompany(name) {
const res = await fetch(ENDPOINT, {
method: "POST",
headers: { "x-api-key": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: name, country_code: "us" })
});
const data = await res.json();
const kg = data.knowledge_graph || {};
return {
description: kg.description || "",
website: kg.website || "",
snippet: (data.organic_results || [{}])[0]?.snippet || ""
};
}
async function main() {
const companies = ["Stripe", "Vercel", "Supabase"];
for (const name of companies) {
const info = await searchCompany(name);
console.log(`${name}: ${info.description.slice(0, 80)}`);
console.log(` Website: ${info.website}`);
}
}
main().catch(console.error);Sortie attendue
Enriched 50 leads
leads_enriched.csv:
company_name,email,description,website,snippet
Stripe,contact@stripe.com,"Online payment processing for internet businesses",https://stripe.com,"Stripe is a technology company that builds economic infrastructure..."
Vercel,[email protected],"Cloud platform for frontend frameworks",https://vercel.com,"Vercel enables developers to build and deploy web applications..."