La prospection par e-mail froid échoue lorsque les messages sont génériques. Les e-mails froids les plus performants font référence à quelque chose de spécifique concernant le prospect : un article de blog récent, un lancement de produit, un signal d'embauche ou un détail de stack technique. Créer un pipeline d'audit d'une page automatise cette étape de recherche en interrogeant les données de recherche pour chaque domaine de prospect, en extrayant les signaux pertinents et en générant un bref audit que votre modèle d'e-mail peut référencer. Ce tutoriel montre comment construire un pipeline d'audit d'e-mail froid qui enrichit chaque prospect avec des données de recherche en direct de Scavio, produisant des accroches de personnalisation qui augmentent les taux de réponse.
Prérequis
- Python 3.8+ installé
- bibliothèques requests et csv
- Une clé API Scavio provenant de scavio.dev
- Un fichier CSV avec les domaines des prospects
Parcours
Étape 1: Charger la liste des prospects
Lisez votre fichier CSV de prospects contenant les noms d'entreprise et les domaines.
import os, requests, csv, json
API_KEY = os.environ["SCAVIO_API_KEY"]
def load_prospects(path):
with open(path) as f:
return list(csv.DictReader(f))
prospects = load_prospects("prospects.csv")
print(f"Loaded {len(prospects)} prospects")Étape 2: Auditer chaque domaine de prospect
Recherchez le domaine de chaque prospect pour trouver des actualités récentes, des articles de blog et des signaux d'entreprise.
def audit_prospect(domain):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": f"site:{domain}"})
results = resp.json().get("organic_results", [])[:5]
return {
"domain": domain,
"pages_found": len(results),
"recent_content": [r.get("title", "") for r in results[:3]],
"snippets": [r.get("snippet", "")[:120] for r in results[:3]],
}
audit = audit_prospect("example.com")
print(json.dumps(audit, indent=2))Étape 3: Extraire les accroches de personnalisation
Analysez les résultats d'audit pour trouver des accroches de personnalisation actionnables pour les e-mails froids.
SIGNALS = ["hiring", "launched", "raised", "partnered", "expanded", "new feature", "blog"]
def extract_hooks(audit):
hooks = []
for snippet in audit.get("snippets", []):
lower = snippet.lower()
for signal in SIGNALS:
if signal in lower:
hooks.append({"signal": signal, "context": snippet[:100]})
if not hooks and audit.get("recent_content"):
hooks.append({"signal": "content", "context": audit["recent_content"][0]})
return hooks[:2]
hooks = extract_hooks(audit)
print(f"Found {len(hooks)} hooks")Étape 4: Générer le CSV d'audit
Exécutez le pipeline pour tous les prospects et exportez les résultats d'audit enrichis.
def run_pipeline(prospects):
enriched = []
for p in prospects:
domain = p.get("domain", "")
if not domain: continue
audit = audit_prospect(domain)
hooks = extract_hooks(audit)
enriched.append({
**p,
"hook_1": hooks[0]["context"] if hooks else "",
"hook_signal": hooks[0]["signal"] if hooks else "",
"pages_found": audit["pages_found"],
})
return enriched
results = run_pipeline(prospects[:5])
with open("enriched_prospects.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=results[0].keys())
w.writeheader()
w.writerows(results)
print(f"Exported {len(results)} enriched prospects")Exemple Python
import os, requests
API_KEY = os.environ["SCAVIO_API_KEY"]
def audit(domain):
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": f"site:{domain}"})
results = resp.json().get("organic_results", [])[:3]
return {"domain": domain, "pages": len(results),
"titles": [r["title"] for r in results]}
print(audit("stripe.com"))Exemple JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function audit(domain) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: `site:${domain}`})
});
const results = (await r.json()).organic_results || [];
return {domain, pages: results.length, titles: results.slice(0,3).map(r=>r.title)};
}
audit("stripe.com").then(console.log);Sortie attendue
An enriched CSV of prospects with personalization hooks extracted from live search data, ready for cold email templates.