takotak lit vos ventes dans Google Analytics 4 (GA4), et Google Ads s'en sert pour piloter vos campagnes. Une vente qui n'arrive pas dans GA4 n'existe pour aucun des deux : le bilan la sous-compte, et Google Ads apprend sur des chiffres faux. Cette page décrit le montage que takotak recommande, quelle que soit votre plateforme ou votre base de commandes.

Pourquoi le navigateur ne suffit pas

Sur la plupart des sites, la vente est envoyée à GA4 par la page de confirmation, dans le navigateur du client. Elle se perd quand :

  • le client ferme l'onglet avant la confirmation, ou pendant la validation du paiement ;
  • la session se perd au retour du site de paiement (PayPal, la page de votre banque) ;
  • la page de confirmation se ferme avant le chargement de Tag Manager, souvent différé pour la vitesse ;
  • le client a refusé les cookies : GA4 n'estime sa vente que sur un site à fort trafic, et ne la compte pas du tout sur un petit site.

Votre back-office compte toutes les ventes ; GA4 en voit moins, et l'écart change d'un jour à l'autre. Toute lecture de vos campagnes en est faussée.

Le principe : une vente, un envoi, depuis votre serveur

Chaque vente confirmée est envoyée à GA4 par votre serveur, au moment où elle passe en « payée », par le Measurement Protocol de GA4. C'est une simple requête HTTP, que votre plateforme ou votre développeur ajoute là où la vente se confirme : webhook du prestataire de paiement, back-office, base de commandes. Peu importe que vos commandes vivent dans Shopify, WooCommerce ou un logiciel maison : la sortie est la même pour tout le monde, et tout l'écosystème en profite.

Qui s'en sert Ce qu'il en tire
GA4 rapports, chiffre d'affaires, parcours d'achat, audiences
Google Ads la conversion importée de GA4, pour les enchères et le pilotage
BigQuery chaque vente ligne par ligne, en quelques minutes
takotak les ventes du bilan, le verdict du jour, le parcours, « Pour gagner plus »
Votre plateforme Ce qu'il y a à faire
Shopify l'application Google & YouTube pose le suivi des achats au paiement : vérifiez qu'elle est reliée à la bonne propriété et que les achats y apparaissent
WooCommerce, PrestaShop une extension qui envoie l'achat par le Measurement Protocol ; la plupart des extensions gratuites l'envoient du navigateur seulement
Site sur mesure une requête Measurement Protocol au passage en « payée », décrite ci-dessous

Ce que l'envoi contient

POST https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=VOTRE_SECRET
{
  "client_id": "1234567890.1700000000",
  "timestamp_micros": 1760600000000000,
  "consent": { "ad_user_data": "GRANTED", "ad_personalization": "GRANTED" },
  "events": [{
    "name": "purchase",
    "params": {
      "transaction_id": "CMD-2026-10481",
      "value": 89.9,
      "currency": "EUR",
      "session_id": "1760599000",
      "engagement_time_msec": 1,
      "items": [{ "item_id": "offre-premium", "item_name": "Offre premium", "price": 89.9 }]
    }
  }]
}
Champ Valeur
measurement_id, api_secret l'identifiant du flux Web et un secret créé dans GA4, Administration › Flux de données › votre flux › Secrets de l'API Measurement Protocol. Le secret reste sur votre serveur, jamais dans une page.
client_id l'identifiant GA4 du visiteur, lu dans le cookie _ga au moment de la commande et gardé avec elle. Sans lui, la vente compte mais n'a pas de source.
session_id lu dans le cookie _ga_ suivi de l'identifiant du flux, à la commande aussi. Avec engagement_time_msec, la vente apparaît dans le rapport en temps réel.
transaction_id votre numéro de commande : c'est lui qui dédoublonne.
value, currency le montant de la vente, hors frais de paiement, avec la même définition que vos rapports.
items au moins un article, avec son identifiant, son nom et son prix.
timestamp_micros l'heure du paiement. GA4 refuse un événement de plus de 72 heures.
consent ce que le client avait accepté à la commande : GRANTED sur les deux champs seulement avec l'accord publicité, DENIED sinon.

