ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo realizar un seguimiento de las citas de IA y los cambios de contenido
Tutorial

Cómo realizar un seguimiento de las citas de IA y los cambios de contenido

Supervise cuándo cambian las citas de AI Overview para sus URL. Detecte competidores que ganan o pierden citas con sondeo API de búsqueda programada y lógica de diferencias.

Obtener clave API gratisDocumentacion API

El seguimiento de los cambios en las citas de la descripción general de IA le permite detectar el momento en que sus URL ganan o pierden ubicación en las respuestas generadas por IA de Google. A medida que AI Overviews remodela la distribución de clics, saber qué dominios aparecen en las citas (y cuándo cambia esa lista) es una señal directa para la estrategia de contenido. La API de búsqueda de Scavio devuelve datos estructurados de descripción general de la IA, incluidas las URL citadas, para que pueda sondear las consultas según una programación, diferenciar las listas de citas y activar alertas cuando los competidores ingresan o sus páginas caen. Este tutorial crea un script de Python que almacena instantáneas de citas en JSON e informa los cambios entre ejecuciones.

Requisitos previos

  • Python 3.8 o superior instalado
  • solicita biblioteca instalada (solicitudes de instalación de pip)
  • Una clave API de Scavio de scavio.dev
  • Familiaridad básica con la E/S de archivos JSON en Python

Guia paso a paso

Paso 1: Definir consultas y URL de destino para monitorear

Cree un dictado de configuración que asigne consultas de destino a las URL que le interesan. El script comprobará si estas URL aparecen en las citas de la descripción general de AI para cada consulta.

Python
MONITOR_CONFIG = {
    "best crm for startups": {
        "my_urls": ["https://mysite.com/crm-guide"],
        "watch_competitors": True
    },
    "how to automate lead scoring": {
        "my_urls": ["https://mysite.com/lead-scoring"],
        "watch_competitors": True
    }
}

Paso 2: Obtenga citas de descripción general de IA de Scavio

PUBLICAR en el punto final de búsqueda de Scavio para cada consulta. La respuesta incluye un objeto ai_overview con una matriz de citas que contiene las URL a las que se hace referencia en la respuesta generada por IA.

Python
import requests
import os

API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_scavio_api_key')

def fetch_citations(query: str) -> list[str]:
    response = requests.post(
        'https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY},
        json={'query': query, 'country_code': 'us'}
    )
    response.raise_for_status()
    data = response.json()
    ai_overview = data.get('ai_overview', {})
    citations = ai_overview.get('citations', [])
    return [c.get('url', '') for c in citations]

Paso 3: Cargue la instantánea anterior y calcule la diferencia

Lea la última instantánea guardada del disco y compárela con la lista de citas nueva. Identifique qué URL se agregaron y cuáles se eliminaron desde la última verificación.

Python
import json
from pathlib import Path

SNAPSHOT_FILE = Path('citation_snapshots.json')

def load_snapshot() -> dict:
    if SNAPSHOT_FILE.exists():
        return json.loads(SNAPSHOT_FILE.read_text())
    return {}

def diff_citations(old: list[str], new: list[str]) -> dict:
    old_set, new_set = set(old), set(new)
    return {
        'added': list(new_set - old_set),
        'removed': list(old_set - new_set),
        'unchanged': list(old_set & new_set)
    }

Paso 4: Ejecute el bucle del monitor y guarde la instantánea actualizada

Repita todas las consultas monitoreadas, obtenga citas actuales, compare con la instantánea anterior e imprima alertas para cualquier cambio. Guarde la nueva instantánea en el disco para la siguiente ejecución.

Python
from datetime import datetime

def run_monitor():
    snapshot = load_snapshot()
    new_snapshot = {}
    for query, config in MONITOR_CONFIG.items():
        current = fetch_citations(query)
        new_snapshot[query] = current
        previous = snapshot.get(query, [])
        changes = diff_citations(previous, current)
        if changes['added'] or changes['removed']:
            print(f'[{datetime.now().isoformat()}] Changes for: {query}')
            for url in changes['added']:
                label = 'MY URL' if url in config['my_urls'] else 'COMPETITOR'
                print(f'  + ADDED ({label}): {url}')
            for url in changes['removed']:
                label = 'MY URL' if url in config['my_urls'] else 'COMPETITOR'
                print(f'  - REMOVED ({label}): {url}')
    SNAPSHOT_FILE.write_text(json.dumps(new_snapshot, indent=2))
    print(f'Snapshot saved with {len(new_snapshot)} queries')

Ejemplo en Python

Python
import os
import json
import requests
from pathlib import Path
from datetime import datetime

API_KEY = os.environ.get('SCAVIO_API_KEY', 'your_scavio_api_key')
ENDPOINT = 'https://api.scavio.dev/api/v1/search'
SNAPSHOT_FILE = Path('citation_snapshots.json')

MONITOR_CONFIG = {
    'best crm for startups': {
        'my_urls': ['https://mysite.com/crm-guide'],
        'watch_competitors': True
    },
    'how to automate lead scoring': {
        'my_urls': ['https://mysite.com/lead-scoring'],
        'watch_competitors': True
    }
}

def fetch_citations(query: str) -> list[str]:
    response = requests.post(
        ENDPOINT,
        headers={'x-api-key': API_KEY},
        json={'query': query, 'country_code': 'us'}
    )
    response.raise_for_status()
    data = response.json()
    ai_overview = data.get('ai_overview', {})
    return [c.get('url', '') for c in ai_overview.get('citations', [])]

