Ouvrir le Studio

Google Ads Product Performance

Récupère les performances produit (Shopping / Performance Max) depuis Google Ads

Info

Nouveautés — Mai 2026 — Les champs de sortie sont désormais sélectionnables via deux groupes de cases à cocher dans Settings : Core Fields (colonnes présentes sur chaque ligne — défauts : productItemId, impressions, clicks, cost, conversions, roas) et Segment Fields (segments à projeter quand Include Segments est activé — défaut : productBrand uniquement). Réduire la projection diminue directement le nombre de colonnes et indirectement le nombre de lignes (moins de colonnes segment → GROUP BY GAQL plus grossier).

À quoi sert le node Google Ads Product Performance ?

Le node Google Ads Product Performance récupère les performances au niveau produit depuis Google Ads — une ligne par (campagne, produit) sur la période sélectionnée — pour les campagnes Shopping et Performance Max. Il renvoie impressions, clics, coût (devise du compte, pas en micros), conversions, valeur de conversion, les métriques dérivées CTR / CVR / ROAS, ainsi que les identifiants produit (item ID, titre) et — en option — la taxonomie complète (marque, product type L1-L5, les 5 custom labels Merchant Center).

Le node est basé sur la ressource GAQL shopping_performance_view. L’agrégation est toujours au niveau (campagne, produit) — segments.date n’est jamais projeté dans le SELECT, ce qui divise le nombre de lignes par N (jours) par rapport à un découpage jour par jour.

Cas d’usage courants :

  • Alimenter un pipeline de scoring / labellisation produit (style Product Hero)
  • Classer les SKUs top / bottom par ROAS ou CVR
  • Joindre les performances avec le catalogue marchand en aval
  • Investiguer pourquoi une cohorte custom-label (ex. custom_label_1 = "heroes") sur-performe ou sous-performe

Pour des rapports au niveau campagne ou mot-clé, utilisez plutôt Google Ads Campaign Reports.

Configuration rapide

Connectez une intégration Google Ads

Builder → Intégrations → Google Ads. Authentifiez le client OAuth du compte Merchant Center dont vous voulez requêter les produits.

Ajoutez le node au canvas

IntégrationsGoogleGoogle Ads Product Performance.

Choisissez le compte et la campagne

Inline : sélectionnez un customer Google Ads dans le dropdown, puis une campagne Shopping / Performance Max (recherchable). Le sélecteur impose une seule campagne par node — Product Performance renvoie beaucoup de lignes et une campagne par node garde le payload gérable.

Runtime : activez le toggle Use variables for customer ID and campaign ID et câblez les ancres customer/campaign depuis un node d’entrée Google Ads Campaigns en amont.

Choisissez une période

Presets standards (Last 7 days, Last 30 days, Month-to-date, …). Les conventions matchent la UI Google Ads — “Last N days” exclut aujourd’hui (hier et les N-1 jours d’avant).

(Optionnel) Activez les segments et les filtres

Cochez Include Segments pour ajouter marque, product type L1-L5 et les 5 custom labels à chaque ligne. Une fois les segments activés, la sous-section Custom label filters devient éditable et vous permet de restreindre le résultat à des valeurs spécifiques de custom label Merchant Center (ex. seulement les SKUs taggés heroes).

(Optionnel) Choisissez les champs de sortie

Deux groupes de cases à cocher en bas de Settings contrôlent la forme du payload : Core Fields (12 clés toujours disponibles) et Segment Fields (11 clés, gated par Include Segments). Décochez ce dont vous n’avez pas besoin pour réduire la réponse — utile quand vous pipez dans des nodes aval basés sur NATS.

Paramètres de configuration

Champs obligatoires

integration_id string required

L’intégration Google Ads utilisée pour authentifier l’appel API. Inline ou externalisée via le toggle Use a variable for integration.

customer_id string required

Customer ID Google Ads (sans tirets), ex. 1234567890. Inline ou externalisé via le toggle Use variables.

campaign_ids string required

Exactement un campaign ID (Shopping ou Performance Max). Stocké comme une liste à un seul élément en interne. Pour requêter plusieurs campagnes, ajoutez un node par campagne et mergez en aval.

date_range string required default: last_7_days

Plage de dates prédéfinie. Mêmes presets que Google Ads Campaign Reports et alignés sur la UI Google Ads — last_N_days finit hier, month_to_date / year_to_date incluent aujourd’hui.

Champs optionnels

include_segments boolean default: false

Quand activé, le SELECT GAQL projette la taxonomie produit (productBrand, productTypeL1..L5) et les 5 custom labels Merchant Center (customAttribute0..4). Ces colonnes additionnelles apparaissent sur chaque ligne en sortie.

custom_label_filters list default: []

Filtres d’égalité côté serveur sur les custom labels Merchant Center. Chaque entrée a la forme {slot: 0..4, value: "string"}slot correspond à l’une des 5 colonnes custom_label du feed Merchant Center. Les filtres sont appliqués dans la clause WHERE GAQL — seules les lignes qui matchent sont renvoyées, ce qui réduit fortement le payload sur les gros catalogues.

Gated par include_segments : la zone de filtre est désactivée tant que les segments ne sont pas activés (le slot filtré doit être présent dans le SELECT).

custom_label_filter_combinator string default: AND

Comment combiner plusieurs filtres : AND (tous doivent matcher) ou OR (au moins un match).

Limitation GAQLOR n’est valide que quand tous les filtres ciblent la même slot (le node traduit en IN (...)). Un OR cross-slot n’est pas exprimable en GAQL : le bouton de sauvegarde est bloqué avec un toast d’erreur si vous le configurez.

core_fields list default: ["productItemId", "impressions", "clicks", "cost", "conversions", "roas"]

Sous-ensemble des 12 clés “core” à projeter sur chaque ligne. Clés disponibles : campaignId, campaignName, productItemId, productTitle, impressions, clicks, cost, conversions, conversionsValue, ctr, cvr, roas. Liste vide = toutes les clés (back-compat legacy).

La sélection pilote à la fois le SELECT GAQL et la projection JSON — les clés décochées ne sont pas fetchées depuis Google Ads. Quelques ancres restent dans le SELECT même quand la clé est décochée (campaign.id, segments.product_item_id, customer.currency_code) parce que le runner en a besoin pour le logging et le row-skip. Les compteurs uniques (uniqueCampaigns, uniqueProducts) sont calculés depuis les lignes API brutes, donc restent corrects même si vous décochez campaignId / productItemId.

segment_fields list default: ["productBrand"]

Sous-ensemble des 11 clés segment à projeter sur chaque ligne quand include_segments est ON. Clés disponibles : productBrand, productTypeL1..L5, customAttribute0..4. Liste vide = toutes les clés (back-compat legacy).

Chaque segment coché est une dimension GROUP BY GAQL — cocher plus de segments signifie une agrégation plus fine et plus de lignes en sortie, pas seulement plus de colonnes. Inversement, décocher des segments rend le GROUP BY plus grossier et collapse les lignes côté serveur.

Externalisation

use_variables boolean default: false

Toggle atomique : customer ID et campaign ID deviennent tous les deux des variables ensemble, alimentés par des handles d’entrée amont.

use_integration_variable boolean default: false

Externalise l’intégration. Force use_variables à ON parce que le panneau de réglages ne peut pas charger la liste des customers/campagnes sans intégration concrète.

Que produit le node en sortie ?

Un objet JSON avec un tableau rows. Chaque ligne est une combinaison (campagne, produit) sommée sur la période.

{
  "customerId": "1234567890",
  "startDate": "2026-01-01",
  "endDate": "2026-01-31",
  "rows": [
    {
      "campaignId": "1111111111",
      "campaignName": "Shopping FR",
      "productItemId": "sku-123",
      "productTitle": "Red Sneakers",
      "impressions": 1000,
      "clicks": 100,
      "cost": 150.5,
      "conversions": 10,
      "conversionsValue": 500.0,
      "ctr": 0.1,
      "cvr": 0.1,
      "roas": 3.32
    }
  ],
  "meta": { "currencyCode": "EUR", "rowCount": 1 }
}

Avec include_segments: true

Chaque ligne gagne la taxonomie produit et les 5 custom labels Merchant Center :

{
  "productBrand": "Nike",
  "productTypeL1": "Apparel",
  "productTypeL2": "Footwear",
  "productTypeL3": "Sneakers",
  "productTypeL4": "",
  "productTypeL5": "",
  "customAttribute0": "season-spring",
  "customAttribute1": "heroes",
  "customAttribute2": "",
  "customAttribute3": "",
  "customAttribute4": ""
}
Info

Le coût est renvoyé en devise du compte, pas en micros Google Ads. Les métriques dérivées (ctr, cvr, roas) sont calculées sur les totaux agrégés avec des protections contre la division par zéro (fallback à 0). Les lignes sans productItemId sont supprimées — les jointures produit nécessitent un ID non vide.

Exemples d’utilisation

Exemple 1 : Pipeline de scoring produit

Google Ads Campaigns → Google Ads Product Performance → LLM (rank/label) → Google Sheets Writer

Configuration :

{
  "customer_id": "{{customerId}}",
  "campaign_ids": "{{campaignIds}}",
  "date_range": "last_30_days",
  "include_segments": true,
  "use_variables": true
}

Exemple 2 : Zoom sur une cohorte custom-label

Restreint le résultat aux SKUs taggés “heroes” dans custom_label_1 du feed Merchant Center, et pipe les lignes dans un Sheet pour inspection.

Google Ads Product Performance → JSON Path Extractor → Google Sheets

Configuration :

{
  "customer_id": "1234567890",
  "campaign_ids": "9999999999",
  "date_range": "last_30_days",
  "include_segments": true,
  "custom_label_filters": [
    { "slot": 1, "value": "heroes" }
  ],
  "custom_label_filter_combinator": "AND"
}

Exemple 3 : OR multi-valeur sur la même slot

Comme ci-dessus, mais récupère à la fois “heroes” et “villains”. Le OR même-slot est réécrit en IN (...) GAQL.

Configuration :

{
  "custom_label_filters": [
    { "slot": 1, "value": "heroes" },
    { "slot": 1, "value": "villains" }
  ],
  "custom_label_filter_combinator": "OR"
}

Bonnes pratiques

Warning

Taille du payload — Product Performance peut renvoyer des dizaines de milliers de lignes sur de gros comptes Shopping. Utilisez custom_label_filters pour réduire le résultat avant de piper dans les nodes aval (basés sur NATS) ; le filtre est côté serveur, donc il réduit directement les octets envoyés sur le réseau.

Info

Les dimensions produit (marque, product type, custom labels) dépendent de ce qui est rempli dans le feed marchand. Des chaînes vides sont normales pour les comptes qui ne remplissent pas toutes les colonnes Merchant Center.

Info

Les 5 slots custom_label_0..4 sont des colonnes texte libre du feed Merchant Center. Chaque marchand les utilise différemment. Inspectez votre propre feed pour savoir ce que contient chaque slot (patterns typiques : saison, genre, tier de marge, promo, statut de performance).

Info

Levier sur la forme du payload — Utilisez Core Fields pour retirer les colonnes inutiles (gain linéaire sur le nombre de colonnes) et Segment Fields pour rendre le GROUP BY GAQL plus grossier (gain non linéaire sur le nombre de lignes pour les comptes avec une taxonomie marchande profonde). Les deux sont indépendants — vous pouvez garder tous les segments pour filtrer mais ne projeter que productBrand en sortie.

Problèmes courants

Tableau de lignes vide alors que le customer + la campagne semblent OK

La campagne sélectionnée n’est probablement pas Shopping ou Performance Max (shopping_performance_view ne renvoie de lignes que pour celles-ci). Choisissez une campagne Shopping / PMax ou vérifiez le type de campagne dans la UI Google Ads.

Le toggle `OR` est désactivé avec un hint rouge

GAQL ne sait exprimer OR que quand tous les filtres ciblent la même slot custom-label. Soit passez en AND, soit gardez toutes les lignes de filtre sur une seule slot. Le bouton de sauvegarde est bloqué avec un toast sinon.

La section Custom label filters est grisée

La sous-section filtres est gated par Include Segments — cochez la checkbox segments pour l’activer. Raison : filtrer sur une slot custom_attribute* force sa présence dans le SELECT GAQL, ce qui n’a de sens qu’une fois les segments activés.

Un SKU apparaît sur plusieurs lignes quand les segments sont activés

Cela indique qu’une des dimensions segment (marque, product type, un custom label) a changé de valeur en cours de période pour ce SKU dans le feed marchand. GAQL groupe par chaque segment projeté, donc le SKU est splité entre lignes — une par combinaison d’attributs. Les totaux sont quand même corrects à la somme ; c’est un signal de volatilité du feed qu’il vaut la peine d’investiguer.

La campagne sélectionnée disparaît du dropdown

La campagne a été archivée ou renommée dans Google Ads après la sauvegarde du workflow. Réouvrez les settings, l’effet de validation supprime l’ID obsolète et vous pouvez en re-choisir une valide.

Une colonne attendue manque dans les lignes en sortie

La colonne est décochée dans Core Fields (ou Segment Fields si c’est un segment). Réouvrez Settings et cochez-la. Les workflows sauvegardés avant Mai 2026 reprennent la projection core par défaut (6 clés) à la première réouverture — recochez les colonnes sur lesquelles vous comptiez.

Nodes associés