Resumen
Google AI Overviews ahora answer sobre 30% of informational consultas directamente in el SERP. Este flujo de trabajo verifica your palabras clave objetivo diario, extrae cual dominios son cited in el AI Overview panel, y alertas you cuando un competidor gains un citacion you do no tienen. It replaces manual spot-checking con automatizado, diario cobertura of hundreds of palabras clave at $0.005 cada.
Desencadenador
Cron programar (diario at 7 AM UTC)
Programación
Diario at 7 AM UTC
Pasos del flujo de trabajo
Cargar palabra clave watchlist
Leer palabras clave objetivo y your dominio de un archivo de configuracion o base de datos. Include competidor dominios to rastrear.
Consulta AI Overviews
For cada palabra clave, call el Scavio API con ai_overview enabled. Extraer el AI Overview text y cited fuente URLs.
Analizar citaciones
Extraer todos cited dominios de AI Overview fuentes. Marcar si your dominio o cualquier competidor dominio es cited.
Comparar contra anterior dia
Cargar yesterday's citacion datos de storage. Identificar nuevo competidor citaciones y lost own citaciones.
Generar alerta
Format cambios en un resumen: palabras clave donde competidores gained citaciones, palabras clave donde you lost citaciones.
Enviar notificacion y actualizacion storage
Push el alerta to Slack o correo electronico. Save today's citacion datos as el nuevo linea base.
Implementacion en Python
import requests, os, json
from datetime import date
from pathlib import Path
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
MY_DOMAIN = "yourdomain.com"
COMPETITORS = ["competitor1.com", "competitor2.com"]
KEYWORDS = ["best search api 2026", "serp api for agents", "web search tool for llm"]
def check_citations(keywords):
results = []
for kw in keywords:
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": kw, "ai_overview": True}, timeout=10).json()
aio = r.get("ai_overview")
cited = []
if aio:
cited = [s.get("link", "") for s in aio.get("sources", [])]
results.append({
"keyword": kw, "date": str(date.today()),
"has_aio": bool(aio),
"my_cited": any(MY_DOMAIN in u for u in cited),
"competitor_cited": [c for c in COMPETITORS if any(c in u for u in cited)],
"all_cited": cited
})
return results
today = check_citations(KEYWORDS)
baseline_path = Path("aio_baseline.json")
if baseline_path.exists():
yesterday = json.loads(baseline_path.read_text())
for t in today:
prev = next((y for y in yesterday if y["keyword"] == t["keyword"]), None)
if prev and not prev.get("competitor_cited") and t["competitor_cited"]:
print(f"ALERT: {t['keyword']} - new competitor citation: {t['competitor_cited']}")
baseline_path.write_text(json.dumps(today, indent=2))
print(json.dumps(today, indent=2))Implementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
const MY_DOMAIN = "yourdomain.com";
const COMPETITORS = ["competitor1.com", "competitor2.com"];
async function checkCitations(keywords) {
const results = [];
for (const kw of keywords) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: kw, ai_overview: true})
}).then(r => r.json());
const aio = r.ai_overview;
const cited = aio ? (aio.sources || []).map(s => s.link || "") : [];
results.push({
keyword: kw, date: new Date().toISOString().slice(0, 10),
hasAio: !!aio,
myCited: cited.some(u => u.includes(MY_DOMAIN)),
competitorCited: COMPETITORS.filter(c => cited.some(u => u.includes(c))),
allCited: cited
});
}
return results;
}Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA