ScavioScavio
ProduitTarifsDocumentation
ConnexionCommencer
  1. Accueil
  2. Tutoriels
  3. Comment construire un tableau de bord AEO d'agence avec une API de recherche
Tutoriel

Comment construire un tableau de bord AEO d'agence avec une API de recherche

Construire un tableau de bord AEO destiné aux clients qui suit les citations AI Overview, la présence des moteurs de réponse et la part de citations sur plusieurs clients.

Obtenez une clé API gratuiteDocumentation API

L'optimisation des moteurs de réponse (AEO) est une ligne de service en pleine croissance pour les agences SEO, mais la plupart des outils de suivi de classement ne suivent pas bien les citations AI Overview ou facturent des prix premium pour cela. Créer un tableau de bord AEO personnalisé avec une API de recherche donne aux agences un contrôle total sur les données, des vues par client, et maintient les coûts prévisibles à 0,005 $ par vérification de mot-clé. Ce tutoriel construit un backend de tableau de bord AEO multi-client qui suit la présence de citations, la part de voix et les données de tendance, puis produit du JSON prêt pour n'importe quel framework front-end.

Prérequis

  • Python 3.9+ installé
  • bibliothèque requests installée
  • Une clé API Scavio depuis scavio.dev
  • Listes de mots-clés clients à surveiller

Parcours

Étape 1: Définir la structure de données multi-client

Configurer une cartographie de chaque client avec son domaine et ses mots-clés cibles. C'est l'entrée du tableau de bord.

Python
clients = {
    'client_a': {
        'domain': 'clienta.com',
        'name': 'Client A - SaaS CRM',
        'keywords': [
            'best crm for small business',
            'crm software comparison 2026',
            'what is a crm system',
            'crm vs spreadsheet'
        ]
    },
    'client_b': {
        'domain': 'clientb.io',
        'name': 'Client B - Project Management',
        'keywords': [
            'best project management tools 2026',
            'how to manage remote teams',
            'project management software comparison',
            'agile vs waterfall 2026'
        ]
    }
}

total_keywords = sum(len(c['keywords']) for c in clients.values())
print(f'{len(clients)} clients, {total_keywords} total keywords')
print(f'Monthly cost (daily checks): ${total_keywords * 30 * 0.005:.2f}')

Étape 2: Construire la fonction de collecte de données AEO

Pour chaque mot-clé, vérifier la présence de AI Overview dans les SERP et extraire les données de citation. Enregistrer si le domaine client est cité.

Python
import requests, os, time

API_KEY = os.environ['SCAVIO_API_KEY']

def collect_aeo_data(keyword: str, client_domain: str) -> dict:
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
        json={'query': keyword, 'country_code': 'us'})
    data = resp.json()
    aio = data.get('ai_overview', {})
    has_overview = bool(aio and aio.get('text'))
    citations = aio.get('citations', []) if has_overview else []
    cited_domains = [c.get('domain', '') for c in citations]
    # Also check organic position
    organic_position = None
    for r in data.get('organic_results', []):
        if client_domain in r.get('link', ''):
            organic_position = r['position']
            break
    return {
        'keyword': keyword,
        'has_ai_overview': has_overview,
        'total_citations': len(citations),
        'client_cited': any(client_domain in d for d in cited_domains),
        'citation_position': next(
            (i + 1 for i, d in enumerate(cited_domains) if client_domain in d), None),
        'organic_position': organic_position,
        'competitor_domains': [d for d in cited_domains if client_domain not in d]
    }

Étape 3: Générer les données du tableau de bord par client

Agréger les données au niveau des mots-clés en métriques au niveau client : taux de citation, position moyenne de citation, chevauchement organique et domaines concurrents principaux.

Python
from collections import Counter

def generate_client_dashboard(client_id: str, config: dict) -> dict:
    domain = config['domain']
    results = []
    competitor_counter = Counter()
    for kw in config['keywords']:
        data = collect_aeo_data(kw, domain)
        results.append(data)
        for d in data['competitor_domains']:
            competitor_counter[d] += 1
        time.sleep(0.3)
    total = len(results)
    with_aio = sum(1 for r in results if r['has_ai_overview'])
    cited = sum(1 for r in results if r['client_cited'])
    avg_cite_pos = 0
    cite_positions = [r['citation_position'] for r in results if r['citation_position']]
    if cite_positions:
        avg_cite_pos = sum(cite_positions) / len(cite_positions)
    return {
        'client_id': client_id,
        'client_name': config['name'],
        'domain': domain,
        'total_keywords': total,
        'keywords_with_aio': with_aio,
        'aio_rate': round(with_aio / max(total, 1) * 100, 1),
        'citations': cited,
        'citation_rate': round(cited / max(with_aio, 1) * 100, 1),
        'avg_citation_position': round(avg_cite_pos, 1),
        'top_competitors': competitor_counter.most_common(5),
        'keyword_details': results
    }

Étape 4: Construire la sortie complète du tableau de bord de l'agence

Exécuter le tableau de bord pour tous les clients et produire une structure JSON prête pour un front-end. Inclure le suivi des coûts par client.

Python
import json
from datetime import date

