Resumen
Ejecutar diario SERP consultas for your Surfer SEO palabras clave objetivo to rastrear posicionamiento positions, AI Overview appearances, y competidor movements. Feed live SERP datos en optimizacion de contenidos decisions.
Desencadenador
Diario cron at 06:00 UTC
Programación
Diario at 06:00 UTC
Pasos del flujo de trabajo
Cargar lista de palabras clave
Leer palabras clave objetivo de un JSON file, base de datos, o Google Sheet. Cada palabra clave incluye el objetivo URL to rastrear position for.
Consulta SERP for cada palabra clave
Search Google via Scavio for cada palabra clave con AI Overview enabled. Extraer full organic posicionamientos, AI Overview presence, y People Also Ask.
Find objetivo position
Scan resultados organicos for el objetivo URL. Record its position, o mark as 'no encontrado' if outside top 100.
Detectar AI Overview cambios
Verificar if el palabra clave activa un AI Overview y si el dominio objetivo es cited. Log cambios de anterior dia.
Almacenar y alerta
Agregar diario snapshot to un serie temporal base de datos o CSV. Enviar alertas on position drops greater than 3 o AI Overview citacion cambios.
Implementacion en Python
import requests, os, json
from datetime import date
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def track_keyword(keyword, target_domain):
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': keyword, 'ai_overview': True},
timeout=10).json()
organic = r.get('organic', [])
position = None
for o in organic:
if target_domain in o.get('link', ''):
position = o.get('position')
break
aio = r.get('ai_overview', {}) or {}
aio_text = aio.get('text', '')
return {
'date': str(date.today()),
'keyword': keyword,
'position': position,
'top_3': [{'domain': o.get('link', '').split('/')[2] if '/' in o.get('link', '') else '',
'title': o['title']} for o in organic[:3]],
'has_ai_overview': bool(r.get('ai_overview')),
'cited_in_aio': target_domain in aio_text.lower(),
'paa_count': len(r.get('people_also_ask', [])),
}
keywords = [
('best project management tool 2026', 'example.com'),
('project management software comparison', 'example.com'),
]
for kw, domain in keywords:
result = track_keyword(kw, domain)
pos = result['position'] or 'not found'
aio = 'CITED' if result['cited_in_aio'] else 'not cited'
print(f"{kw}: #{pos} | AIO: {result['has_ai_overview']} ({aio})")Implementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function trackKeyword(keyword, targetDomain) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: keyword, ai_overview: true})
}).then(r => r.json());
const organic = r.organic || [];
const match = organic.find(o => (o.link || "").includes(targetDomain));
const aio = r.ai_overview || {};
return {
date: new Date().toISOString().split("T")[0],
keyword,
position: match ? match.position : null,
top3: organic.slice(0, 3).map(o => ({
domain: (o.link || "").split("/")[2] || "", title: o.title
})),
hasAiOverview: Boolean(r.ai_overview),
citedInAio: (aio.text || "").toLowerCase().includes(targetDomain),
paaCount: (r.people_also_ask || []).length,
};
}
(async () => {
const keywords = [
["best project management tool 2026", "example.com"],
["project management software comparison", "example.com"],
];
for (const [kw, domain] of keywords) {
const r = await trackKeyword(kw, domain);
const pos = r.position || "not found";
console.log(`${kw}: #${pos} | AIO: ${r.hasAiOverview} (${r.citedInAio ? "CITED" : "not cited"})`);
}
})();Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA