# ROAS ChatGPT Ads : mesurer le retour sur dépense publicitaire et la vraie rentabilité, produit par produit

> Calculer le ROAS de ChatGPT Ads depuis vos commandes, pourquoi le ROAS n'est pas la marge, et les pièges qui le faussent : doublons, remboursements, devises.

Canonical: https://convrail.com/fr/blog/roas-chatgpt-ads/

Le ROAS de ChatGPT Ads, c'est le chiffre d'affaires des commandes attribuées à ChatGPT Ads divisé par la dépense ChatGPT Ads, sur la même période. Il dit combien chaque euro dépensé a rapporté de chiffre d'affaires, pas si vous avez gagné de l'argent. Pour le savoir, retirez le coût d'achat de ce que vous avez vendu et la dépense publicitaire, produit par produit, à partir de vos propres commandes.

## ROAS, marge brute et marge nette : trois questions différentes

Les plateformes publicitaires affichent le ROAS parce qu'il ne demande que le chiffre d'affaires et la dépense. Un commerçant, lui, vit de sa marge. Les trois indicateurs répondent à des questions différentes, et les confondre est l'erreur la plus coûteuse de l'acquisition payante.

| Indicateur | Formule | Répond à |
| --- | --- | --- |
| ROAS | Chiffre d'affaires publicitaire / dépense publicitaire | Combien de chiffre d'affaires chaque euro dépensé a-t-il rapporté ? |
| Marge brute sur les ventes publicitaires | Chiffre d'affaires publicitaire moins le coût d'achat des unités vendues | Que reste-t-il des ventes une fois la marchandise payée ? |
| Marge nette après publicité | Marge brute moins la dépense publicitaire | La publicité sur ce produit a-t-elle fait gagner ou perdre de l'argent ? |

Un exemple chiffré, pour un produit sur 30 jours :

- Chiffre d'affaires publicitaire : 2 967 USD pour 23 unités à 129 USD.
- Coût d'achat : 74 USD par unité, soit 1 702 USD.
- Dépense publicitaire : 410 USD.
- ROAS : 2 967 / 410 = 7,2.
- Marge brute : 2 967 moins 1 702 = 1 265 USD.
- Marge nette après publicité : 1 265 moins 410 = 855 USD.

Prenons un second produit, avec un ROAS d'apparence tout à fait honorable de 2,5 : 1 000 USD de chiffre d'affaires publicitaire pour 400 USD de dépense, mais 700 USD de coût d'achat. La marge brute est de 300 USD ; la marge nette après publicité est de moins 100 USD. Le ROAS semblait correct ; le produit perdait de l'argent à chaque fois qu'il était mis en avant. Seule la marge nette par produit le montre.

La livraison, les frais de paiement et les retours réduisent encore la marge. Intégrez-les à votre propre modèle si vous les avez par commande ; la version honnête minimale, c'est le coût d'achat plus la dépense publicitaire.

## D'où vient chaque chiffre

Le ROAS et la marge combinent deux sources de données qui ne vivent jamais dans le même système.

### La dépense vient d'OpenAI

