API vs Interface Google Search Console : pourquoi les données ne correspondent pas ?

Vous avez déjà remarqué que les chiffres ne correspondent pas entre l'interface web de la Google Search Console, l'export CSV et les données récupérées via l'API ? Vous n'êtes pas seul. C'est l'une des confusions les plus fréquentes en SEO.

Dans cet article, nous expliquons précisément d'où viennent ces écarts, pourquoi Google les considère comme normaux, et comment obtenir les données les plus complètes possibles.

Tableau récapitulatif : Interface vs Export CSV vs API vs BigQuery

Caractéristique Interface web Export CSV API
Nombre de lignes max 1 000 1 000 25 000 par requête (50 000/jour avec pagination)
Requêtes anonymisées dans les totaux Dans les graphiques (si pas de filtre requête)
Requêtes anonymisées en lignes
Historique 16 mois 16 mois 16 mois
Fraîcheur des données Quelques heures (données fraîches) 2-3 jours Quelques heures (dataState=all) ou 2-3 jours (défaut)
Contrôle de l'agrégation ~ (bascule automatique via filtres) (byProperty, byPage)
Filtres regex
Données horaires ~ Vue 24h uniquement Jusqu'à 10 jours
Précision de la position Arrondie Arrondie Décimale (ex: 3.7142857)

Source : Google Search Central – Deep dive into performance data

Le problème n°1 : les requêtes anonymisées (46% des clics !)

C'est la cause principale des écarts entre l'API et l'interface. Google masque certaines requêtes pour des raisons de confidentialité : celles saisies par un trop petit nombre d'utilisateurs ou contenant des informations personnelles.

Combien de données sont cachées ?

Beaucoup plus qu'on ne le pense. Selon une étude Ahrefs de 2022 portant sur 146 741 sites web et environ 9 milliards de clics :

Source : Ahrefs – Almost Half of GSC Clicks Go to Anonymous Queries

L'impact varie selon la taille du site

Une étude de SEOGets sur 9 sites montre des résultats frappants :

Taille du site Requêtes visibles Requêtes cachées
Petits sites 0 à 37% (moy. 18,3%) 63 à 100%
Sites moyens 21 à 61% (moy. 39,7%) 39 à 79%
Grands sites 63 à 88% (moy. 76,3%) 12 à 37%

Source : SEOGets – What Are Anonymous Queries

Concrètement : si votre site est petit, vous ne voyez peut-être que 20% de vos requêtes réelles. C'est une limitation majeure dont peu de professionnels SEO sont conscients.

Où sont incluses les requêtes anonymisées ?

C'est pourquoi la somme des lignes de l'API sera toujours inférieure aux totaux affichés dans les graphiques de l'interface.

La limite de lignes : 1 000 vs 25 000 vs 50 000

La deuxième cause d'écart majeure est la troncature des données :

Attention : si vous ne spécifiez pas le paramètre rowLimit dans l'API, la valeur par défaut est 1 000 lignes (comme l'interface). Il faut explicitement demander plus.

Pour les gros sites, même la limite de 50 000 lignes de l'API peut être insuffisante. Une étude de Similar.ai a montré que les sites e-commerce avec une architecture profonde peuvent perdre jusqu'à 90% de leurs mots-clés et 66-67% de leurs impressions à cause de cette troncature.

Source : Similar.ai – Closing the Google Search Console Sampling Gap

L'agrégation : byProperty vs byPage

C'est l'une des sources de confusion les plus sous-estimées. Google propose deux modes d'agrégation qui comptent les impressions différemment :

Mode byProperty (par défaut)

Si votre site affiche 3 pages dans les résultats pour une même requête, cela compte comme 1 seule impression pour la propriété. Les clics et la position sont reportés pour l'URL la mieux classée uniquement.

Mode byPage

Chaque URL qui apparaît dans les résultats obtient sa propre impression. Si 3 pages apparaissent pour une requête, cela compte 3 impressions.

Quand le mode bascule

Résultat : les totaux en mode byPage sont presque toujours plus élevés que les totaux en mode byProperty. Si vous comparez des données API (avec dimension page) aux totaux de l'interface (sans filtre page), les chiffres ne correspondront pas.

Source : Google – How Search Console counts impressions, position, and clicks

Les Bloom Filters : pourquoi Google perd des données

En septembre 2023, Gary Illyes (Google Search Relations) a confirmé que Google utilise en interne des Bloom Filters – des structures de données probabilistes – pour basculer rapidement entre les vues par propriété et par page.

Le problème : les Bloom Filters sacrifient un peu de précision pour gagner en vitesse. Cela signifie qu'à chaque basculement de mode d'agrégation, une petite quantité de données peut être perdue. Ce n'est pas un bug, c'est un compromis technique assumé par Google.

Sources : Search Engine Journal – Google's Use of Bloom Filters, Search Engine Roundtable

La fraîcheur des données

Autre source d'écarts possibles : les données ne sont pas disponibles en temps réel.

Méthode Délai Précision
Interface (données fraîches) Quelques heures ~ Provisoires, peuvent changer
API (dataState=all) Quelques heures ~ Provisoires, peuvent changer
API (dataState=final) 2-3 jours Définitives
Export CSV 2-3 jours Définitives

