Google Ads Product Performance
Récupère les performances produit (Shopping / Performance Max) depuis Google Ads
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égrations → Google → Google 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"} où 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 GAQL — OR 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": ""
}
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
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.
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.
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).
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
Sélecteur runtime pour customer + campagne — se pair avec ce node quand use_variables est ON
Node frère orienté campagne / mot-clé — à utiliser quand la granularité produit n’est pas nécessaire
Score, label ou résume les lignes produit
Exporte le tableau de performance produit pour inspection ou dashboarding
Projette des colonnes spécifiques du tableau rows avant de piper plus loin