Resumen
Este flujo de trabajo ejecuta cada Monday to scan palabras clave objetivo for AI Overview citaciones, seguimiento si your dominio y competidor dominios son cited in Google's respuestas generadas por IA. It almacena semanal snapshots, computes week-over-week citacion cambios, y flags nuevo citacion wins y losses. El salida feeds en GEO estrategia meetings con concrete datos on cual contenido actualiza improved citacion rates.
Desencadenador
Cron programar (cada Monday at 6:00 AM UTC)
Programación
Ejecuta cada Monday at 6:00 AM UTC
Pasos del flujo de trabajo
Cargar palabra clave y dominio listas
Leer palabras clave objetivo y tracked dominios (yours + competidores) de configuracion.
Consulta palabras clave con AI Overview
Search Scavio Google con ai_overview enabled for cada palabra clave to obtener actual citacion datos.
Extraer citacion fuentes
Analizar AI Overview citaciones y verificar cual tracked dominios appear in cada.
Comparar contra anterior semana
Cargar last week's snapshot y compute citacion wins, losses, y unchanged positions.
Generar semanal GEO informe
Salida un structured informe con citacion rates, tendencias, y actionable recommendations.
Implementacion en Python
import requests
import json
from datetime import datetime
from pathlib import Path
API_KEY = "your_scavio_api_key"
def scan_citations(keywords: list[str], domains: list[str]) -> dict:
results = []
for kw in keywords:
res = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"platform": "google", "query": kw, "ai_overview": True},
timeout=15,
)
res.raise_for_status()
data = res.json()
ai = data.get("ai_overview")
citations = [c.get("source", "") for c in (ai or {}).get("citations", [])]
domain_status = {}
for domain in domains:
domain_status[domain] = any(domain in c for c in citations)
results.append({"keyword": kw, "has_ai_overview": bool(ai), "citations": domain_status})
return results
def run():
date = datetime.utcnow().strftime("%Y-%m-%d")
keywords = ["best search api", "serp api pricing", "web scraping api", "ai search tool"]
domains = ["scavio.dev", "serpapi.com", "tavily.com"]
results = scan_citations(keywords, domains)
for domain in domains:
cited = sum(1 for r in results if r["citations"].get(domain))
print(f" {domain}: {cited}/{len(keywords)} citations ({cited/len(keywords)*100:.0f}%)")
snapshot = {"date": date, "keywords_scanned": len(keywords), "domains": domains, "results": results}
Path(f"geo_scan_{date}.json").write_text(json.dumps(snapshot, indent=2))
print(f"GEO scan {date}: {len(keywords)} keywords, {len(domains)} domains tracked")
if __name__ == "__main__":
run()Implementacion en JavaScript
const API_KEY = "your_scavio_api_key";
async function scanCitations(keywords, domains) {
const results = [];
for (const kw of keywords) {
const res = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": API_KEY, "content-type": "application/json" },
body: JSON.stringify({ platform: "google", query: kw, ai_overview: true }),
});
const data = await res.json();
const citations = (data.ai_overview?.citations ?? []).map((c) => c.source ?? "");
const status = {};
for (const d of domains) status[d] = citations.some((c) => c.includes(d));
results.push({ keyword: kw, citations: status });
}
return results;
}
const results = await scanCitations(["best search api", "serp api pricing"], ["scavio.dev", "serpapi.com"]);
for (const r of results) console.log(`${r.keyword}: ${JSON.stringify(r.citations)}`);Plataformas utilizadas
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA