EMAX Studio Blog
Comment configurer la Meta Ads CLI : tutoriel pas à pas pour 2026
Manuel Mrosek · 2026-06-16 · — vues
Comment configurer la Meta Ads CLI : tutoriel pas à pas pour 2026
Pour configurer la Meta Ads CLI, tu crées un System User dans Business Manager, tu génères un token qui n'expire jamais avec les permissions ads_management, ads_read et business_management, tu rattaches ton Ad Account et ta Page comme actifs, puis tu pointes la CLI sur ce token via un fichier de configuration. L'ensemble du processus prend environ 45 minutes si tu disposes d'un accès admin à un Business Manager, d'une page Facebook et d'un moyen de paiement vérifié sur ton Ad Account.
Ce tutoriel est le pendant approfondi de notre vue d'ensemble sur la diffusion de publicités Facebook avec des agents IA. Cet article-là explique pourquoi une configuration pilotée par CLI bat les clics dans Ads Manager dès que tu gères plus que quelques campagnes. Celui-ci est le guide pratique : chaque étape, chaque message d'erreur rencontré pendant qu'on a monté notre propre stack, et un walkthrough d'une vraie première campagne à la fin.
Ce que fait réellement la Meta Ads CLI
La « Meta Ads CLI » n'est pas un binaire officiel unique. C'est une fine couche d'automatisation côté serveur qui s'intercale entre tes scripts et la Meta Marketing API. Tu écris du code Python ou Node, la CLI gère l'authentification, la signature des requêtes et le token System User à longue durée de vie, et tes campagnes partent à travers graph.facebook.com/v23.0/ sans que personne ne clique dans Ads Manager.
Le plus dur n'est pas le code du wrapper — c'est cent lignes. Le plus dur, c'est le rituel de configuration en 7 étapes dans Business Manager qui produit un token que Meta acceptera vraiment pour du trafic de production. Ce rituel supprime la danse du refresh OAuth et la douleur de l'expiration de token qui finit par casser toute automatisation basée sur navigateur.
Le retour sur investissement est réel. Une fois la stack CLI en place, tu peux lancer une campagne avec 6 variantes d'annonces en moins de 90 secondes, sortir la performance de la veille dans un rapport quotidien à 7h00 via cron, et mettre en pause automatiquement les annonces sous-performantes — sans jamais te connecter à Ads Manager.
Prérequis
Avant de commencer, assure-toi d'avoir tout ce qui suit en place. Sauter l'un d'eux t'envoie dans un terrier de lapin de 2 heures plus tard.
Il te faut un compte Meta Business Manager avec des droits admin — les comptes Facebook personnels ne fonctionnent pas pour les tokens System User. Il te faut une Page Facebook où tu es listé comme admin, pas seulement comme éditeur. Il te faut un Meta Ad Account à l'intérieur de ce Business Manager avec un moyen de paiement vérifié et au moins un pays approuvé pour la facturation. Il te faut un Pixel (ou « Dataset » dans la nouvelle terminologie) configuré pour le site web vers lequel tu envoies du trafic. Et il te faut Python 3.10+ ou Node 18+ installé localement avec la capacité d'installer des paquets.
Si tu n'as pas encore de Pixel, crées-en un avant de continuer. Même si tu prévois d'utiliser uniquement la Conversions API (CAPI) — comme nous le faisons — tu as quand même besoin de l'ID du Pixel comme adresse de routage pour les événements côté serveur.
La configuration en 7 étapes
Ces étapes sont séquentielles. Chacune déverrouille la suivante. Sauter une étape casse la chaîne d'une manière difficile à déboguer parce que les messages d'erreur de Meta sont souvent trompeurs.
Étape 1 : Créer un System User dans Business Manager
Va dans Business Settings → Users → System Users. Clique sur « Add » et crée un nouveau System User. Le nom n'a pas d'importance pour l'API, mais il en a pour ta santé mentale future — nomme-le quelque chose comme your-brand-agent pour te souvenir de ce qu'il fait dans six mois. Choisis le rôle « Admin » (et non « Employee ») parce qu'un System User sans droits admin ne peut pas gérer les Custom Conversions ni les événements Pixel.
Quand on a monté notre stack, on a créé emaxstudioagent. L'ID du System User est attribué automatiquement (nombre à 15 chiffres). Note-le.
Étape 2 : Créer une app Developer avec le cas d'usage Marketing API
Va sur developers.facebook.com → My Apps → Create App. Choisis le cas d'usage « Marketing API » si tu le vois dans le menu déroulant. Si tu ne vois que « Other », c'est bien aussi — les tokens System User fonctionnent dans les deux cas. L'interface en allemand l'appelle « Werbeanzeigen mit Marketing API » alors que l'interface en anglais l'appelle juste « Marketing API » ou « Other ». Les deux produisent des tokens identiques.
Règle l'app sur le type Business, pas Consumer. Ajoute le produit Marketing API à l'app depuis la barre latérale gauche. L'app démarre en Development Mode. Tu dois la passer en Live Mode (voir plus bas) avant que le token System User fonctionne pour de vraies annonces.
Pour passer en Live Mode, Meta exige une URL publique de politique de confidentialité et une icône d'app (PNG 1024×1024). Les deux ne sont pas négociables. L'icône d'app n'a pas besoin d'être peaufinée — un placeholder fait l'affaire — mais l'URL doit réellement renvoyer vers une page de politique de confidentialité. La nôtre est hébergée sur /legal sur notre domaine principal.
Étape 3 : Générer un token System User qui n'expire jamais
Retourne dans Business Settings → System Users → [ton System User] → clique sur « Generate New Token ». Sélectionne l'app que tu viens de créer à l'étape 2. Puis sélectionne les permissions :
ads_management— requise pour créer, éditer et mettre en pause des campagnesads_read— requise pour récupérer les insights et les données de reportingbusiness_management— requise pour gérer les actifs et les Custom Conversions
Règle l'expiration sur « Never ». Les tokens System User sont les seuls tokens Meta qui n'expirent vraiment jamais — les User Access Tokens plafonnent à 60 jours, les Page Tokens dépendent du User Token dont ils sont dérivés. C'est tout l'intérêt d'utiliser un System User plutôt qu'OAuth pour de l'automatisation backend.
Copie le token immédiatement. Meta ne l'affiche qu'une seule fois. Range-le dans un gestionnaire de secrets ou un fichier .env avec chmod 600. Ne le commit jamais dans git.
Étape 4 : Rattacher l'Ad Account et la Page comme actifs
Le System User existe mais n'a accès à rien pour l'instant. Tu dois explicitement lui assigner des actifs. Dans Business Settings → System Users → [ton System User] → clique sur « Add Assets ».
Assigne ton Ad Account avec permission complète (« Manage Campaigns » + « Manage Performance »). Assigne ta Page avec permission complète. Assigne ton Pixel/Dataset avec permission complète. Si tu as plusieurs Ad Accounts et que tu veux que la CLI les gère tous, assigne-les un par un.
Quand on a configuré ça, on a assigné act_975780295197610 (notre Ad Account) et la Page 1113585798495892 (notre page EMAX Studio) plus le Pixel 1464075091373537. Le préfixe act_ sur les IDs d'Ad Account est obligatoire quand tu appelles l'API — il fait partie de l'ID réel, pas d'une convention de formatage.
Étape 5 : Assigner la permission « Page verwalten » / « Manage Page »
C'est l'étape qui piège presque tout le monde la première fois. L'étape 4 a assigné la Page comme actif, mais le niveau de permission par défaut est « Anzeigen erstellen » / « Create Ads » — ce qui ne suffit pas. Le System User a besoin de « Page verwalten » / « Manage Page » pour publier des créatifs qui référencent la Page.
Si tu sautes ça, chaque appel API de création d'annonce renverra une erreur générique « permission denied » qui ne mentionne pas la Page. Tu vas passer des heures à vérifier les scopes de ton token et les permissions de l'Ad Account alors que le vrai problème est à un clic de profondeur dans les paramètres d'actif de la Page.
Clique sur la Page dans la liste d'actifs, déroule jusqu'aux permissions, et active « Manage Page » pour le System User. Sauvegarde.
Étape 6 : Installer la CLI et créer un fichier de configuration
Pour Python, installe le SDK officiel :
pip install facebook-business
Pour Node, utilise le client maintenu par la communauté :
npm install facebook-nodejs-business-sdk
Crée un fichier de configuration à ~/.meta-ads/config.json (ou là où ta stack range les secrets) :
{
"access_token": "EAA...your-system-user-token",
"app_id": "910292175368026",
"app_secret": "your-app-secret",
"ad_account_id": "act_975780295197610",
"page_id": "1113585798495892",
"pixel_id": "1464075091373537",
"api_version": "v23.0"
}
Règle les permissions : chmod 600 ~/.meta-ads/config.json. L'app_secret est optionnel pour les tokens System User mais permet la signature appsecret_proof, que Meta recommande pour la production.
Étape 7 : Lancer la première commande de test
Vérifie que tout fonctionne en listant tes campagnes. En Python :
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
import json
cfg = json.load(open("/path/to/config.json"))
FacebookAdsApi.init(access_token=cfg["access_token"])
account = AdAccount(cfg["ad_account_id"])
campaigns = account.get_campaigns(fields=["name", "status", "objective"])
for c in campaigns:
print(c["name"], c["status"], c["objective"])
Si ça renvoie une liste (même une liste vide, si tu n'as pas encore de campagnes), c'est terminé. Si ça lève OAuthException ou Permission denied, retourne au tableau d'erreurs ci-dessous.
Erreurs de configuration courantes et comment les corriger
Voici les 8 erreurs qui nous ont mordus pendant le build. Chacune nous a coûté de vraies heures. Épargne-toi la peine.
| Erreur | Ce que ça signifie vraiment | Correction |
|---|---|---|
Cannot use Custom Conversion with 0 events as promoted_object |
Ta Custom Conversion n'a pas encore déclenché, donc Meta refuse d'optimiser dessus | Optimise d'abord pour LANDING_PAGE_VIEWS ; bascule sur OFFSITE_CONVERSIONS après que 50+ événements aient déclenché |
App must be Live, not Development |
Tu as généré un token mais tu n'as jamais passé l'app en Live Mode | Ajoute l'URL de politique de confidentialité + l'icône d'app, puis bascule App Review → Live dans le dashboard de l'app |
Use Case must be Marketing API, not Other (l'interface varie) |
Le libellé allemand « Werbeanzeigen mit Marketing API » correspond à l'anglais « Marketing API ». Les deux fonctionnent pour les tokens System User. | Les deux cas d'usage marchent ; ignore le nom du menu déroulant et continue |
Instagram requires EU Pay-or-Consent + Page Linkage |
Les annonces placées sur Instagram échouent avec HARD_ERROR sur le trafic UE si ton compte IG n'est pas lié à une Page qui a Pay-or-Consent activé | Lie ton compte Instagram Business à une Page dans Business Settings → Accounts → Instagram |
bid_strategy is required |
Création d'Ad Set sans le champ bid_strategy |
Ajoute "bid_strategy": "LOWEST_COST_WITHOUT_CAP" au payload de l'Ad Set |
targeting_automation.advantage_audience is required |
Le nouveau champ en v23.0 est obligatoire | Ajoute "targeting_automation": {"advantage_audience": 1} (ou 0) |
video_feeds placement is deprecated |
Ce placement a été retiré en v23.0 | Retire video_feeds de ta liste de placements ; utilise feed et instagram_reels à la place |
image_hash is required for video_data |
Les créatifs vidéo ont besoin d'une vignette enregistrée comme hash | Extrais une frame avec ffmpeg -i video.mp4 -ss 00:00:01.5 -frames:v 1 thumb.jpg, upload via /adimages, utilise le hash renvoyé |
Celle de la Custom Conversion est la plus vicieuse parce que le message d'erreur te dit techniquement ce qui ne va pas, mais le contournement n'est pas évident. Une Custom Conversion toute neuve a zéro événement dans le système de Meta. Meta refuse d'optimiser une campagne pour quelque chose dont il n'a pas de données historiques. L'astuce, c'est de lancer la campagne optimisée pour Landing Page Views d'abord, laisser 50+ conversions déclencher via CAPI, puis basculer le promoted_object de l'Ad Set sur OFFSITE_CONVERSIONS avec ton ID de Custom Conversion. Après ça, l'optimisation fonctionne vraiment.
Walkthrough d'une vraie première campagne
Voici ce qu'on a lancé comme premier test en live. Vraies valeurs, vrai flux, vrais résultats.
Créer la campagne. Objectif : OUTCOME_TRAFFIC (basculé ensuite sur OUTCOME_SALES une fois qu'on a eu des données de conversion). Statut : PAUSED au départ pour que l'Ad Set et les Ads puissent être créés en dessous avant de tout basculer sur ACTIVE en une seule fois. Le budget vit au niveau de l'Ad Set dans notre setup.
Créer l'Ad Set. Budget quotidien : 1000 (cents = 10 $/jour). Optimisation : LANDING_PAGE_VIEWS. Stratégie d'enchère : LOWEST_COST_WITHOUT_CAP. Ciblage : pays ["US", "GB", "CA"], âge 25 à 55, langue anglais. Placements : feed, instagram_reels, stories, marketplace. Targeting automation : {"advantage_audience": 1}.
Construire les créatifs. Trois créatifs image et trois créatifs vidéo — six annonces au total. Pour les images, on a utilisé notre propre sortie EMAX Studio (eat your own dogfood) : trois hooks, trois fonds aux couleurs de la marque, le tout en 1080×1080. Pour les vidéos, trois reels verticaux de 15 secondes avec sous-titres mot à mot et voix IA, générés via notre propre pipeline (détaillée dans Comment créer une campagne marketing IA pas à pas). Chaque créatif vidéo a besoin d'un image_hash pour la vignette — extrais une frame à 1,5 seconde avec ffmpeg, upload-la sur /adimages, et utilise le hash renvoyé dans le bloc video_data.
Activer. Bascule la Campaign, puis l'Ad Set, puis les six Ads sur ACTIVE. La revue Meta passe généralement en 15 à 30 minutes. Les annonces rejetées remontent par annonce via ad.get('effective_status').
Rapport quotidien. Un script meta_daily_report.py tourne à 7h00 heure de Berlin via cron. Il récupère les insights, formate dépense / CTR / CPM / conversions dans un message Telegram, et met automatiquement en pause toute annonce avec un CTR sous 0,5 % après 100+ impressions. Les premières 48 heures ont produit 4 200 impressions, 78 clics (CTR 1,86 %), et 12 Quick Scans complétés à 1,67 $ par conversion — assez de signal pour basculer l'optimisation de Landing Page Views vers OFFSITE_CONVERSIONS contre la Custom Conversion QuickScanComplete le troisième jour.
Pièges à éviter
Plusieurs choses vont te brûler. On a appris chacune à la dure.
Ne hardcode pas les tokens dans git. Même les repos privés. Les tokens fuient à travers les logs CI, les forks accidentellement publics, et les commits faits avant qu'un repo ne change de visibilité. Lis toujours depuis des variables d'environnement ou un fichier de config en chmod-600 en dehors du repo.
Ne saute pas la permission Page Manage de l'étape 5. Les erreurs que tu obtiens ressemblent à des erreurs sur l'Ad Account ou le token. Elles ne le sont pas. Re-vérifie d'abord la permission de l'actif Page chaque fois que tu vois un vague « permission denied » sur la création de créatif.
Ne déploie pas avec l'app developer encore en Development Mode. Le token fonctionne pour l'utilisateur qui l'a créé mais échoue silencieusement pour tout autre contexte System User. Passe en Live Mode avant de faire tourner quoi que ce soit sur un serveur.
N'oublie pas l'image_hash pour les créatifs vidéo. Sans ça, la création complète de l'Ad échoue avec une erreur trompeuse à propos de video_data.
Ne saute pas CAPI si tu prévois de passer à l'échelle. Les pixels navigateur perdent 30 à 50 % des événements à cause d'iOS ATT, des bloqueurs de pub et de la prévention du tracking. La Conversions API côté serveur en récupère la plupart — un week-end de travail qui rembourse la première semaine où tu montes en dépense pub.
Questions fréquentes
Combien ça coûte de mettre en place la Meta Ads CLI ?
La mise en place elle-même est gratuite. La Marketing API, les tokens System User, Business Manager et tous les outils developer sont à coût zéro — tu paies seulement les annonces que tu fais tourner. Prévois 4 à 6 heures de configuration la première fois et 30 minutes ensuite.
Est-ce que je peux faire tourner plusieurs ad accounts à travers une seule install de CLI ?
Oui, et c'est l'une des raisons principales pour lesquelles les agences utilisent des tokens System User. Ajoute chaque Ad Account comme actif dans Business Settings, et tu peux cibler n'importe lequel en changeant l'ad_account_id dans ta config ou en le passant en paramètre. Un seul token System User peut gérer des centaines d'Ad Accounts à travers plusieurs Business Managers si les permissions sont en place.
Et une Google Ads CLI — la configuration est-elle similaire ?
Le concept est similaire, mais la configuration de Google est plus rugueuse. Google exige une approbation de developer token qui peut prendre 7 à 21 jours, des refresh tokens OAuth2 qui expirent périodiquement, et une couche supplémentaire de permissions MCC (Manager Account). Le token System User de Meta est franchement le plus simple des deux systèmes. Si tu fais tourner les deux plateformes, configure Meta en premier pour apprendre les patterns.
Comment je fais tourner les tokens en toute sécurité si l'un est compromis ?
Génère un nouveau token System User (mêmes permissions, même expiration « Never »), mets à jour ta config, teste que le nouveau token fonctionne, puis révoque l'ancien. Meta te laisse garder plusieurs tokens actifs pour le même System User simultanément, donc tu peux faire la rotation sans temps d'arrêt. Si un token fuit, révoque immédiatement et audite la dépense pub récente via l'API pour des campagnes non autorisées.
Comment la Conversions API (CAPI) s'intègre-t-elle dans ce setup ?
CAPI est un système séparé mais complémentaire. La Meta Ads CLI gère campagnes, ad sets et ads. CAPI envoie des événements de conversion côté serveur sur lesquels ces ads optimisent. Les deux utilisent le même Pixel ID. Les événements CAPI circulent indépendamment de tout pixel navigateur — ils sont la fondation d'un tracking GDPR-clean parce qu'aucun cookie n'est impliqué et que les PII sont hashées avant transmission. La vue d'ensemble Facebook Ads avec agents IA couvre comment CAPI s'intègre dans la stack d'automatisation plus large.
Le bilan honnête
La Meta Ads CLI n'est pas magique. C'est une manière disciplinée de retirer trois choses de ton workflow : les refresh de tokens OAuth, les connexions manuelles à Ads Manager et le coût en erreur humaine de cliquer à travers 14 paramètres chaque fois que tu lances une annonce. Une fois en route, tu fais en 90 secondes ce qui prenait 30 minutes.
La configuration est tatillonne parce que les outils de Meta le sont. Mais les étapes sont déterministes. Suis exactement la configuration en 7 étapes, surveille les 8 erreurs du tableau, et tu auras une stack ads de qualité production d'ici la fin de l'après-midi. Pour la vue d'ensemble de comment la CLI s'imbrique avec les créatifs IA et le reporting quotidien, regarde notre récap sur les Facebook Ads avec agents IA et l'actualité IA de la semaine 18, 2026 pour ce qui bouge dans l'écosystème pub cette année.
Une fois la CLI en vie, la question devient quels créatifs lui fournir. Fais passer ta landing page à travers un scan d'AI-readiness gratuit de 90 secondes sur emax.studio — tu obtiens un score, une liste de manques de conversion et un brief de campagne prêt à lancer en moins de deux minutes.
Prêt à créer vos propres reels vidéo IA ?
5 crédits gratuits. Sans carte bancaire.
Commencer gratuitement