Aperçu
Les emails froids génériques obtiennent un taux de réponse de 2 %. Ce workflow audite la présence de chaque prospect sur le SERP Google avant de composer l'email : leurs positions dans le classement, l'inclusion dans AI Overview, le statut du Knowledge Graph et le positionnement des concurrents. Chaque email fait référence à la situation réelle du prospect sur le SERP, doublant ou triplant les taux de réponse.
Déclencheur
Quotidiennement avant la campagne, ou à la demande par lot de prospects.
Planification
Quotidiennement
Étapes du workflow
Charger la liste de prospects
Lire le CSV des prospects avec les noms d'entreprise et les domaines.
Effectuer un audit SERP par prospect
Pour chaque prospect, rechercher sur Google leur nom d'entreprise et leurs mots-clés de marque. Enregistrer les positions organiques, la présence d'AI Overview et les classements des concurrents.
Générer des accroches de personnalisation
Sur la base de l'audit SERP, générer des accroches d'email : absent d'AI Overview, concurrent mieux classé, pas de Knowledge Graph, etc.
Mettre en forme les brouillons d'email
Combiner les accroches de personnalisation avec les modèles d'email. Produire un brouillon par prospect.
Exporter pour envoi
Écrire les emails personnalisés dans un CSV ou les envoyer directement à l'outil d'envoi d'emails.
Implémentation Python
import requests, os, json
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
def serp_audit(company: str, domain: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": company, "country_code": "us"},
timeout=10,
)
data = resp.json()
organic = data.get("organic_results", [])
positions = [r["position"] for r in organic if domain in r.get("link", "")]
top_result = organic[0] if organic else {}
return {
"company": company,
"domain": domain,
"positions": positions,
"has_aio": bool(data.get("ai_overview")),
"has_kg": bool(data.get("knowledge_graph")),
"top_competitor": top_result.get("link", "") if top_result and domain not in top_result.get("link", "") else None,
}
def generate_hook(audit: dict) -> str:
if not audit["has_aio"]:
return f"{audit['company']} is not appearing in Google AI Overviews for brand searches. Competitors are getting that visibility instead."
if audit["top_competitor"]:
return f"{audit['top_competitor'].split('/')[2]} currently outranks {audit['company']} for brand searches on Google."
if not audit["positions"]:
return f"{audit['company']} does not appear in the first page of Google results for its own brand name."
return f"{audit['company']} ranks at position {audit['positions'][0]} for brand searches."
prospects = [{"company": "Acme Corp", "domain": "acme.com"}]
for p in prospects:
audit = serp_audit(p["company"], p["domain"])
hook = generate_hook(audit)
print(f"To: {p['company']}\nHook: {hook}\n")Implémentation JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function serpAudit(company, domain) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:company, country_code:'us'})});
const d = await r.json();
const organic = d.organic_results||[];
const positions = organic.filter(r=>(r.link||'').includes(domain)).map(r=>r.position);
const top = organic[0];
return {company, domain, positions, hasAio:!!d.ai_overview, hasKg:!!d.knowledge_graph,
topCompetitor:top && !(top.link||'').includes(domain) ? top.link : null};
}
function generateHook(audit) {
if (!audit.hasAio) return audit.company+' is not appearing in Google AI Overviews for brand searches.';
if (audit.topCompetitor) return audit.topCompetitor.split('/')[2]+' currently outranks '+audit.company+' for brand searches.';
if (!audit.positions.length) return audit.company+' does not appear on the first page of Google for its own brand name.';
return audit.company+' ranks at position '+audit.positions[0]+' for brand searches.';
}
const prospects = [{company:'Acme Corp', domain:'acme.com'}];
for (const p of prospects) {
const audit = await serpAudit(p.company, p.domain);
console.log('To: '+p.company+'\nHook: '+generateHook(audit)+'\n');
}Plateformes utilisées
Recherche web avec graphe de connaissances, PAA et aperçus IA