quest_import_donnees_campagne_ga4.exe
_
×

Import données de campagne GA4 : pourquoi vos coûts manquent

Import des données de campagne GA4 : lisez le nouveau validation report, distinguez match rate et coverage rate, et réparez vos UTM pour un ROAS fiable.

ga4 analytics media seo guide

Vous avez uploadé vos coûts Meta et TikTok dans GA4, tout semblait bon, et pourtant votre ROAS non-Google affiche des zéros ou des chiffres qui n’ont aucun sens. Vous n’avez rien cassé : l’import des données de campagne GA4 échoue silencieusement, et jusqu’à récemment vous n’aviez presque aucun moyen de savoir pourquoi. Depuis le 10 août 2026, ce n’est plus vrai. Google a livré le Campaign data import validation report, qui expose enfin, campagne par campagne, si l’argent que vous avez uploadé s’est vraiment raccroché aux sessions mesurées. Ce guide vous apprend à lire ce rapport, à comprendre pourquoi les jointures cassent, et à réparer votre taxonomie UTM pour que vos décisions de budget reposent sur des chiffres réels.

Petit avertissement utile : la quasi-totalité des tutoriels qui rankent encore sur ce sujet datent d’avant le renommage de novembre 2025 et ignorent les trois changements de l’été 2026. Ils vous montrent comment configurer un import. Ce n’est pas votre problème. Votre problème, c’est qu’il est configuré et qu’il ne joint pas. On prend donc le sujet par le diagnostic.

Ce que l’import de données de campagne fait vraiment

Commençons par le mécanisme, parce que 90 % des erreurs viennent d’une mauvaise idée de ce qui se passe sous le capot. Quand vous uploadez un fichier de coûts, GA4 ne retraite pas vos données historiques et ne réécrit rien. La jointure se fait au moment de la requête : lorsque vous ouvrez un rapport, GA4 tente de rapprocher chaque ligne de coût importée des sessions déjà collectées, en s’appuyant sur trois clés obligatoires : utm_source, utm_medium et la date. Si ces trois clés ne correspondent pas exactement à ce qui existe dans vos sessions, la ligne de coût reste orpheline. Elle est dans GA4, elle ne se voit nulle part.

Le nom a changé en novembre 2025 (l’ancien « cost data import » est devenu « campaign data import »), mais le principe est identique. Retenez surtout ceci : l’import ne crée pas de sessions, il essaie de coller des coûts sur des sessions qui existent déjà. Toute la suite de cet article découle de cette phrase.

Pour situer cette brique dans l’écosystème 2026, gardez en tête qu’elle nourrit directement la budgétisation cross-canal GA4 : ses projections consomment vos données de coût. Un import cassé, ce sont des projections fausses. On y revient à la fin.

Les 3 changements de l’été 2026 qui cassent les imports existants

Si votre import fonctionnait au printemps et ne fonctionne plus, ce n’est probablement pas un hasard. Trois évolutions récentes ont modifié le comportement de la fonctionnalité :

28 juillet 2026, la devise devient obligatoire. Tout import portant des coûts doit désormais spécifier une devise au format ISO 4217 (USD, EUR, GBP…), soit mappée depuis une colonne de votre fichier, soit fixée en valeur statique pour tout le jeu de données. Des imports qui tournaient sans devise se sont mis à casser du jour au lendemain. C’est la cause la plus bête et la plus fréquente des imports subitement morts cet été.

30 juillet 2026, diagnostic GBRAID / gad_. Google a ajouté une alerte qui signale les propriétés où les paramètres gbraid et gad_ disparaissent des URLs de clic, ce qui fait basculer des sessions payantes en organique ou en (not set). Ce n’est pas l’import lui-même, mais c’est la même famille de problème : l’argent et la session ne se retrouvent pas. Une session mal étiquetée, c’est une ligne de coût qui n’aura personne à qui se raccrocher.

10 août 2026, le validation report. C’est la vraie nouveauté, celle qui change tout pour le diagnostic. Google donne enfin un rapport dédié (Rapports > Import de données) qui montre le statut de jointure et le taux de couverture par campagne. Avant, vous deviniez. Maintenant, vous mesurez.

Lire le validation report sans se tromper

Le rapport tient dans cinq dimensions (Source/Medium par défaut, plus Campaign ID, Campaign name, Source platform, et Default channel group) et sept métriques (import join status, coverage rate, event count, ad clicks, ad cost, ad impressions, key events). La colonne centrale, celle qu’il faut apprendre à lire, est l’import join status. Chaque ligne y tombe dans l’un de trois états, et la nuance entre les deux mauvais états est capitale :

Statut de jointureCe que ça veut direCe que vous devez faire
JoinedLa dépense importée s’est raccrochée à des sessions mesurées. Tout va bien.Rien, sinon surveiller le coverage rate.
No campaign dataGA4 a des sessions pour cette source/medium, mais aucune dépense importée en face.Vérifier votre fichier de coûts : campagne oubliée, date manquante, mapping incomplet.
No Analytics dataLa dépense existe dans votre import, mais aucune session ne lui correspond côté GA4.Le plus vicieux : vos UTM ne matchent pas, ou le trafic n’a jamais été correctement étiqueté.

Le piège classique, c’est de traiter No campaign data et No Analytics data comme le même bug. Ils sont opposés. Dans le premier cas, il vous manque de la dépense (le fichier est incomplet). Dans le second, il vous manque de la session : la dépense est bien là mais elle continue de polluer le dénominateur de votre ROAS, puisque vous avez du coût sans aucun revenu ni conversion en face. C’est exactement le genre de chose qui vous fait conclure « Meta est catastrophique ce mois-ci » alors que Meta convertit très bien, mais que vos sessions Meta sont étiquetées facebook / paid d’un côté et Facebook / cpc de l’autre.

match rate vs percentage imported vs coverage rate

Voici la distinction que personne ne prend le temps d’expliquer, et c’est dommage parce qu’elle est la clé du diagnostic. Trois indicateurs circulent, ils mesurent trois choses différentes, avec trois dénominateurs différents. Les confondre, c’est se tromper de réparation.

IndicateurCe qu’il mesureDénominateurCe qu’un chiffre bas révèle
Percentage importedPart des lignes de votre fichier acceptées à l’uploadLignes du fichier importéUn problème de format : dates, devise, colonnes mal mappées
Match ratePart des lignes importées qui trouvent une clé correspondanteLignes importées validesUne désynchro de taxonomie : vos UTM ne collent pas
Coverage ratePart de votre trafic payant réellement couvert par de la dépenseSessions payantes mesuréesDes pans entiers de trafic sans coût rattaché

Le cas d’école à garder en tête : match rate à 100 %, coverage rate à 30 %. Traduction : tout ce que vous avez uploadé a matché (vos UTM de fichier sont propres), mais vous n’avez uploadé qu’un tiers de vos plateformes. Le match rate vous rassure à tort ; c’est le coverage rate qui dit la vérité sur la fiabilité de votre ROAS global. Un match rate parfait sur un import qui ne couvre qu’une plateforme sur trois ne vaut rien pour arbitrer un budget.

Zone d’ombre à assumer, parce que Google ne tranche pas : la doc ne dit pas explicitement si le coverage rate hérite de la même fenêtre glissante de deux ans qui contraint le match rate, ni quel seuil est « acceptable ». En attendant que Google clarifie, traitez le coverage rate comme un indicateur relatif à surveiller dans le temps, pas comme une note absolue sur 100.

Pourquoi les jointures échouent : les 6 causes réelles

