Chaque semaine, les fondateurs posent la même question sur Reddit : « comment savoir si mon SaaS apparaît dans les résultats de recherche IA ? » Ce tutoriel associe Scavio à un script d’étude de prompts hebdomadaire pour créer un moniteur AEO auto-hébergé qui coûte 30 $/mois au total.
Prérequis
- Python 3.10+
- Clé API Scavio
- Clé API Anthropic pour les études de prompts Claude
- DuckDB
Parcours
Étape 1: Définir un ensemble de mots-clés de marque
10 à 30 requêtes de marque et de catégorie en YAML.
# keywords.yaml
brand: scavio
keywords:
- scavio review
- best ai search api 2026
- tavily alternativeÉtape 2: SERP quotidien + Aperçus IA
Un appel Scavio par mot-clé.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def snap(q):
r = requests.post('https://api.scavio.dev/api/v1/google',
headers={'x-api-key': API_KEY},
json={'query': q, 'include_ai_overview': True})
return r.json()Étape 3: Mentions de la marque sur Reddit
Analyse quotidienne de Reddit pour le mot-clé de la marque.
def reddit(brand):
r = requests.post('https://api.scavio.dev/api/v1/reddit/search',
headers={'x-api-key': API_KEY},
json={'query': brand})
return r.json().get('posts', [])Étape 4: Étude hebdomadaire des prompts ChatGPT
Exécuter le même ensemble de prompts sur ChatGPT.
import openai
client = openai.OpenAI()
def chatgpt_says(prompt):
r = client.chat.completions.create(model='gpt-5', messages=[{'role':'user','content':prompt}])
return r.choices[0].message.contentÉtape 5: Stocker les différences
Ligne DuckDB par (mot-clé, surface, url, date).
import duckdb
db = duckdb.connect('aeo.duckdb')
db.execute('CREATE TABLE IF NOT EXISTS aeo(brand TEXT, surface TEXT, url TEXT, date DATE)')Exemple Python
import os, requests, datetime
API_KEY = os.environ['SCAVIO_API_KEY']
def snapshot(brand, keyword):
serp = requests.post('https://api.scavio.dev/api/v1/google',
headers={'x-api-key': API_KEY},
json={'query': keyword, 'include_ai_overview': True}).json()
rdt = requests.post('https://api.scavio.dev/api/v1/reddit/search',
headers={'x-api-key': API_KEY},
json={'query': brand}).json()
return {'date': str(datetime.date.today()), 'ao': serp.get('ai_overview'), 'reddit': rdt.get('posts',[])[:5]}
print(snapshot('scavio', 'best ai search api 2026'))Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
export async function snapshot(brand, keyword) {
const headers = { 'x-api-key': API_KEY, 'Content-Type': 'application/json' };
const [serp, rdt] = await Promise.all([
fetch('https://api.scavio.dev/api/v1/google', { method:'POST', headers, body: JSON.stringify({ query: keyword, include_ai_overview: true }) }).then(r => r.json()),
fetch('https://api.scavio.dev/api/v1/reddit/search', { method:'POST', headers, body: JSON.stringify({ query: brand }) }).then(r => r.json())
]);
return { serp, rdt };
}Sortie attendue
Daily snapshot per keyword across SERP, AI Overviews, and Reddit. Weekly ChatGPT prompt study runs against the same set. DuckDB stores deltas; weekly digest emails new and lost citations.