def build_agency_dashboard(clients: dict) -> dict:
    dashboard = {
        'generated': date.today().isoformat(),
        'clients': [],
        'summary': {}
    }
    total_credits = 0
    for client_id, config in clients.items():
        print(f'Processing {config["name"]}...')
        client_data = generate_client_dashboard(client_id, config)
        dashboard['clients'].append(client_data)
        total_credits += len(config['keywords'])
    # Agency summary
    all_clients = dashboard['clients']
    dashboard['summary'] = {
        'total_clients': len(all_clients),
        'total_keywords': sum(c['total_keywords'] for c in all_clients),
        'avg_citation_rate': round(
            sum(c['citation_rate'] for c in all_clients) / max(len(all_clients), 1), 1),
        'total_credits': total_credits,
        'cost': f'${total_credits * 0.005:.2f}'
    }
    with open(f'aeo_dashboard_{date.today()}.json', 'w') as f:
        json.dump(dashboard, f, indent=2)
    return dashboard

dashboard = build_agency_dashboard(clients)
for c in dashboard['clients']:
    print(f'{c["client_name"]}: {c["citation_rate"]}% citation rate, {c["citations"]}/{c["keywords_with_aio"]} cited')

Exemple Python

Python
import os, requests, time, json
from datetime import date
from collections import Counter

API_KEY = os.environ['SCAVIO_API_KEY']

def check_aeo(keyword, domain):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
        json={'query': keyword, 'country_code': 'us'})
    aio = resp.json().get('ai_overview', {})
    citations = aio.get('citations', []) if aio.get('text') else []
    domains = [c.get('domain', '') for c in citations]
    return {'keyword': keyword, 'has_aio': bool(aio.get('text')),
            'cited': any(domain in d for d in domains), 'domains': domains}

def client_report(name, domain, keywords):
    results = [check_aeo(kw, domain) for kw in keywords]
    cited = sum(1 for r in results if r['cited'])
    with_aio = sum(1 for r in results if r['has_aio'])
    print(f'{name}: {cited}/{with_aio} cited ({len(keywords)} keywords, ${len(keywords)*0.005:.3f})')

client_report('Demo Client', 'example.com', ['best crm 2026', 'crm comparison'])

Exemple JavaScript

JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;

async function checkAeo(keyword, domain) {
  const resp = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: keyword, country_code: 'us' })
  });
  const data = await resp.json();
  const aio = data.ai_overview || {};
  const domains = (aio.citations || []).map(c => c.domain || '');
  return { keyword, hasAio: Boolean(aio.text), cited: domains.some(d => d.includes(domain)) };
}

async function main() {
  const keywords = ['best crm 2026', 'crm comparison'];
  let cited = 0;
  for (const kw of keywords) {
    const r = await checkAeo(kw, 'example.com');
    if (r.cited) cited++;
    console.log(`${r.hasAio ? '+' : '-'}AIO ${r.cited ? '+CITED' : ''} ${kw}`);
  }
  console.log(`Citation rate: ${(cited/keywords.length*100).toFixed(0)}%`);
}

main().catch(console.error);

Sortie attendue

JSON
2 clients, 8 total keywords
Monthly cost (daily checks): $1.20

Processing Client A - SaaS CRM...
Processing Client B - Project Management...

Client A - SaaS CRM: 50.0% citation rate, 1/2 cited
Client B - Project Management: 33.3% citation rate, 1/3 cited

Agency summary:
  Total clients: 2
  Total keywords: 8
  Avg citation rate: 41.7%
  Cost: $0.04

Tutoriels associés

  • Comment suivre les citations dans les aperçus IA avec un budget limité
  • Comment effectuer des vérifications de classement SEO par lot la nuit avec une API
  • Comment construire un tableau de bord opérationnel avec des données de recherche

Questions fréquentes

La plupart des développeurs terminent ce tutoriel en 15 à 30 minutes. Vous aurez besoin d'une clé API Scavio (l'offre gratuite suffit) et d'un environnement Python ou JavaScript fonctionnel.

Python 3.9+ installé. bibliothèque requests installée. Une clé API Scavio depuis scavio.dev. Listes de mots-clés clients à surveiller. Une clé API Scavio vous donne 50 crédits gratuits à l'inscription.

Oui. L'offre gratuite comprend 50 crédits à l'inscription, ce qui est largement suffisant pour terminer ce tutoriel et prototyper une solution fonctionnelle.

Scavio dispose d'un package natif LangChain (langchain-scavio), d'un serveur MCP et d'une API REST simple qui fonctionne avec tout client HTTP. Ce tutoriel utilise the raw REST API, mais vous pouvez l'adapter à votre framework de prédilection.

Ressources connexes

Best Of

Meilleures API de suivi AEO à petit budget en 2026

Read more
Best Of

Meilleurs outils AI Overview pour les petites agences en 2026

Read more
Solution

Suivi des citations AI Overview pour les clients d'agence

Read more
Use Case

Tableau de bord de suivi des métriques GEO/AEO

Read more
Use Case

Tableau de bord Agence AI Overview

Read more
Glossary

AEO pour les agences

Read more

Commencer

Construire un tableau de bord AEO destiné aux clients qui suit les citations AI Overview, la présence des moteurs de réponse et la part de citations sur plusieurs clients.

Obtenez une clé API gratuiteLire la documentation
ScavioScavio

API de recherche en temps réel pour agents IA. Recherchez sur toutes les plateformes, pas seulement Google.

Produit

  • Fonctionnalités
  • Tarifs
  • Tableau de bord
  • Affiliés

Développeurs

  • Documentation
  • Référence API
  • Démarrage rapide
  • Intégration MCP
  • SDK Python

Alternatives

  • Alternative à Tavily
  • Alternative à SerpAPI
  • Alternative à Firecrawl
  • Alternative à Exa

Outils

  • Formateur JSON
  • cURL vers code
  • Compteur de jetons
  • Tous les outils

© 2026 Scavio. Tous droits réservés.

Featured on TAAFT
Conditions d'utilisationPolitique de confidentialité