La [référence insights de l'API Ads d'OpenAI](https://developers.openai.com/ads/api-reference/insights) expose des indicateurs de diffusion (`impressions`, `clicks`, `spend`, `ctr`, `cpc`, `cpm`) et des champs de conversion (`conversions`, `click_through_conversions`, `view_through_conversions`), agrégés au niveau `ad_account`, `campaign`, `ad_group` ou `ad`, par heure, jour ou mois. La dépense est exprimée dans la devise du compte publicitaire. On y trouve aussi `order_created_attributed_sales`, défini comme « Attributed purchase value across goal and non-goal `order_created` events ».

Les insights peuvent être segmentés par `product`. Lors de nos propres tests sur l'API, le segment produit renvoyait des données de diffusion comme la dépense, mais aucune conversion. OpenAI peut donc vous dire ce que chaque produit vous a coûté en publicité ; il ne peut pas, au niveau produit, vous dire ce que chaque produit a vendu.

### Le chiffre d'affaires et les coûts viennent de votre boutique

Vos commandes contiennent ce qu'OpenAI n'a pas : le montant payé de chaque commande, les lignes de commande, le coût d'achat de chaque variante (le « Coût par article » de Shopify ou votre propre champ de coût), les remboursements et les annulations. Rapprocher les deux donne le chiffre d'affaires publicitaire par produit, la dépense par produit, et donc la marge par produit.

La clé de rapprochement est le produit. La dépense est rapportée par article du flux ; les commandes portent des identifiants de variante dans leurs lignes. Tant que l'`item_id` de votre flux renvoie à une variante, les deux se rejoignent.

## Rattacher chaque commande à la publicité ou à l'organique

Avant de calculer un ROAS, il faut savoir quelles commandes la publicité a produites. Deux types de trafic ChatGPT arrivent sur votre boutique : les résultats produit organiques tirés de votre flux, qui ne coûtent rien par clic, et les emplacements payants. Le centre d'aide d'OpenAI décrit les annonces comme séparées de la réponse et signalées comme sponsorisées, et les clics publicitaires arrivent sur votre site avec un identifiant `oppref`, que la [référence Measurement Pixel](https://developers.openai.com/ads/measurement-pixel) décrit comme capté depuis l'URL d'atterrissage et conservé dans un cookie first-party.

Une règle fixe appliquée à chaque commande rend la séparation reproductible :

| Signal sur la commande | Compté comme |
| --- | --- |
| L'URL d'atterrissage contient `oppref` | ChatGPT Ads |
| `utm_source` vaut chatgpt ou openai avec un `utm_medium` payant (cpc, ppc, paid, ads) | ChatGPT Ads |
| `utm_source` vaut chatgpt ou openai avec un autre medium | ChatGPT organique |
| Le référent est chatgpt.com, chat.openai.com ou openai.com | ChatGPT organique |
| Aucun des signaux ci-dessus | Autre canal |

Le ROAS n'utilise que les lignes publicitaires. Mettre le chiffre d'affaires organique au numérateur gonfle le ROAS avec des ventes que la campagne n'a pas achetées, et c'est ainsi que l'on augmente le budget de campagnes qui ne rapportent pas. La méthode complète, et la raison pour laquelle l'ordre des règles compte, sont dans [ChatGPT organique ou ChatGPT Ads : l'attribution](/fr/blog/chatgpt-organique-vs-chatgpt-ads-attribution/).

## Votre chiffre et celui de l'Ads Manager

Attendez-vous à ce qu'ils diffèrent. Ils ne mesurent pas la même chose, et savoir pourquoi évite beaucoup de recherches inutiles.

| | Ads Manager | Votre décompte à partir des commandes |
| --- | --- | --- |
| Ce qui est compté | Les événements de conversion reçus et attribués par OpenAI | Les commandes payées dont l'URL d'atterrissage portait l'identifiant publicitaire |
| Fenêtre | Fenêtre de clic de 7, 14 ou 30 jours (30 par défaut dans l'API insights), plus une fenêtre post-affichage d'un jour quand elle est disponible | La session qui a mené à la commande |
| Remboursements et annulations | Une conversion déjà envoyée n'est pas retirée par la Conversions API | Retirés du chiffre d'affaires quand la commande est remboursée ou annulée |
| Devise | Celle du compte publicitaire | Celle de la boutique |

La [référence de la Conversions API](https://developers.openai.com/ads/conversions-api) indique que l'attribution post-clic « uses the applicable configured click window » et que « View-through conversions use a fixed one-day window after an eligible ad impression », le clic l'emportant quand les deux s'appliquent. L'API insights permet de demander explicitement la fenêtre de clic (`7`, `14` ou `30` jours) et la fenêtre d'affichage (`0` ou `1` jour). Une conversion post-affichage n'a pas de clic, donc pas d'`oppref` dans aucune URL : elle peut apparaître dans l'Ads Manager sans jamais apparaître dans un décompte fondé sur les commandes. Aucun des deux chiffres n'est faux ; indiquez lequel vous utilisez, et ne les mélangez pas dans un même ratio.

## Les cinq pièges qui faussent le ROAS de ChatGPT Ads

### 1. Compter deux fois la même vente

Si le pixel et la Conversions API envoient tous deux un achat, OpenAI ne les dédoublonne que s'ils partagent un identifiant. La référence demande de « reuse the same value as the API `id` and pixel `event_id` » sous le même Pixel ID ; OpenAI traite alors « the first event it receives for a matching key and ignores later duplicates ». Sans identifiant commun, chaque commande compte deux fois dans l'Ads Manager et le ROAS double sur le papier. La façon de construire cet identifiant commun est expliquée dans [Pixel OAIQ ou Conversions API](/fr/blog/pixel-oaiq-ou-conversions-api/).

### 2. Garder les commandes remboursées et annulées dans le chiffre d'affaires

Une conversion envoyée à OpenAI reste envoyée. Si vous calculez le ROAS à partir de vos commandes, retirez celles qui ont été remboursées ou annulées après coup, sinon le chiffre est flatteur exactement à hauteur de votre taux de remboursement. Conservez le statut de la commande et recalculez ; ne supprimez pas l'historique.

### 3. Mélanger les devises

La dépense arrive dans la devise du compte publicitaire ; le chiffre d'affaires est dans celle de la boutique. Diviser des euros de chiffre d'affaires par des dollars de dépense donne un nombre qui ressemble à un ROAS et ne veut rien dire. Soit vous convertissez avec un taux et une date indiqués, soit vous refusez de calculer la marge et vous le dites. Convrail affiche chaque montant dans sa propre devise et laisse la marge vide quand les deux diffèrent, plutôt que d'inventer une conversion.

### 4. Considérer un coût inconnu comme nul

Un produit sans coût d'achat a une marge inconnue, pas une marge de 100 %. Traiter le coût manquant comme zéro transforme chacun de ces produits en vedette et pousse le budget vers des produits qui perdent peut-être de l'argent. Laissez la marge vide et complétez les coûts.

### 5. Lire une seule journée

La dépense est rapportée par jour ; les commandes arrivent quand elles arrivent, et un clic d'aujourd'hui peut convertir quelques jours plus tard dans la fenêtre de clic. Le ROAS quotidien varie pour des raisons qui n'ont rien à voir avec la performance. Lisez des fenêtres de 7 ou 30 jours, et comparez ce qui est comparable.

## Transformer les chiffres en décisions

La marge par produit sert à déplacer du budget. Un jeu de règles simple et défendable :

1. **Classez les produits par marge nette après publicité**, les pertes en premier.
2. **Mettez en pause ou excluez les produits qui perdent de l'argent** sur une période significative, avec un seuil de perte minimal pour que le bruit ne déclenche rien.
3. **Laissez tourner les produits encore en test** : un produit qui a peu de dépense n'a encore rien prouvé, dans un sens comme dans l'autre.
4. **Arrêtez de promouvoir ce que vous ne pouvez pas expédier.** Un produit en rupture avec des annonces actives, c'est de l'argent perdu.
5. **Plafonnez les enchères** pour qu'une campagne ne puisse pas trop dépenser pendant que vous ne regardez pas.

L'[API Ads d'OpenAI](https://developers.openai.com/ads/api-reference/campaigns) expose les campagnes et les groupes d'annonces sur lesquels portent ces décisions : elles peuvent donc être appliquées depuis un outil plutôt qu'à la main dans l'Ads Manager.

## Comment Convrail le calcule

Convrail fait ce rapprochement pour vous. Il rattache chaque commande payée à ChatGPT Ads ou à ChatGPT organique selon la règle ci-dessus et conserve la preuve sur la commande ; il importe chaque jour la dépense par produit depuis votre compte ChatGPT Ads ; et il lit le coût d'achat des variantes dans votre boutique. L'écran Rentabilité affiche ensuite, pour chaque produit sur les 30 derniers jours, la dépense publicitaire, le chiffre d'affaires, les unités vendues, la marge nette et le ROAS, avec les produits à perte en premier, les produits en rupture encore promus signalés, et les coûts manquants ou les devises différentes indiqués plutôt que devinés.

Depuis le même écran, vous pouvez limiter vos annonces aux produits qui rapportent, mettre une campagne en pause ou changer une enchère, et activer des garde-fous quotidiens (garder les annonces sur les produits qui ne perdent pas d'argent, ne jamais laisser une enchère dépasser votre plafond), chaque changement étant inscrit dans un journal. Voir l'[attribution des ventes](/fr/attribution/) et les offres sur la [page des tarifs](/fr/tarifs/).

| Tâche | Par vous-même | Avec Convrail |
| --- | --- | --- |
| Publicité ou organique, par commande | Analyser les URL d'atterrissage et les référents, conserver la preuve | Règle fixe, preuve conservée sur chaque commande |
| Dépense par produit | Appeler l'API insights chaque jour, segmenter par produit, stocker | Importée chaque jour depuis votre compte ChatGPT Ads |
| Marge par produit | Rapprocher dépense, lignes de commande et coûts d'achat, gérer les devises | Marge nette et ROAS par produit, pertes en premier |
| Passer à l'action | Mettre en pause, changer les enchères et les sélections de produits dans l'Ads Manager | Ne diffuser que ce qui rapporte, garde-fous, journal des changements |

## En résumé

Le ROAS est un rapport entre chiffre d'affaires et dépense ; la rentabilité, c'est ce qui reste une fois la marchandise et la publicité payées. Calculez le ROAS sur les seules commandes attribuées à la publicité, remboursements déduits, dans une seule devise, sur une fenêtre assez longue pour être significative. Puis allez un cran plus loin et calculez la marge nette par produit, car c'est elle qui vous dit quelles annonces garder.