Les citations ChatGPT sont les nouveaux classements organiques. Si votre domaine n'est pas dans les 3 à 5 URLs que ChatGPT cite pour une requête, vous êtes invisible. Ce tutoriel met en place un suivi quotidien des citations qui exécute vos prompts cibles, extrait les URLs citées et enregistre la part de citation par domaine dans le temps.
Prérequis
- Python 3.10+
- Une clé API Scavio
- SQLite ou Postgres pour les logs
- Une liste de 10 à 50 prompts cibles
Parcours
Étape 1: Définir les prompts cibles
Prompts que vos acheteurs sont susceptibles de poser à ChatGPT.
PROMPTS = [
'best SERP API for AI agents 2026',
'how to replace SerpAPI',
'cheapest google search api'
]Étape 2: Interroger l'endpoint Scavio ChatGPT
Scavio transmet les prompts à ChatGPT et renvoie la réponse avec des citations structurées.
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()Étape 3: Extraire les citations
Scavio renvoie un tableau de citations avec url et titre par source.
def extract_citations(response):
return [c['url'] for c in response.get('citations', [])]Étape 4: Journaliser dans la base de données
Une ligne par prompt par jour par citation.
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()Étape 5: Calculer la part de citation
Pourcentage de prompts où votre domaine apparaît.
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 0Exemple 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')Exemple 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));
}Sortie attendue
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.