Realice un seguimiento de los cambios diarios en las descripciones generales de IA de Google consultando las palabras clave objetivo a través de una API de búsqueda y comparando la respuesta con la instantánea del día anterior. Este enfoque muestra nuevas citas, fuentes eliminadas y resúmenes reescritos sin verificación SERP manual. La API de Scavio devuelve datos estructurados de descripción general de la IA, incluidas las URL de origen y el texto resumido, lo que simplifica la diferenciación automatizada. Este tutorial crea un script compatible con cron que almacena instantáneas diarias e informa deltas.
Requisitos previos
- Python 3.8+ o Node.js 18+ instalado
- solicita biblioteca (Python) o recuperación integrada (JS)
- Una clave API de Scavio de scavio.dev
- Una lista de palabras clave objetivo para monitorear
Guia paso a paso
Paso 1: Definir palabras clave y almacenamiento
Configure la lista de palabras clave y un directorio para instantáneas diarias.
import os, json, datetime
API_KEY = os.environ['SCAVIO_API_KEY']
KEYWORDS = ['best crm for startups', 'ai search api comparison', 'mcp server tutorial']
SNAPSHOT_DIR = 'aio_snapshots'
os.makedirs(SNAPSHOT_DIR, exist_ok=True)
TODAY = datetime.date.today().isoformat()Paso 2: Obtener descripción general de IA para cada palabra clave
Consulte la API de Scavio y extraiga la sección Descripción general de AI, incluidas las fuentes y el texto resumido.
import requests
def fetch_ai_overview(keyword: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': keyword}, timeout=15)
resp.raise_for_status()
data = resp.json()
aio = data.get('ai_overview', {})
return {
'keyword': keyword,
'summary': aio.get('text', ''),
'sources': [s.get('link', '') for s in aio.get('sources', [])],
}Paso 3: Diferencia con la instantánea de ayer
Cargue la instantánea del día anterior y calcule las fuentes agregadas/eliminadas y si el texto del resumen cambió.
def diff_snapshots(today_data: dict, yesterday_data: dict) -> dict:
old_sources = set(yesterday_data.get('sources', []))
new_sources = set(today_data.get('sources', []))
return {
'keyword': today_data['keyword'],
'added_sources': list(new_sources - old_sources),
'removed_sources': list(old_sources - new_sources),
'summary_changed': today_data.get('summary', '') != yesterday_data.get('summary', ''),
}
def load_yesterday(keyword: str) -> dict:
yesterday = (datetime.date.today() - datetime.timedelta(days=1)).isoformat()
path = os.path.join(SNAPSHOT_DIR, f'{keyword}_{yesterday}.json')
if os.path.exists(path):
with open(path) as f: return json.load(f)
return {}Paso 4: Ejecute diariamente y guarde los resultados
Itere todas las palabras clave, obtenga datos actuales, compare con los de ayer, guarde la instantánea de hoy e imprima un informe de cambios.
def run_daily():
changes = []
for kw in KEYWORDS:
current = fetch_ai_overview(kw)
previous = load_yesterday(kw)
path = os.path.join(SNAPSHOT_DIR, f'{kw}_{TODAY}.json')
with open(path, 'w') as f: json.dump(current, f, indent=2)
if previous:
delta = diff_snapshots(current, previous)
if delta['added_sources'] or delta['removed_sources'] or delta['summary_changed']:
changes.append(delta)
for c in changes:
print(f"[{c['keyword']}] +{len(c['added_sources'])} -{len(c['removed_sources'])} sources, summary_changed={c['summary_changed']}")
return changes
run_daily()Ejemplo en Python
import requests, os, json, datetime
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
TODAY = datetime.date.today().isoformat()
def fetch_aio(kw):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': kw}, timeout=15).json()
aio = data.get('ai_overview', {})
return {'summary': aio.get('text', ''), 'sources': [s.get('link', '') for s in aio.get('sources', [])]}
def track(keywords):
for kw in keywords:
snapshot = fetch_aio(kw)
print(f'{kw}: {len(snapshot["sources"])} sources')
track(['best crm 2026', 'ai search api comparison'])Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function fetchAIO(kw) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H, body: JSON.stringify({platform: 'google', query: kw})
});
const data = await r.json();
const aio = data.ai_overview || {};
return {summary: aio.text || '', sources: (aio.sources || []).map(s => s.link)};
}
async function track(keywords) {
for (const kw of keywords) {
const snap = await fetchAIO(kw);
console.log(`${kw}: ${snap.sources.length} sources`);
}
}
track(['best crm 2026', 'ai search api comparison']);Salida esperada
A daily change report showing which AI Overview sources were added or removed, and whether the summary text changed, for each tracked keyword.