5.0 ★★★★★
25 avis Google

Comment créer son propre tracker GEO avec un script Python gratuit

Créez votre propre tracker GEO avec un script Python gratuit : interrogez ChatGPT ou Claude sur vos requêtes cibles, détectez automatiquement vos citations et suivez vos résultats dans un CSV.
victor-viennot-signature

Victor Viennot

Consultant en stratégie digitale et créateur d’outils marketing propulsés par l’IA.
J’aide les entreprises à gagner en visibilité et à communiquer plus efficacement.

background-article-blog (12)

Réponse courte :

Un tracker GEO Python interroge l’API OpenAI ou Claude sur vos requêtes cibles, détecte si votre domaine est cité dans les réponses et consigne les résultats dans un fichier CSV. Coût estimé : moins de 2 € par mois. Idéal pour les PME et cabinets qui veulent mesurer leur visibilité sur les IA génératives sans abonnement SaaS.

SOMMAIRE

Vous publiez du contenu, vous optimisez vos pages, et pourtant vous ne savez pas si ChatGPT, Claude ou Perplexity citent votre site lorsqu’un prospect pose une question dans votre secteur. Le GEO (Generative Engine Optimization) est encore largement aveugle pour la plupart des PME françaises : aucun outil gratuit ne surveille automatiquement votre visibilité dans les réponses des IA. La bonne nouvelle ? Un script Python de quelques dizaines de lignes suffit à construire votre propre tracker GEO, sans abonnement, sans dépendance à un SaaS.

En résumé : Ce tutoriel vous guide pas à pas pour créer un script Python qui interroge l’API OpenAI ou Claude sur une liste de requêtes cibles, détecte automatiquement si votre domaine est cité dans les réponses, et consigne tout dans un fichier CSV exploitable. Durée estimée : 45 minutes. Prérequis : Python 3.10+, une clé API, et un éditeur de code.

Étape 1 — Préparer votre environnement Python

Avant d’écrire une seule ligne de code, installez les dépendances nécessaires. Ouvrez votre terminal et exécutez :

pip install openai anthropic pandas python-dotenv

Créez ensuite un fichier .env à la racine de votre projet pour stocker vos clés API de façon sécurisée :

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxxxxx

Ne commitez jamais ce fichier sur GitHub. Ajoutez .env à votre .gitignore. Cette précaution évite une fuite de clé qui pourrait générer des coûts non maîtrisés sur votre compte.

Étape 2 — Constituer votre liste de requêtes GEO

Le cœur de votre tracker, c’est la liste des questions que vos prospects posent réellement aux IA génératives. Créez un fichier queries.csv avec deux colonnes : requete et secteur.

Exemples concrets selon votre secteur :

  • Organisme de formation : « Quelle est la meilleure formation Qualiopi en management à Bordeaux ? », « Comment choisir un organisme de formation certifié RNCP ? »
  • Cabinet d’avocats : « Quel avocat spécialisé en droit du travail contacter à Bordeaux ? », « Comment se défendre face à un licenciement abusif ? »
  • PME locale : « Quelle agence web SEO accompagne les PME à Bordeaux ? », « Comment améliorer le référencement d’une TPE en 2025 ? »

Visez entre 20 et 50 requêtes pour un premier cycle de tracking. Au-delà, le coût API devient non négligeable. Pour un cabinet juridique ou un cabinet d’avocats souhaitant améliorer sa visibilité sur les IA, 30 requêtes couvrent déjà les principaux axes de pratique.

Étape 3 — Écrire le script de tracking

Voici le script complet, commenté ligne par ligne :


import os
import csv
import datetime
import pandas as pd
from openai import OpenAI
from dotenv import load_dotenv

# Chargement des variables d'environnement
load_dotenv()
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# Paramètres à personnaliser
DOMAIN = "votredomaine.fr" # Votre domaine à surveiller
MODEL = "gpt-4o" # Modèle utilisé
QUERIES_FILE = "queries.csv"
OUTPUT_FILE = "geo_results.csv"

def check_citation(response_text, domain):
"""Vérifie si le domaine est cité dans la réponse."""
return domain.lower() in response_text.lower()

def query_llm(question):
"""Interroge le LLM et retourne la réponse textuelle."""
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Tu es un assistant qui répond à des questions factuelles."},
{"role": "user", "content": question}
],
max_tokens=500,
temperature=0.3 # Basse température pour des réponses stables
)
return response.choices[0].message.content

def run_tracker():
"""Fonction principale du tracker GEO."""
queries_df = pd.read_csv(QUERIES_FILE)
results = []

for _, row in queries_df.iterrows():
question = row["requete"]
secteur = row.get("secteur", "Non défini")

print(f"Interrogation : {question[:60]}...")

response_text = query_llm(question)
cited = check_citation(response_text, DOMAIN)

results.append({
"date": datetime.datetime.now().strftime("%Y-%m-%d"),
"requete": question,
"secteur": secteur,
"cite": "OUI" if cited else "NON",
"extrait_reponse": response_text[:300]
})

results_df = pd.DataFrame(results)
results_df.to_csv(OUTPUT_FILE, index=False, encoding="utf-8-sig")

taux = results_df[results_df["cite"] == "OUI"].shape[0] / len(results_df) * 100
print(f"nTaux de citation : {taux:.1f}% ({results_df[results_df['cite'] == 'OUI'].shape[0]}/{len(results_df)} requêtes)")
print(f"Résultats sauvegardés dans {OUTPUT_FILE}")

if __name__ == "__main__":
run_tracker()

La variable temperature=0.3 est délibérément basse : elle réduit la variabilité des réponses entre deux exécutions, ce qui rend votre suivi dans le temps plus fiable.

Étape 4 — Adapter le script à l’API Claude (Anthropic)

Si vous souhaitez tracker votre visibilité sur Claude plutôt que sur ChatGPT, remplacez la fonction query_llm par cette version :


import anthropic

client_claude = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))

def query_llm_claude(question):
"""Version Claude du tracker GEO."""
message = client_claude.messages.create(
model="claude-opus-4-5",
max_tokens=500,
messages=[{"role": "user", "content": question}]
)
return message.content[0].text

Pour une couverture complète, faites tourner les deux versions en parallèle et comparez les taux de citation selon le modèle. Un office notarial cherchant à apparaître dans les réponses IA sur des requêtes comme « notaire spécialisé en succession à Bordeaux » gagnera à surveiller au moins deux modèles différents.

Étape 5 — Automatiser l’exécution hebdomadaire

Un tracker manuel n’a que peu de valeur. L’intérêt réside dans le suivi dans le temps. Sous Linux/macOS, ajoutez une tâche cron pour exécuter le script chaque lundi matin :

0 8 * * 1 cd /chemin/vers/votre/projet && python geo_tracker.py >> logs/geo_tracker.log 2>&1

Sous Windows, utilisez le Planificateur de tâches. Chaque exécution génère une nouvelle ligne dans votre CSV avec la date du jour. En quelques semaines, vous disposez d’une courbe de progression de votre taux de citation GEO.

Pour aller plus loin, vous pouvez connecter le CSV à Google Sheets via l’API Google Sheets, ou importer les données dans Looker Studio pour une visualisation automatique.

Étape 6 — Interpréter les résultats et agir

Le CSV brut ne suffit pas. Voici comment lire vos données :

  • Taux de citation global sous 5% : Votre contenu n’est pas encore assimilé par les LLM. Priorité à la création de contenu factuel, structuré, avec des données vérifiables.
  • Taux entre 5% et 20% : Vous apparaissez sur quelques requêtes. Identifiez lesquelles et renforcez ces pages.
  • Taux au-dessus de 20% : Votre autorité thématique est reconnue. Travaillez l’extension vers des requêtes adjacentes.

Pour un organisme de formation, les requêtes autour des certifications (Qualiopi, RNCP, CPF) sont souvent les plus compétitives dans les réponses IA. Si vous travaillez sur la visibilité digitale d’un organisme de formation, notre approche du référencement SEO pour organismes de formation intègre désormais cette dimension GEO.

Exemples sectoriels concrets

Cabinet d’avocats : Un cabinet spécialisé en droit des affaires à Bordeaux a testé 25 requêtes sur ChatGPT. Résultat initial : 0 citation. Après 3 mois de production de contenu structuré (pages pratique, FAQ juridiques, articles de fond), le taux est passé à 12%. Les requêtes citées étaient systématiquement celles où le cabinet disposait d’une page dédiée avec des données factuelles précises.