def load_snapshot() -> dict:
    if SNAPSHOT_FILE.exists():
        return json.loads(SNAPSHOT_FILE.read_text())
    return {}

def diff_citations(old: list[str], new: list[str]) -> dict:
    old_set, new_set = set(old), set(new)
    return {'added': list(new_set - old_set), 'removed': list(old_set - new_set)}

def run_monitor():
    snapshot = load_snapshot()
    new_snapshot = {}
    for query, config in MONITOR_CONFIG.items():
        current = fetch_citations(query)
        new_snapshot[query] = current
        previous = snapshot.get(query, [])
        changes = diff_citations(previous, current)
        if changes['added'] or changes['removed']:
            print(f'[{datetime.now().isoformat()}] Changes for: {query}')
            for url in changes['added']:
                label = 'MY URL' if url in config['my_urls'] else 'COMPETITOR'
                print(f'  + ADDED ({label}): {url}')
            for url in changes['removed']:
                label = 'MY URL' if url in config['my_urls'] else 'COMPETITOR'
                print(f'  - REMOVED ({label}): {url}')
    SNAPSHOT_FILE.write_text(json.dumps(new_snapshot, indent=2))
    print(f'Snapshot saved with {len(new_snapshot)} queries')

if __name__ == '__main__':
    run_monitor()

Ejemplo en JavaScript

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY || 'your_scavio_api_key';
const ENDPOINT = 'https://api.scavio.dev/api/v1/search';
const fs = require('fs');
const SNAPSHOT_FILE = 'citation_snapshots.json';

const MONITOR_CONFIG = {
  'best crm for startups': {
    myUrls: ['https://mysite.com/crm-guide'],
    watchCompetitors: true
  },
  'how to automate lead scoring': {
    myUrls: ['https://mysite.com/lead-scoring'],
    watchCompetitors: true
  }
};

async function fetchCitations(query) {
  const response = await fetch(ENDPOINT, {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query, country_code: 'us' })
  });
  if (!response.ok) throw new Error('HTTP ' + response.status);
  const data = await response.json();
  const aiOverview = data.ai_overview || {};
  return (aiOverview.citations || []).map(c => c.url || '');
}

function loadSnapshot() {
  if (fs.existsSync(SNAPSHOT_FILE)) {
    return JSON.parse(fs.readFileSync(SNAPSHOT_FILE, 'utf-8'));
  }
  return {};
}

function diffCitations(oldList, newList) {
  const oldSet = new Set(oldList);
  const newSet = new Set(newList);
  return {
    added: [...newSet].filter(u => !oldSet.has(u)),
    removed: [...oldSet].filter(u => !newSet.has(u))
  };
}

async function main() {
  const snapshot = loadSnapshot();
  const newSnapshot = {};
  for (const [query, config] of Object.entries(MONITOR_CONFIG)) {
    const current = await fetchCitations(query);
    newSnapshot[query] = current;
    const previous = snapshot[query] || [];
    const changes = diffCitations(previous, current);
    if (changes.added.length || changes.removed.length) {
      console.log('[' + new Date().toISOString() + '] Changes for: ' + query);
      changes.added.forEach(url => {
        const label = config.myUrls.includes(url) ? 'MY URL' : 'COMPETITOR';
        console.log('  + ADDED (' + label + '): ' + url);
      });
      changes.removed.forEach(url => {
        const label = config.myUrls.includes(url) ? 'MY URL' : 'COMPETITOR';
        console.log('  - REMOVED (' + label + '): ' + url);
      });
    }
  }
  fs.writeFileSync(SNAPSHOT_FILE, JSON.stringify(newSnapshot, null, 2));
  console.log('Snapshot saved with ' + Object.keys(newSnapshot).length + ' queries');
}

main().catch(console.error);

Salida esperada

JSON
{
  "search_metadata": { "query": "best crm for startups", "country_code": "us" },
  "ai_overview": {
    "text": "The best CRM for startups depends on team size and budget...",
    "citations": [
      { "url": "https://mysite.com/crm-guide", "title": "Top CRM Tools for Startups" },
      { "url": "https://competitor.com/crm-review", "title": "CRM Comparison 2026" }
    ]
  }
}

Tutoriales relacionados

  • Cómo monitorear las citas de descripción general de IA a través de API
  • Cómo crear una canalización de generación de leads con la API de búsqueda
  • Cómo crear un panel de operaciones con datos de búsqueda

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Python 3.8 o superior instalado. solicita biblioteca instalada (solicitudes de instalación de pip). Una clave API de Scavio de scavio.dev. Familiaridad básica con la E/S de archivos JSON en Python. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores herramientas de SEO después de Google I/O 2026

Read more
Best Of

Las mejores API de datos comerciales de Google Maps (mayo de 2026)

Read more
Solution

Cree una capa API de SEO de costo predecible

Read more
Glossary

Costo de la API de Google Maps Places

Read more
Comparison

Google Places API vs SERP Local Pack API

Read more
Glossary

Panorama de proveedores de API de búsqueda (2026)

Read more

Empieza a construir

Supervise cuándo cambian las citas de AI Overview para sus URL. Detecte competidores que ganan o pierden citas con sondeo API de búsqueda programada y lógica de diferencias.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad