DonnIA
Toutes les ressources
GuideClaude Skills & MCP30 min

Brancher une régie publicitaire

Lire les performances Meta et Google Ads depuis un agent, en lecture seule et sans jamais toucher aux budgets.


Chaque lundi, quelqu'un se connecte à trois interfaces publicitaires, exporte trois tableaux, les recolle dans un quatrième, et écrit six lignes de commentaire. Ça prend une heure et demie, ça n'apprend rien à personne, et c'est exactement le genre de tâche qu'un agent fait bien : lire des chiffres, les rapprocher, écrire le commentaire.

La tentation immédiate est d'aller plus loin. Puisque l'agent voit que la campagne A gaspille, autant le laisser couper le budget. C'est là que ça devient une mauvaise idée. Un agent qui modifie un budget agit sur un compte bancaire, avec un délai de propagation, sans savoir qu'une opération commerciale démarre jeudi. L'erreur ne se rattrape pas : l'argent est dépensé.

Ce guide branche donc la lecture, et seulement la lecture. L'écriture est traitée à la fin, comme un cas particulier qui demande une validation humaine explicite. Si tu n'en fais que la première partie, tu as déjà récupéré ton heure et demie.

Le périmètre

Trois questions, pas trente métriques. Écris-les avant de toucher à une API.

  • Combien avons-nous dépensé la semaine dernière, par campagne ?
  • Quelles campagnes ont un coût par acquisition qui dérive par rapport à la semaine précédente ?
  • Y a-t-il une campagne qui a arrêté de diffuser sans qu'on l'ait décidé ?

Un endpoint qui ne répond à aucune de ces questions n'a rien à faire dans ton outillage. C'est la même règle que pour n'importe quelle API métier, et elle est encore plus vraie ici, parce que les API publicitaires renvoient des centaines de champs par défaut.

Les chiffres bougent après coup

Les conversions remontent avec du retard, parfois plusieurs jours. Un rapport généré lundi matin sur la semaine écoulée ne donnera pas les mêmes chiffres que le même rapport regénéré le vendredi suivant. Ce n'est pas un bug, c'est le fonctionnement des fenêtres d'attribution. Ton rapport doit dater ce qu'il affiche, sinon quelqu'un finira par croire que les chiffres ont été truqués.

Avant de commencer

  • Un accès en lecture aux comptes publicitaires concernés
  • Python ou Node.js, et de quoi stocker des secrets hors du code
  • Trois questions métier écrites noir sur blanc

1Créer des accès en lecture seule

C'est la première barrière, et la seule qui ne dépend pas du comportement du modèle. Sur les deux régies, la gestion des droits se fait côté plateforme, avec un utilisateur ou un rôle dédié.

Sur Meta, l'API Marketing distingue les permissions par nom. ads_read donne accès aux statistiques. Ne demande pas ads_management si tu ne fais que lire : l'écran de consentement le montrera, et ton jeton pourra faire ce qu'il affiche.

Sur Google Ads, l'accès se fait avec trois éléments distincts : un jeton développeur qui identifie ton application, des identifiants OAuth 2.0 qui authentifient le compte utilisateur, et un en-tête login-customer-id qui indique quel compte est interrogé. Attribue à l'utilisateur OAuth un rôle en lecture dans l'interface Google Ads.

Le jeton décide, pas le prompt

« N'écris rien » dans un prompt système est une consigne. Un jeton en lecture seule est une garantie. Les deux ensemble, c'est bien ; le second seul, c'est suffisant ; le premier seul, ça ne vaut rien.

2Lire les performances Meta

L'API Insights se lit sur le compte publicitaire, avec l'identifiant de compte dans le chemin.

GET /{ad-account-id}/insights
  ?fields=campaign_name,impressions,clicks,spend
  &date_preset=last_7d
  &level=campaign
  &access_token=...

Trois paramètres portent tout le travail. fields choisit les métriques : sans lui, tu récupères un jeu de champs par défaut dont tu n'as pas besoin. date_preset fixe la période (last_7d par exemple), et se remplace par time_range quand tu veux des dates précises. level fixe la granularité : compte, campagne, ensemble de publicités, publicité.

Il existe aussi des breakdowns pour segmenter par appareil, âge ou zone géographique. Ne les active pas au premier jet : chaque segmentation multiplie le nombre de lignes renvoyées, donc le nombre de jetons consommés.

3Lire les performances Google Ads

Google Ads ne fonctionne pas par endpoints mais par requêtes, dans un langage dédié : le GAQL, envoyé à GoogleAdsService.Search ou SearchStream. La syntaxe ressemble à du SQL sans en être.

SELECT
  campaign.name,
  campaign.status,
  metrics.impressions,
  metrics.clicks,
  metrics.cost_micros
