Perplexity retourne des citations avec chaque réponse, ce qui en fait le moteur d'IA le plus facile à benchmarker. Ce tutoriel construit un traqueur de citations par source qui classe votre domaine face aux concurrents sur un panel de requêtes, avec une évolution semaine après semaine.
Prérequis
- Python 3.10+
- Une clé API Scavio
- SQLite
- Un panel de requêtes concurrentielles
Parcours
Étape 1: Définir le panel de requêtes
30 à 100 requêtes que vos acheteurs posent à Perplexity.
QUERIES = [
'best serp api',
'cheapest google search api',
'tavily alternative 2026'
]Étape 2: Exécuter les requêtes via Scavio Perplexity
Plateforme : perplexity renvoie une réponse ainsi que des sources structurées.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def ask_perplexity(query):
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'perplexity', 'query': query})
return r.json()Étape 3: Agréger par domaine
Compter les occurrences de citations par domaine sur l'ensemble des requêtes.
from urllib.parse import urlparse
from collections import Counter
def domain_counts(all_responses):
c = Counter()
for resp in all_responses:
for src in resp.get('sources', []):
c[urlparse(src['url']).netloc] += 1
return cÉtape 4: Comparer à la semaine dernière
Stocker les instantanés et calculer le delta.
import sqlite3, json
conn = sqlite3.connect('pplx.db')
conn.execute('CREATE TABLE IF NOT EXISTS snaps (date TEXT, counts TEXT)')
def snapshot(counts):
conn.execute('INSERT INTO snaps VALUES (date(\'now\'), ?)', (json.dumps(counts),))
conn.commit()Étape 5: Alerter sur les gains des concurrents
Notification Slack lorsqu'un concurrent voit son nombre augmenter de 25 % ou plus d'une semaine à l'autre.
def alert(prev, now, threshold=0.25):
for d, n in now.items():
p = prev.get(d, 1)
if (n - p) / p > threshold:
print(f'Competitor {d} grew {(n-p)/p:.0%}')Exemple Python
import os, requests
from urllib.parse import urlparse
from collections import Counter
API_KEY = os.environ['SCAVIO_API_KEY']
QUERIES = ['best serp api', 'cheapest google search api']
counts = Counter()
for q in QUERIES:
r = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'perplexity', 'query': q})
for s in r.json().get('sources', []):
counts[urlparse(s['url']).netloc] += 1
print(counts.most_common(10))Exemple JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
const QUERIES = ['best serp api', 'cheapest google search api'];
const counts = {};
for (const q of QUERIES) {
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: 'perplexity', query: q })
});
const data = await r.json();
for (const s of data.sources || []) {
const d = new URL(s.url).hostname;
counts[d] = (counts[d] || 0) + 1;
}
}
console.log(Object.entries(counts).sort((a,b) => b[1]-a[1]).slice(0,10));Sortie attendue
Per-domain citation counter ranked top 10. Week-over-week delta highlights competitor gains. Typical signal: competitor jumps from 3 to 12 citations week-over-week triggers content response.