Dans la pratique, un No Analytics data ou un match rate au sol se ramène presque toujours à l’une de ces six causes :

  1. La casse des UTM. GA4 est sensible à la casse. Facebook n’est pas facebook, CPC n’est pas cpc. Une seule majuscule qui traîne et la ligne ne joint pas.
  2. La dérive de nommage. SpringSale dans votre fichier de coûts, Spring_Sale dans vos URLs de campagne. Deux humains, deux conventions, zéro jointure.
  3. Le format de date. Hors ISO 8601, ou pire, une date dans le futur (fuseau horaire mal géré). GA4 n’a rien à quoi rattacher ces coûts.
  4. La devise manquante. Depuis le 28 juillet 2026, c’est rédhibitoire. Pas de devise, pas d’import.
  5. La taxonomie multi-valeurs sur une même plateforme. Le grand classique : fb / cpc, meta / cpc et facebook / paid coexistent pour désigner Meta. Votre dépense Meta est éclatée sur trois source/medium, et aucune ne totalise le vrai budget.
  6. Les UTM dynamiques non résolus. Des {{campaign.name}} ou macros non résolus au moment du mapping, qui arrivent dans les sessions comme des chaînes littérales ingérables.

Aucune de ces causes n’est exotique. Ce sont toutes des questions d’hygiène de taxonomie, et c’est une bonne nouvelle : elles se corrigent. Si vous auditez régulièrement votre configuration, ajoutez l’import de campagne à votre routine (voyez notre audit GA4 des 11 erreurs de configuration, le trafic unassigned y est un cousin direct de ces problèmes de jointure).

Réparer sa taxonomie UTM

La réparation tient en un principe : une plateforme, une source, un medium, toujours les mêmes. Trois patterns existent, et un seul est vraiment confortable.

Le meilleur, c’est une source par plateforme : meta / cpc, tiktok / cpc, pinterest / cpc. Chaque plateforme a une identité unique et stable, l’intégration automatique fonctionne, le rapprochement est trivial. C’est la best practice, point.

Acceptable : une source par famille, quand vous regroupez volontairement des variantes sous une bannière (par exemple tout le social payant sous paidsocial). Vous perdez du détail par plateforme, mais au moins la jointure tient.

À bannir : la taxonomie multi-valeurs, où la même plateforme apparaît sous plusieurs source/medium. Là, l’intégration automatique devient impossible et vous êtes condamné à passer par un import CSV manuel, Sheets, ou BigQuery pour recoller les morceaux vous-même. Côté sources d’import, GA4 en propose onze, dont cinq intégrations directes qui vous évitent le fichier manuel : Meta, Pinterest, Reddit, Snap et TikTok. Si vous êtes sur ces plateformes, branchez l’intégration directe plutôt que de maintenir un CSV à la main. Pour consolider les variantes de source résiduelles, la dimension Source Group de GA4 est un complément utile côté reporting.

Vérifier et suivre dans le temps

Dernier réflexe, et pas le moindre. Le validation report applique par défaut un filtre sur les paid manual campaigns, ce qui exclut google / search (auto-taggé). C’est cohérent, puisque l’import concerne le non-Google, mais sachez-le : si vous voulez une vue complète, retirez le filtre. Prévoyez aussi un délai d’environ 24 heures avant que les données d’import ne se reflètent dans le rapport ; ne paniquez pas si un upload de ce matin n’apparaît pas encore.

Et surtout, surveillez le coverage rate avant de lancer un Scenario Planner. C’est le point le plus sous-estimé : la budgétisation cross-canal construit ses projections sur ces données de coût, et un coverage rate bas contamine silencieusement les projections sans jamais lever d’alerte. Vous obtenez des recommandations de réallocation qui semblent sérieuses, calculées sur un tiers de la réalité. Si la jointure reste ingérable malgré tout, il reste le plan B : calculer votre ROAS non-Google hors de GA4, en combinant coûts et sessions dans BigQuery, où vous gardez la main sur la clé de jointure.

En résumé : ouvrez le validation report, regardez d’abord le coverage rate (pas le match rate), traquez les lignes No Analytics data qui gonflent votre dénominateur de ROAS, et réparez vos UTM vers une source unique par plateforme. Faites ça une fois proprement, et vous arrêterez de prendre des décisions de budget sur des chiffres qui mentent.