Las citas de ChatGPT son las nuevas clasificaciones orgánicas. Si su dominio no está entre 3 y 5 URL que ChatGPT cita para recibir un aviso, es invisible. Este tutorial configura un rastreador de citas diario que ejecuta mensajes de destino, extrae las URL citadas y registra el porcentaje de citas por dominio a lo largo del tiempo.
Requisitos previos
- Python 3.10+
- Una clave API de Scavio
- SQLite o Postgres para registros
- Una lista de entre 10 y 50 indicaciones de objetivos
Guia paso a paso
Paso 1: Definir indicaciones de destino
Indica que es probable que sus compradores le pregunten a ChatGPT.
PROMPTS = [
'best SERP API for AI agents 2026',
'how to replace SerpAPI',
'cheapest google search api'
]Paso 2: Consultar el punto final Scavio ChatGPT
Scavio reenvía mensajes a ChatGPT y devuelve la respuesta con citas estructuradas.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def ask(prompt):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'chatgpt', 'query': prompt})
return r.json()Paso 3: Extraer citas
Scavio devuelve una matriz de citas con URL y título por fuente.
def extract_citations(response):
return [c['url'] for c in response.get('citations', [])]Paso 4: Iniciar sesión en la base de datos
Una fila por mensaje por día por cita.
import sqlite3
conn = sqlite3.connect('citations.db')
conn.execute('CREATE TABLE IF NOT EXISTS citations (date TEXT, prompt TEXT, url TEXT)')
def log_citations(prompt, urls):
for u in urls:
conn.execute('INSERT INTO citations VALUES (date(\'now\'), ?, ?)', (prompt, u))
conn.commit()Paso 5: Calcular el porcentaje de citas
Porcentaje de mensajes donde aparece su dominio.
def share_of_citation(domain):
total = conn.execute('SELECT COUNT(DISTINCT prompt) FROM citations').fetchone()[0]
hits = conn.execute('SELECT COUNT(DISTINCT prompt) FROM citations WHERE url LIKE ?', (f'%{domain}%',)).fetchone()[0]
return hits / total if total else 0Ejemplo en Python
import os, requests, sqlite3
API_KEY = os.environ['SCAVIO_API_KEY']
PROMPTS = ['best SERP API for AI agents 2026', 'how to replace SerpAPI']
conn = sqlite3.connect('citations.db')
conn.execute('CREATE TABLE IF NOT EXISTS citations (date TEXT, prompt TEXT, url TEXT)')
for p in PROMPTS:
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'chatgpt', 'query': p})
for c in r.json().get('citations', []):
conn.execute('INSERT INTO citations VALUES (date(\'now\'), ?, ?)', (p, c['url']))
conn.commit()
print('logged')Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const PROMPTS = ['best SERP API for AI agents 2026', 'how to replace SerpAPI'];
for (const p of PROMPTS) {
const r = 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: 'chatgpt', query: p })
});
const data = await r.json();
console.log(p, data.citations?.map(c => c.url));
}Salida esperada
Per-prompt citation list. Share-of-citation for your domain across 30 prompts, trended daily. Example: scavio.dev cited in 12/30 prompts = 40% share-of-citation.