Si vous comparez les données de l'interface (qui affiche les données fraîches par défaut) avec celles de l'API (qui utilise dataState=final par défaut), les jours récents ne correspondront pas.

Google précise : « Chaque point de donnée fraîche sera remplacé par le point de donnée final après quelques jours. »

Source : Google – Fresher data in Search Performance report

Précision des positions et du CTR

La position : une moyenne pondérée trompeuse

L'API renvoie la position sous forme décimale (ex : 3.7142857), alors que l'interface l'arrondit. Mais le vrai piège est ailleurs :

Le CTR : attention à l'agrégation

L'API renvoie le CTR comme un décimal (ex : 0.0423 = 4,23%). L'erreur courante est de moyenner les CTR individuels au lieu de faire le calcul correct :

CTR agrégé = total des clics ÷ total des impressions

Si vous faites la moyenne des CTR ligne par ligne, vous obtiendrez un résultat différent de l'interface, qui utilise la moyenne pondérée.

Source : Search Engine Journal – How Accurate is the Average Position Metric

Ce que l'API offre en plus de l'interface

L'API n'est pas qu'une version programmatique de l'interface. Elle offre des fonctionnalités exclusives :

Source : Google – Search Analytics API query method

Ce que Google dit officiellement

En octobre 2022, Google a publié un article détaillé (Deep dive into performance data) qui clarifie la situation :

Position officielle de Google

« Les données du rapport et les données exportées [via l'API] proviennent de la même source [...] elles sont agrégées et filtrées de manières différentes avec deux limitations principales : le filtrage de confidentialité et la limite de lignes quotidienne. »

Causes confirmées des écarts

  • Requêtes anonymisées (~46% des clics)
  • Limite de lignes (1K vs 50K)
  • Mode d'agrégation différent
  • Bloom Filters (perte mineure)
  • Fraîcheur des données

Pour avoir le maximum de données

  • Utiliser l'API avec rowLimit: 25000
  • Paginer pour atteindre 50 000 lignes
  • Utiliser dataState=final pour des données stables
  • Configurer BigQuery pour 100% des données
  • Archiver régulièrement (historique 16 mois max)

Impact pratique : quand ces différences comptent

Pour le reporting client

Si vous présentez les données API à un client qui regarde l'interface, les totaux ne correspondront pas. Soyez transparent : expliquez que l'API ne reflète pas les requêtes anonymisées. Présentez toujours la même source de période en période pour que les comparaisons soient fiables.

Pour la détection de tendances

Les écarts absolus ne sont pas graves si vous utilisez toujours la même méthode de récupération. L'important est de comparer des données obtenues de la même façon. Un outil comme SEO Pilote utilise systématiquement l'API GSC avec les mêmes paramètres, ce qui garantit la cohérence des comparaisons d'un import à l'autre.

Pour l'analyse de mots-clés

Avec l'API, vous récupérez 25× plus de mots-clés que via l'interface (25 000 vs 1 000). Cela fait une différence énorme pour la découverte de mots-clés de longue traîne et la détection de cannibalisation.

Récupérez 25 000 lignes de données GSC avec SEO Pilote

SEO Pilote se connecte directement à l'API de la Google Search Console pour récupérer jusqu'à 25 000 lignes de données (25× plus que l'export CSV). Détection de cannibalisation, qualification des mots-clés, rapports IA automatiques.

Questions fréquentes

L'API exclut les requêtes anonymisées (celles saisies par trop peu d'utilisateurs). Selon une étude Ahrefs sur 146 741 sites, 46% des clics proviennent de requêtes anonymisées, qui sont incluses dans les totaux de l'interface (graphiques) mais jamais dans les lignes de l'API.

L'API permet de récupérer jusqu'à 25 000 lignes par requête (paramètre rowLimit). Avec la pagination (startRow), vous pouvez atteindre 50 000 lignes par jour par propriété et par type de recherche. C'est 25 à 50 fois plus que les 1 000 lignes de l'interface web et de l'export CSV.

En mode byProperty (défaut), si 3 pages de votre site apparaissent pour une même requête, cela compte comme 1 impression. En mode byPage, cela compte 3 impressions. L'interface bascule automatiquement en byPage dès que vous ajoutez un filtre ou une dimension « Page ».

Oui. Google l'a confirmé officiellement : les données proviennent de la même source, mais elles sont agrégées et filtrées différemment, avec deux limitations principales : le filtrage de confidentialité (requêtes anonymisées) et la limite de lignes quotidienne.

La seule méthode pour récupérer 100% des données (y compris les requêtes anonymisées) est l'export BigQuery. Les requêtes anonymisées y apparaissent avec la valeur NULL, mais leurs clics et impressions sont conservés. Cependant, BigQuery ne fournit pas de données rétroactives : il faut configurer l'export avant pour accumuler les données.

SEO Pilote utilise l'API officielle de Google Search Console via OAuth2. Il récupère jusqu'à 25 000 lignes de données avec les dimensions requêtes et pages, puis les analyse automatiquement (détection de cannibalisation, qualification, comparaison d'imports, rapports IA). C'est 25 fois plus de données que ce que vous obtenez en exportant manuellement le CSV depuis l'interface.