FROM campaign
WHERE segments.date DURING LAST_7_DAYS
ORDER BY metrics.cost_micros DESC

Le champ cost_micros est le piège classique : les montants sont exprimés en millionièmes d'unité monétaire. Un coût de 12,50 EUR s'écrit 12500000. Divise par un million avant d'envoyer quoi que ce soit au modèle, sinon tu obtiendras des commentaires sur des budgets de douze millions.

SearchStream est préférable dès que le volume grossit : il renvoie les résultats en flux plutôt qu'en pages.

4Réduire avant d'envoyer au modèle

C'est l'étape qui fait la différence entre un rapport à quelques centimes et un rapport à plusieurs euros. Le modèle n'a pas besoin du JSON brut des deux régies. Il a besoin d'un tableau.

Fais le calcul en code, pas dans le prompt : agrège par campagne, calcule les écarts avec la période précédente, arrondis, convertis les devises si besoin. Un modèle qui fait de l'arithmétique sur cinquante lignes se trompe ; un modèle qui commente un tableau déjà calculé ne se trompe pas.

Campagne              Depense  Var.   Clics  CPA    Var. CPA
Marque - Search       1240 EUR  +4%    3120   8,10   -2%
Generique - Search      880 EUR  -31%   1450   19,40  +58%
Retargeting - Meta      410 EUR  +2%     990   6,20   +1%

Douze lignes de ce genre suffisent à écrire un commentaire hebdomadaire utile.

5Le prompt de commentaire

Tu commentes un rapport publicitaire hebdomadaire pour une equipe qui
connait deja ses campagnes. Voici le tableau des performances, avec la
variation par rapport a la semaine precedente.

Ecris au maximum 5 points. Pour chaque point :
- le fait chiffre ;
- l'hypothese la plus probable, formulee comme une hypothese ;
- la verification a faire pour la confirmer ou l'infirmer.

Contraintes :
1. Ne recommande aucune modification de budget ni de mise en pause.
2. Une variation inferieure a 10 % sur une depense inferieure a 200 EUR
   n'est pas un fait notable. Ne la mentionne pas.
3. Si une variation peut s'expliquer par la fenetre d'attribution plutot
   que par la performance, dis-le.
4. Si rien ne merite d'etre signale cette semaine, ecris "Rien a
   signaler" et arrete-toi.

[TABLEAU]

Le point 1 est volontaire. Un modèle qui recommande de couper une campagne formule une recommandation crédible sur une base incomplète : il ne connaît ni le calendrier commercial, ni les stocks, ni la stratégie de marque. Il signale, un humain décide.

6Si tu passes en écriture, un jour

Trois règles, et aucune n'est négociable.

  • Une action précise, jamais générique. mettre_en_pause(campagne_id, motif) plutôt que modifier_campagne(id, champs). Un outil qui peut tout faire finira par tout faire.
  • Une validation humaine explicite dans le code. Pas une consigne dans le prompt : un point d'arrêt dans le script qui attend une confirmation, avec le montant et le nom de la campagne affichés en clair.
  • Un plafond en dur. Aucune action ne touche à une campagne dont la dépense quotidienne dépasse un seuil que tu fixes. Le plafond est dans le code, pas dans la consigne.

Et garde un compte de service distinct de celui qui lit, avec les seuls droits de cette action. Le jour où le jeton de lecture fuite, il ne peut rien casser.

Quelques prompts pour aller plus loin

ObjectifPrompt à adapter
Définir le périmètreVoici les questions que mon equipe pose sur nos campagnes chaque semaine : [LISTE]. Propose au maximum 4 requetes de rapport qui y repondent, en precisant pour chacune les champs strictement necessaires.
Écrire la requête GAQLEcris une requete GAQL qui renvoie [METRIQUES] par campagne sur les 30 derniers jours, en excluant les campagnes sans impression. Explique chaque champ selectionne.
Vérifier les unitésVoici la reponse brute de l'API Google Ads. Liste les champs dont l'unite n'est pas evidente (micros, pourcentages, fuseaux horaires) et donne la conversion a appliquer.
Chasser les champs inutilesVoici la reponse JSON de l'API Insights. Pour repondre a la question "[QUESTION]", quels champs sont necessaires ? Justifie chaque champ ecarte.
Détecter les arrêts de diffusionVoici les depenses quotidiennes par campagne sur 30 jours. Signale les campagnes dont la diffusion s'est arretee ou effondree sans reprise, avec la date de rupture.

Tu as d’autres ressources comme ça ?

Ce que tu viens de lire est entièrement gratuit. Une nouvelle ressource part chaque semaine dans la newsletter : guides, modèles à copier et liens triés, sans compte à créer.

Cette page est en accès libre, n’hésite pas à la partager.