Organisme de formation : Un OF spécialisé en management a lancé le tracker sur 40 requêtes. Il a découvert que Claude citait son catalogue sur 3 requêtes, mais que GPT-4o ne le mentionnait jamais. L’analyse a révélé que ses fiches formation manquaient de données chiffrées (durée, taux de satisfaction, coût moyen) que les LLM privilégient dans leurs réponses. Si vous gérez un site de formation sous WordPress, la structuration du contenu est directement liée à votre présence en ligne en tant qu’organisme de formation.

Résultats attendus selon le profil

Profil Taux initial moyen Taux après 3 mois Levier principal
PME locale sans blog 0–2% 5–10% Création de contenu factuel
Organisme de formation 2–8% 10–20% Structuration des fiches formation
Cabinet d’avocats 0–5% 8–18% Pages pratique + FAQ juridiques
Agence / prestataire B2B 3–10% 15–25% Études de cas + données chiffrées

Ces fourchettes sont indicatives et basées sur des observations terrain. Elles varient fortement selon la concurrence sectorielle et la qualité du contenu existant.

FAQ — Tracker GEO Python

Combien coûte l’utilisation de l’API OpenAI pour ce tracker ?

Avec GPT-4o, comptez environ 0,005 $ par requête (500 tokens en sortie). Pour 50 requêtes hebdomadaires, le coût est inférieur à 1,50 € par mois. Sur Claude Opus, le tarif est légèrement supérieur. Dans tous les cas, le coût reste marginal comparé à un abonnement SaaS GEO, qui démarre généralement autour de 99 $/mois pour les outils spécialisés comme Profound ou Otterly.

Le script fonctionne-t-il avec Perplexity AI ?

Perplexity propose une API compatible OpenAI. Il suffit de modifier le paramètre base_url dans l’initialisation du client : OpenAI(api_key=..., base_url="https://api.perplexity.ai") et d’utiliser un modèle Perplexity (ex. sonar-pro). La logique de détection de citation reste identique. Notez que Perplexity cite davantage de sources explicites, ce qui facilite la détection.

Comment détecter des citations partielles ou des reformulations de mon domaine ?

La détection basique par in ne capture pas les reformulations. Pour aller plus loin, ajoutez une liste de variantes dans votre fonction check_citation : nom de marque, noms des auteurs, titres d’articles spécifiques. Vous pouvez aussi utiliser la bibliothèque fuzzywuzzy pour une détection approximative. Cette approche est particulièrement utile pour les cabinets d’avocats dont le nom de marque peut être orthographié différemment.

Quelle fréquence d’exécution est recommandée ?

Une exécution hebdomadaire est un bon équilibre entre coût API et fraîcheur des données. Les LLM grand public sont mis à jour tous les quelques mois, donc une fréquence quotidienne n’apporte pas de valeur supplémentaire significative. En revanche, exécutez le tracker après chaque publication majeure de contenu pour mesurer l’impact à moyen terme.

Ce tracker remplace-t-il un outil GEO professionnel ?

Non. Ce script couvre la détection de citation brute. Les outils pro comme Profound, Otterly ou SearchGPT Tracker ajoutent la comparaison concurrentielle, l’analyse sémantique des réponses, le suivi multi-modèles automatisé et des alertes. Ce tracker DIY est idéal pour démarrer, comprendre les mécanismes du GEO et produire un premier jeu de données avant d’investir dans un outil payant. Pour une refonte de site orientée GEO, il constitue un excellent outil de benchmark initial.

Si vous souhaitez aller plus loin dans votre stratégie de référencement sur les IA génératives sans gérer la partie technique en interne, notre équipe spécialisée en SEO et GEO peut vous accompagner sur l’audit, la stratégie de contenu et le suivi des performances. Contactez-nous pour en savoir plus.

Vous voulez savoir comment on peut vous aider concrètement ?

Faisons le point ensemble lors d’un audit gratuit de votre site ou de votre projet.

Obtenez une estimation du prix de votre site web en 2 clics.

Articles qui pourraient vous plaire