Les règles qui vont avec :

  • Un envoi par vente, jamais deux. Gardez une trace de l'envoi avec la commande et relisez-la avant chaque envoi : un webhook de paiement est souvent rejoué.
  • Un remboursement = un événement refund, avec le même numéro de commande et le même montant, depuis le même endroit.
  • Aucune donnée personnelle : ni nom, ni e-mail, ni téléphone. Le numéro de commande suffit.
  • Les identifiants GA4 se captent à la commande seulement si le client a accepté les cookies de mesure. Sans accord, la vente peut partir avec des identifiants tirés au sort pour l'occasion : elle compte dans le chiffre d'affaires, sans source et sans cookie. Ce choix se valide avec votre responsable de la protection des données et se décrit dans votre politique de confidentialité. En attendant, n'envoyez que les ventes des clients qui ont accepté.
  • Testez sans rien enregistrer : la même requête sur /debug/mp/collect renvoie les erreurs du message. Réservez-la aux environnements de test, et le secret de production à la production.

À savoir

Si votre site utilise un conteneur Tag Manager côté serveur (Stape ou équivalent), adressez-lui l'envoi plutôt qu'à GA4 directement : il relaie la même vente à GA4, à Meta et à TikTok.

Une seule source pour l'achat

Tant que la page de confirmation envoie aussi purchase à GA4, chaque vente peut compter deux fois. GA4 écarte parfois un doublon de même numéro de commande pour le même visiteur, mais ni toujours, ni dans BigQuery, ni dans Google Ads : ne comptez pas dessus.

  1. Dans Tag Manager, faites l'inventaire des balises qui se déclenchent sur l'achat : GA4, conversion Google Ads, Meta, TikTok.
  2. Retirez l'envoi de purchase à GA4 depuis la page. Gardez l'événement dans le dataLayer pour les autres balises, ou faites-les passer par le conteneur côté serveur.
  3. Retirez de la même façon le refund envoyé par le navigateur, s'il existe.

Le meilleur moyen pour que Google Ads voie toutes les ventes est de lui donner celles de GA4.

  1. purchase est un événement clé dans GA4 (Administration › Événements) : c'est le cas par défaut, vérifiez qu'il l'est resté.
  2. Liez GA4 et Google Ads (Administration › Liens de produits › Google Ads), puis importez l'événement clé dans Google Ads (Objectifs › Conversions › Nouvelle action de conversion › Importer › Google Analytics 4).
  3. Faites de cet import l'action principale de l'objectif Achat, et passez la balise de conversion de la page de confirmation en secondaire : elle sert encore à comparer, elle ne compte plus deux fois. Une vente envoyée par le serveur avec le bon client_id est rattachée dans GA4 à la session du clic, donc à la campagne.
  4. Consent Mode : refus par défaut avant tout choix, mise à jour dès le choix, balise Google sur toutes les pages. Activez url_passthrough sur la balise Google, qui garde l'identifiant du clic dans l'adresse quand le visiteur refuse les cookies. N'ajoutez aucune condition de consentement à la balise Google Ads : le Consent Mode s'en charge, et les conversions estimées en dépendent.
  5. Chargez Tag Manager sans délai sur la page de confirmation, même si le reste du site le diffère à la première interaction.
  6. Pour les conversions avancées, activez dans GA4 la collecte des données fournies par l'utilisateur (Administration › Collecte et modification des données) : Google Ads s'en sert pour les conversions importées de GA4, sans hachage à faire dans vos pages.

Les conversions importées de GA4 arrivent dans Google Ads avec un retard qui peut atteindre deux jours : c'est normal, et c'est le prix d'un comptage complet.

L'export BigQuery

GA4 n'a qu'une seule sortie brute, et c'est BigQuery. L'export livre chaque événement ligne par ligne, sans seuil ni échantillon, avec le numéro de commande, le montant, l'heure et le consentement. Avec l'export en continu, une vente y est en quelques minutes, quand les rapports de GA4 attendent trois à quatre heures. En Consent Mode avancé, les achats des visiteurs qui ont refusé les cookies y figurent aussi, avec un identifiant de visiteur vide ; en mode basique, la balise ne part pas du tout sans accord, et ces achats n'existent nulle part dans GA4.

  1. Créez un projet Google Cloud si vous n'en avez pas (gratuit), région Union européenne.
  2. Dans GA4, Administration › Liens de produits › Liens BigQuery › Associer, choisissez le projet, l'export quotidien (gratuit) et l'export en continu (facturé au gigaoctet : quelques centimes par mois pour un site de PME).
  3. Dans BigQuery, donnez le rôle Lecteur de données BigQuery sur le jeu de données analytics_ suivi de l'identifiant de la propriété à l'adresse du compte de service takotak, la même que pour GA4.

Attention

L'export ne reprend jamais le passé : il commence le jour de l'association. Liez-le dès maintenant, avant même le reste du chantier.

Ce que takotak en lit, à chaque relevé des achats de GA4 (une fois par jour, ou à la demande depuis Mes ventes) : les événements purchase et refund, avec le numéro de commande, le montant, l'heure, la source de la session et le consentement, tables du jour en cours comprises avec l'export en continu. Seulement sur les jours que l'API de GA4 détaille encore (environ deux mois) : les achats plus anciens sont déjà gardés. takotak trouve seul le projet et le jeu de données depuis la propriété : rien à saisir. Seuls les achats qui portent un numéro de commande servent. Un achat que l'API de GA4 montre déjà n'est pas compté deux fois ; les autres, le plus souvent faits sans accord aux cookies, s'ajoutent aux achats de GA4 et se rapprochent de vos ventes par leur numéro. Mes ventes › Rapprochement dit si l'export est lié et lisible, et combien d'achats il compte, dont combien sans accord aux cookies. La requête ne lit que ces quelques colonnes, sur ces seuls jours, et sa facture est à la charge de takotak.

Vérifier que tout remonte

Ces signaux se lisent dans GA4 (Explorations) ou dans BigQuery, et trahissent un suivi cassé :

  • Ventes GA4 face aux ventes du back-office, par jour : l'écart doit être nul. Un écart un jour donné, c'est l'envoi qui a manqué ce jour-là.
  • Numéro de commande en double : deux sources envoient encore l'achat.
  • Part des achats sans adresse de page : ce sont ceux du serveur. 0 %, l'envoi serveur ne fonctionne pas ; 100 %, la page n'envoie plus rien, comme prévu.
  • Achats dont la source de session est PayPal ou votre banque : la session s'est perdue au retour du paiement. Ajoutez ces domaines aux références indésirables (Administration › Flux de données › votre flux › Configurer les paramètres de balise › Lister les références indésirables).
  • Taux de passage de « paiement commencé » à « achat » stable d'une semaine à l'autre : une chute à paiements commencés stables veut dire que la confirmation ne mesure plus. Dans votre espace client, Santé du site › Parcours le trace sur huit semaines.
  • Conversions Google Ads proches des achats GA4 venus de Google Ads : beaucoup plus, c'est un double comptage ; presque rien, c'est l'import qui ne marche pas.

Ce que takotak en fait aujourd'hui : les ventes et le chiffre d'affaires de la vue d'ensemble, le verdict de l'onglet Aujourd'hui, le parcours de Santé du site et les leviers de Pour gagner plus. Une vente qui n'est jamais arrivée dans GA4 reste invisible pour Google ; pour takotak, déposez vos ventes (section suivante). La garantie reste dans votre code d'envoi : une trace par commande, une relance en cas d'échec, et une alerte de votre côté quand une commande payée n'a pas de trace.

Déposer vos ventes dans takotak

Même bien monté, GA4 ne voit pas tout. Sur une boutique, Mes ventes (sous Mon cap dans votre espace) prend vos ventes réelles, exportées de votre outil de commande. Partout où vous en avez déposé, elles font foi :

  • dans le bilan de la vue d'ensemble et la courbe de Mes actions ;
  • dans le panier moyen, la marge après publicité et ce qui reste après charges fixes ;
  • face aux conversions que déclarent Google Ads et Meta ;
  • dans l'onglet Aujourd'hui, quand la journée et au moins quatre mêmes jours de la semaine ont leurs ventes avec l'heure (export avec colonne heure, ou API des ventes active pour la journée en cours) : la journée est alors comptée sans le retard de GA4. Une seule vente sans heure dans un jour renvoie ce jour à GA4.

