Los correos electrónicos fríos genéricos se ignoran. Los correos electrónicos personalizados que hacen referencia a la presencia real en línea de un cliente potencial obtienen respuestas. Este tutorial crea un proceso de auditoría SERP que investiga la empresa de cada cliente potencial, encuentra sus páginas mejor posicionadas, identifica lagunas de contenido y genera líneas de apertura de correo electrónico personalizadas. Cada auditoría cuesta entre 2 y 3 consultas de búsqueda (entre 0,010 y 0,015 dólares) y produce información procesable para su correo electrónico.
Requisitos previos
- Python 3.9+ instalado
- solicita biblioteca instalada
- Una clave API de Scavio de scavio.dev
- Una lista de nombres o dominios de empresas potenciales
Guia paso a paso
Paso 1: Defina su lista de prospectos
Cargue empresas potenciales para auditar. Cada uno recibe una mini sesión de investigación SERP.
prospects = [
{'name': 'Acme SaaS', 'domain': 'acmesaas.com', 'contact': '[email protected]'},
{'name': 'TechFlow', 'domain': 'techflow.io', 'contact': '[email protected]'},
{'name': 'DataSync Pro', 'domain': 'datasyncpro.com', 'contact': '[email protected]'},
]
queries_per_prospect = 3 # brand, competitors, content
total_cost = len(prospects) * queries_per_prospect * 0.005
print(f'{len(prospects)} prospects x {queries_per_prospect} queries each')
print(f'Estimated cost: ${total_cost:.3f}')Paso 2: Ejecute la auditoría SERP para cada cliente potencial
Busque el nombre de la empresa, sus competidores y su contenido para crear un perfil.
import requests, os, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
def search(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': 10})
return resp.json().get('organic_results', [])
def audit_prospect(prospect: dict) -> dict:
name = prospect['name']
domain = prospect['domain']
# Query 1: Brand presence
brand_results = search(f'{name} reviews')
brand_mentions = len([r for r in brand_results if domain in r.get('link', '')])
# Query 2: Competitor landscape
competitor_results = search(f'{name} alternatives competitors 2026')
competitors = [r['title'].split(' - ')[0] for r in competitor_results[:3]
if domain not in r.get('link', '')]
# Query 3: Content presence
content_results = search(f'site:{domain}')
top_pages = [r['title'] for r in content_results[:5]]
time.sleep(0.3)
return {
'prospect': name,
'brand_mentions_in_top10': brand_mentions,
'competitors': competitors[:3],
'top_pages': top_pages,
'has_blog': any('blog' in r.get('link', '').lower() for r in content_results)
}
# Audit first prospect
audit = audit_prospect(prospects[0])
for key, val in audit.items():
print(f' {key}: {val}')Paso 3: Generar líneas de apertura de correo electrónico personalizadas
Utilice los datos de la auditoría para elaborar una línea de apertura personalizada para cada cliente potencial. Haga referencia a su contenido real y posición competitiva.
def generate_opening(audit: dict) -> str:
name = audit['prospect']
templates = []
if audit['has_blog']:
page = audit['top_pages'][0] if audit['top_pages'] else ''
templates.append(
f'I noticed {name} has been publishing content like "{page[:40]}" -- '
f'curious if you are tracking how that ranks against {audit["competitors"][0] if audit["competitors"] else "competitors"}.'
)
if audit['brand_mentions_in_top10'] < 3:
templates.append(
f'{name} only appears {audit["brand_mentions_in_top10"]} times in the top 10 '
f'for brand searches. That is a quick win we could help with.'
)
if audit['competitors']:
templates.append(
f'Noticed {audit["competitors"][0]} is showing up in "{name} alternatives" '
f'searches -- are you monitoring that?'
)
return templates[0] if templates else f'Researched {name} and found some ranking opportunities.'
# Generate for all prospects
for p in prospects:
audit = audit_prospect(p)
opening = generate_opening(audit)
print(f'To: {p["contact"]}')
print(f'Opening: {opening}')
print()Ejemplo en Python
import requests, os, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
def search(query):
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us', 'num_results': 10})
return resp.json().get('organic_results', [])
def audit(name, domain):
brand = search(f'{name} reviews')
competitors = search(f'{name} alternatives 2026')
content = search(f'site:{domain}')
return {
'mentions': len([r for r in brand if domain in r.get('link', '')]),
'competitors': [r['title'].split(' - ')[0] for r in competitors[:3]],
'top_pages': [r['title'] for r in content[:3]]
}
result = audit('Acme SaaS', 'acmesaas.com')
print(f'Brand mentions: {result["mentions"]}')
print(f'Competitors: {", ".join(result["competitors"])}')Ejemplo en JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function search(query) {
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, country_code: 'us', num_results: 10 })
});
return (await resp.json()).organic_results || [];
}
async function audit(name, domain) {
const brand = await search(`${name} reviews`);
const competitors = await search(`${name} alternatives 2026`);
return {
mentions: brand.filter(r => r.link?.includes(domain)).length,
competitors: competitors.slice(0, 3).map(r => r.title.split(' - ')[0])
};
}
audit('Acme SaaS', 'acmesaas.com').then(r => {
console.log(`Mentions: ${r.mentions}`);
console.log(`Competitors: ${r.competitors.join(', ')}`);
});Salida esperada
3 prospects x 3 queries each
Estimated cost: $0.045
prospect: Acme SaaS
brand_mentions_in_top10: 2
competitors: ['RivalCRM', 'BetterSaaS', 'CloudTools']
top_pages: ['Acme SaaS - All-in-One CRM', 'Acme Blog: Sales Tips']
has_blog: True
To: jan[email protected]
Opening: I noticed Acme SaaS has been publishing content like "Acme Blog: Sales Tips" -- curious if you are tracking how that ranks against RivalCRM.