GA4 complète les jours que vos dépôts ne couvrent pas, et seulement ceux-là.

  1. Exportez vos ventes en CSV : une ligne par vente, avec au moins la date et le montant. Ajoutez si possible l'heure (c'est elle qui permet à l'onglet Aujourd'hui de comparer la journée à vos ventes réelles), le numéro de commande, le statut, le canal et la marge. Le numéro de commande doit être exactement celui que votre site envoie à GA4 en transaction_id : si votre outil en connaît plusieurs (commande, facture, paiement), prenez celui-là. Si votre site envoie à GA4 un autre montant que le total payé (hors taxes, sans frais de paiement), ajoutez aussi cette colonne : elle sert au rapprochement, le montant payé reste celui qui compte. Un export d'une ligne par article convient aussi : les lignes d'une même commande sont additionnées, et takotak vous l'annonce. Les montants négatifs (avoirs, remboursements) sont écartés. Exportez des journées complètes (voir Ce qui compte).
  2. Déposez le fichier dans Mes ventes › Déposer mes ventes : glissez-le dans la zone de dépôt, ou cliquez pour le choisir. Il est lu sur votre ordinateur : seules les colonnes que vous retenez partent chez takotak, jamais les noms ni les e-mails de vos clients.
  3. Vérifiez la correspondance : pour chaque champ, la colonne de votre fichier, un exemple et ce que takotak en comprend. Cochez les statuts qui font une vente (payée, terminée) et laissez les annulations décochées. La correspondance est gardée pour le dépôt suivant. Si les colonnes changent, takotak vous le signale et vous demande de confirmer la correspondance avant d'importer.
  4. Importez. Un dépôt remplace vos ventes sur sa période, du premier au dernier jour du fichier, y compris celles reçues par l'API et celles d'un dépôt précédent : une vente annulée depuis disparaît aussi de takotak. Hors de cette période, le dépôt précédent garde ses ventes. Avant l'import, takotak nomme les dépôts que le fichier remplace ; sous la zone de dépôt, la liste Vos dépôts dit lesquels sont en vigueur, remplacés en partie ou en entier.

Ce que takotak lit dans GA4

Pour chaque achat, GA4 rend à takotak :

Donnée GA4 Ce qu'elle sert à faire
transactionId le numéro de commande, première clé du rapprochement
la minute de l'achat (dateHourMinute) l'heure de l'achat, dans le fuseau de la propriété GA4
purchaseRevenue et ecommercePurchases le montant d'un achat
le canal et la source / support de la session d'où vient la vente, quand votre export ne le dit pas

Quand l'export BigQuery est lié et lisible, il ajoute les achats que l'API de GA4 ne montre pas, ceux faits sans accord aux cookies surtout : numéro de commande, montant, heure et source de la visite, sans canal.

Rien d'autre : ni nom, ni e-mail, ni adresse. Un même numéro reçu plusieurs fois (page de confirmation rechargée) fait un seul achat, et le doublon est compté à part. Un achat sans numéro ((not set), ou (other) quand GA4 regroupe des valeurs trop nombreuses) se rapproche par le montant et l'heure.

Comment une vente est reliée à un achat

L'onglet Rapprochement relie chaque vente à l'achat vu par GA4, en trois passes :

  1. par le numéro de commande : celui de votre export face au transactionId (« #1042 » et « 1042 » valent le même, majuscules ou non) ;
  2. sinon par le montant (à 5 % près) et l'heure (de 1 minute avant à 15 minutes après la vente) ;
  3. sans heure, par le montant et le jour, à un jour près.

Deux candidats à égalité ne sont jamais reliés au hasard : c'est à vous de choisir. Vous y lisez la part de vos ventes que GA4 voit, au total et par canal. Vous pouvez relier ou délier une paire à la main.

Les passes 2 et 3 sont un repli. Quand beaucoup de ventes ont le même prix, plusieurs ventes d'un même jour partagent le montant, et seul le numéro de commande les distingue sans erreur. Si le rapprochement relie peu de ventes alors que GA4 en voit beaucoup, vérifiez d'abord que la colonne retenue comme numéro de commande porte bien la valeur envoyée en transaction_id.

Ce qui compte

Cas Compté ?
Vente déposée, avec ou sans achat GA4 en face oui, toujours : vos ventes font foi
Achat GA4 relié à une vente une seule fois, avec la vente
Achat GA4 sans vente en face, un jour couvert par un dépôt non, jamais : vos ventes font foi, il ne peut pas y avoir de vente GA4 sans vente en face
Achat GA4 sans vente en face, un jour qu'aucun dépôt ne couvre oui, tel quel
Achat remboursé jamais (voir plus bas)

Cette règle vaut partout où takotak compte des ventes : bilan et courbe, panier moyen, marge après publicité et après charges fixes, confrontation aux régies, onglet Aujourd'hui, outils pour les agents.

Attention

Un dépôt couvre chaque jour de sa période en entier, du premier au dernier jour du fichier. Un export tiré à 11 h laisse de côté les ventes de 11 h à minuit du dernier jour : ce jour-là est sous-compté jusqu'au dépôt suivant. Exportez jusqu'à la veille, ou redéposez le lendemain.

Un achat GA4 sans vente en face

Il ne compte pas, mais il dit quelque chose : un achat est parti vers GA4 sans commande aboutie. Cherchez son numéro dans votre base de commandes, tous statuts compris, et pas seulement dans l'export :

  • Présent dans la base, absent de l'export : la commande est postérieure à l'export, ou son statut est de ceux que vous n'exportez pas ou que vous avez décochés. Le cas le plus fréquent : la page de confirmation s'est affichée pour une commande qui n'a pas abouti (paiement refusé après coup, validation en échec, commande restée en attente). Corrigez le site : l'achat ne doit partir que pour une commande payée et validée, idéalement depuis votre serveur (plus haut).
  • Annulée ou remboursée depuis : GA4 n'a pas reçu de refund. Cliquez sur Remboursé.
  • Absent de la base : l'achat ne vient pas de vos vraies commandes. C'est un test (Tag Assistant, aperçu de Tag Manager), un site de préproduction qui envoie à la même propriété GA4, ou un numéro qui n'est pas celui de votre base.

Pour savoir d'où vient un achat, ouvrez dans GA4 une exploration filtrée sur son numéro de commande, avec le nom d'hôte, la page, l'appareil et la source de la session. Un nom d'hôte de préproduction, ou une source tagassistant.google.com, signe un test. Un canal « Unassigned » sans source n'est pas suspect en soi : GA4 n'a simplement pas rattaché l'achat à une visite (cookies refusés, Safari, envoi par le serveur sans session_id).

Un achat remboursé ne compte jamais. Quand votre site envoie l'événement refund à GA4 avec le numéro de commande de l'achat, takotak le lit au relevé suivant : remboursé à 95 % ou plus, l'achat ne compte plus ; en partie, il compte pour son montant net (sur un jour qu'aucun dépôt ne couvre ; sur un jour déposé, c'est la vente déposée qui compte, au montant de votre export). Pour un achat remboursé que GA4 ignore (un remboursement d'avant l'envoi du refund), cliquez sur Remboursé dans la liste des achats GA4 sans vente en face. GA4 est relevé une fois par jour ; Mettre à jour, dans le bouton à l'horloge en haut à droite de la page, le relance tout de suite (une fois par heure au plus).

Pour confronter vos ventes à ce que déclarent Google Ads et Meta, takotak doit savoir d'où vient chaque vente : la colonne du canal de votre export, sinon la visite GA4 reliée à la vente. Quand moins de 90 % des ventes de la période ont un canal connu, la confrontation est marquée « non vérifiable » et les chiffres de la régie restent. Les valeurs reconnues : google_ads, Google Ads, meta, Facebook Ads, ou une source / support de visite payée (google / cpc, facebook / paid_social). Les autres canaux (direct, newsletter, partenaire) comptent comme connus, sans régie.

Plutôt que de déposer un fichier, votre serveur peut envoyer chaque vente à takotak au moment du paiement, au même endroit que l'envoi à GA4 : c'est l'API des ventes, à brancher dans Mes ventes › Envoi automatique.

Sans export, notez chaque semaine le nombre et le montant de vos ventes (Mes ventes › Ventes de la semaine, ou le journal de Mes actions) : ces chiffres remplacent GA4 sur la semaine, un septième par jour. Les jours déjà couverts par un dépôt gardent les ventes déposées.

À savoir

GA4 ne garde le détail achat par achat que deux mois environ. Le rapprochement porte sur cette fenêtre ; vos ventes déposées, elles, comptent sur toute leur période.

La liste de contrôle

  1. Vente envoyée par le serveur au passage en « payée », avec client_id, session_id, transaction_id, montant, heure et consentement.
  2. Un envoi par vente, avec sa trace sur la commande ; refund au remboursement.
  3. Secret du Measurement Protocol côté serveur seulement ; point de contrôle /debug/mp/collect sur les environnements de test.
  4. Page de confirmation : plus d'envoi purchase à GA4, événement conservé pour les autres balises.
  5. GA4 : purchase en événement clé, GA4 lié à Google Ads.
  6. Google Ads : achat importé de GA4 en action principale, balise de page en secondaire.
  7. Consent Mode : refus par défaut, mise à jour au choix, url_passthrough, balise Google Ads sans condition de consentement supplémentaire.
  8. Tag Manager chargé sans délai sur la page de confirmation.
  9. Export BigQuery lié, jeu de données partagé avec takotak.
  10. Envoi des ventes sans consentement : validé par votre responsable de la protection des données avant activation.
  11. Ventes envoyées à takotak par l'API des ventes, ou déposées dans Mes ventes chaque semaine ou chaque mois, par journées complètes, avec le numéro de commande envoyé à GA4.
  12. Achats GA4 sans vente en face cherchés dans votre base, tous statuts compris, puis marqués remboursés dans Rapprochement ou corrigés sur le site.