La Meta Ads CLI è lo strumento ufficiale da riga di comando di Meta per la Marketing API, lanciato il 29 aprile 2026 come parte dei suoi Ads AI Connectors. Si installa come pacchetto Python 3.12+, si autentica con un token di accesso di system user ed esegue comandi secondo lo schema meta ads <resource> <action>. Copre campagne, ad set, annunci, creatività, insights, cataloghi e dataset, con output in tabella, JSON o testo semplice che gli script possono analizzare. Permette a sviluppatori e agenti AI di coding di gestire gli annunci Meta senza scrivere codice per l'API.
Meta è una delle prime piattaforme pubblicitarie a rilasciare un proprio strumento da riga di comando, e ha detto chiaramente a chi era destinato: sviluppatori e agenti AI. Se hai provato a configurarla dal lancio, probabilmente hai trovato i pezzi sparsi su otto pagine di documentazione, un post del blog di lancio e un sacco di commenti di terze parti che non concordano nemmeno sulle basi, come il percorso di installazione e il funzionamento dell'autenticazione.
Questa guida alla Meta Ads CLI mette tutto insieme: l'installazione esatta, la configurazione del token di system user (dove la maggior parte delle persone si blocca), ogni gruppo di comandi, l'uso sicuro da Claude Code o Codex, i limiti attuali, la risoluzione dei problemi e il confronto con la CLI di Ads Uploader. È verificata sulla documentazione attuale di Meta e sull'ultimo pacchetto, la versione 1.1.0, ed è scritta da un team che sviluppa la propria CLI per Meta Ads e lancia annunci tramite la Marketing API ogni giorno.
Perché penso che una CLI sia il modo migliore per caricare annunci
Ne ho già scritto nel nostro confronto tra Meta Ads MCP e CLI, e il nocciolo della questione non è cambiato. Secondo me, una CLI è l'infrastruttura migliore per caricare annunci.
Il primo motivo sono i file. Una CLI ha il controllo nativo del tuo file system. I lanci di solito partono dal tuo disco, o da un cloud storage trasmesso in streaming o sincronizzato sul tuo computer, e una CLI legge quei file di fatto. Un server MCP ospitato, come quello di Meta su mcp.facebook.com/ads, non vede affatto il tuo disco, quindi i file devono arrivare tramite URL, un link di Drive o dati inline. Questo ripiego è il motivo per cui le persone trovano i video più difficili delle immagini con un MCP ospitato. L'elenco degli strumenti MCP di Meta include uno strumento per le creatività descritto come "single-image link ad creative", più strumenti per elencare immagini e video esistenti, ma nessuno strumento dedicato al caricamento e nessun limite documentato sui file. Le immagini sembrano fattibili; i video non sono documentati. (Un MCP installato in locale è diverso: gira sulla tua macchina e può leggere i file, ed è per questo che anche l'MCP di Ads Uploader esiste come pacchetto locale che legge dal disco.)
Il secondo motivo è il modo in cui l'agente trova la sua strada. Trovo la CLI più deterministica. Il feedback della riga di comando funziona come un guardrail: l'output di --help, i codici di uscita e gli errori strutturati indirizzano l'agente lungo un percorso preciso. Con un MCP, l'agente ha bisogno di sapere di più su come gli strumenti si combinano per impostare un lancio, e molti client caricano in anticipo nel contesto ogni definizione di strumento, circa 90 nel caso di Meta. Alcuni client ora caricano gli strumenti su richiesta, ma un MCP può consumare più token e, nella mia esperienza, la CLI è semplicemente più lineare.
L'MCP resta utile per il reporting conversazionale e le domande sull'account, di cui parla la nostra guida al Meta Ads MCP. Questa guida resta sulla CLI.
Cos'è la Meta Ads CLI?
Con le parole di Meta, dalla sua documentazione della Ads CLI: "Ads CLI is a command-line tool for managing Meta advertising from your terminal." È un wrapper Python sopra la Marketing API che gestisce le parti che ogni sviluppatore prima ricostruiva a mano: autenticazione, paginazione, formattazione dell'output e gestione degli errori.
I fatti chiave, al 23 settembre 2026:
- Pacchetto:
meta-adssu PyPI, mantenuto da Meta. L'eseguibile èmeta. - Ultima versione: 1.1.0, rilasciata il 17 giugno 2026.
- Stato: Meta ha lanciato la famiglia Ads AI Connectors (la CLI più il server MCP ospitato) come beta aperta. PyPI classifica il pacchetto come Alpha.
- Licenza: proprietaria. L'installazione è gratuita ma non è open source, e non esistono un repository GitHub pubblico né un issue tracker.
- Destinatari: Meta cita gli sviluppatori che creano integrazioni pubblicitarie, i team operativi che automatizzano tramite script e CI/CD, e "AI agents and tools".
La motivazione dietro la Meta Ads CLI è familiare a chiunque abbia già automatizzato annunci Meta. Un buyer di un'agenzia su r/FacebookAds ha descritto il suo setup pre-CLI fatto di script Python e cron job come "brittle as hell", perché si rompeva ogni volta che Meta cambiava qualcosa nell'API. Uno strumento ufficiale sposta gran parte di quella manutenzione su Meta, anche se non tutta.
Cosa può fare la Meta Ads CLI
L'eseguibile 1.1.0 espone 14 gruppi di risorse. Il riferimento pubblico dei comandi ne elenca la maggior parte, e il pacchetto installato include alcuni extra (product feed, guidance e study) poco documentati nella documentazione web.
| Risorsa | Azioni |
|---|---|
campaign | list, create, get, update, delete |
adset | list, create, get, update, delete |
ad | list, create, get, update, delete |
creative | list, create, get, update, delete |
insights | get |
catalog | list, create, get, update, delete |
product-item | list, create, get, update, delete |
product-set | list, create, get, update, delete |
product-feed | list, create, get, update, delete |
dataset | list, create, get, connect, disconnect, assign-user |
adaccount | list, get, current |
page | list, get |
guidance | list |
study | list |
Non esiste un gruppo autonomo audience, video, image o lead-form. I caricamenti video passano da creative create, e le Custom Audience vengono richiamate all'interno del JSON di targeting dell'ad set.
Le funzioni di automazione sono ciò che rende la Meta Ads CLI adatta agli agenti:
- Tre formati di output:
table(il predefinito, per le persone),json(per agenti ejq) eplain(separato da tabulazioni, perawkecut). --no-inputsopprime i prompt interattivi, così uno script non resta mai bloccato ad aspettare un y/n.- Codici di uscita standard da 0 a 5, così uno script o un agente può diramarsi in base al tipo di errore.
- Variabili d'ambiente e supporto
.env, così i token restano fuori dalla cronologia dei comandi.

Come installare la Meta Ads CLI
I requisiti di Meta sono pochi: Python 3.12 o successivo, e pip o uv.
Il comando di installazione ufficiale è:
pip install meta-ads
La pagina introduttiva di Meta lo fa seguire da un semplice uv sync, che funziona solo se sei già dentro un progetto uv con un pyproject.toml. Dopo una normale installazione con pip non ti serve. Per un setup pulito e ripetibile, usa un ambiente virtuale e fissa la versione:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install meta-ads==1.1.0
meta --version
Ci sono due insidie di installazione che conviene conoscere subito:
- "No matching distribution found for meta-ads." Il pacchetto viene distribuito come wheel compilate, non come distribuzione sorgente. Se il tuo Python è più vecchio della 3.12, o la tua piattaforma non corrisponde a una wheel pubblicata, pip non riesce a trovarlo. Un utente di r/FacebookAds si è imbattuto proprio in questo nella prima settimana. Controlla
python --versionprima di pensare che il nome del pacchetto sia sbagliato. - La versione dell'API non è fissa. La CLI non fissa una versione della Marketing API. Eredita quella usata dall'SDK
facebook-businessinstallato, e un'installazione pulita al 23 settembre 2026 risolve l'SDK 26.0.2, cioè la Marketing API v26.0. Aggiornare le dipendenze può cambiare silenziosamente la versione dell'API sotto i tuoi script, quindi fissa siameta-adssiafacebook-businessper tutto ciò che automatizzi.
In Claude Code o Codex puoi chiedere all'agente di installare la Meta Ads CLI per te. La parte che non può fare è la configurazione lato Meta descritta nella prossima sezione.
Autenticazione con un token di accesso di system user
Meta è esplicita sul fatto che la Meta Ads CLI richieda un token: "Ads CLI requires a system user access token to authenticate for programmatic access." Non esistono un comando meta auth login, un flusso OAuth nel browser né un whoami. Generi un token in Business Manager e lo passi alla CLI tramite una variabile d'ambiente.
È qui che la maggior parte dei setup si blocca, quindi ecco la sequenza completa.
Crea l'app Meta e il system user
- In Meta Business Suite, vai su Impostazioni > Utenti > Utenti di sistema.
- Crea un system user con il ruolo Admin.
- Crea o seleziona un'app sviluppatore Meta per l'azienda.
- Aggiungi il system user all'app come App Admin.
Per usare la CLI serve un'app sviluppatore. È una differenza concreta rispetto all'MCP ospitato, che funziona tramite un connettore OAuth standard senza un'app tua.
Assegna gli asset e genera il token
- Assegna al system user ogni asset che la CLI toccherà: account pubblicitari, Pagine Facebook, dataset (Pixel) e cataloghi prodotti se li usi. Un asset non assegnato è il motivo più comune per cui
meta ads adaccount listrestituisce un elenco vuoto. - Genera un token per l'app con questi scope, elencati nella guida di configurazione di Meta:
business_management
ads_management
pages_show_list
pages_read_engagement
pages_manage_ads
catalog_management
read_insights
La documentazione Postman di Meta specifica che i token di system user possono durare fino a 60 giorni o non scadere mai, a seconda dell'opzione scelta e dell'idoneità della tua azienda.

Autorizzazioni dell'app e App Review
La Meta Ads CLI passa sempre dalla tua app sviluppatore Meta, e sono le autorizzazioni di quell'app a decidere cosa può fare la CLI. Quando un nuovo job o un tipo di campagna diverso fallisce, la causa è spesso un ostacolo di autorizzazioni piuttosto che un bug della CLI:
- Le creatività collegate a una Pagina richiedono
pages_manage_ads. - I cataloghi richiedono
catalog_management. - Le partnership ads richiedono le autorizzazioni per i contenuti brandizzati oltre agli scope per gli annunci.
- Alcuni percorsi delle creatività sono bloccati mentre l'app è in modalità sviluppo, e si manifestano con l'errore 1885183. Un tutorial su YouTube di maggio mostrava campagna e ad set creati senza problemi mentre gli annunci fallivano finché l'app non è stata impostata su Live.
Conta anche il livello di accesso. Meta ora descrive l'accesso alla Marketing API come Limited o Full. Il Limited Access basta per gli account pubblicitari della tua azienda, ma gestire gli account di altre aziende, cioè ciò che fanno agenzie e partner, richiede il Full Access e l'App Review.
E l'App Review non si fa una volta sola. Man mano che i requisiti di Meta cambiano, devi ripeterla per restare in regola. Nella nostra esperienza, revisioni che un anno fa, prima che tutti usassero l'AI, richiedevano un paio di giorni, ora ne richiedono circa da 10 a 20, a volte di più. Meta non pubblica tempi garantiti per la revisione, quindi richiedi le nuove autorizzazioni con largo anticipo rispetto al lancio che ne ha bisogno.
Imposta le variabili d'ambiente e la precedenza della configurazione
La CLI legge tre variabili:
| Variabile | Scopo | Obbligatoria |
|---|---|---|
ACCESS_TOKEN | Token di accesso del system user | Sì |
AD_ACCOUNT_ID | Account pubblicitario predefinito, nel formato act_ | Per la maggior parte dei comandi ads |
BUSINESS_ID | Azienda predefinita per cataloghi e dataset | Facoltativa |
Inseriscile in un file .env di progetto escluso dal controllo di versione:
ACCESS_TOKEN=<SYSTEM_USER_TOKEN>
AD_ACCOUNT_ID=act_123456789
BUSINESS_ID=123456789
Le impostazioni si risolvono in questo ordine, dalla più prioritaria: flag da riga di comando, variabili d'ambiente della shell, il .env di progetto e infine la configurazione utente in ~/.config/meta/. Poi verifica che tutto funzioni:
meta auth status
meta ads adaccount current
meta ads page list
meta auth status mostra se sei autenticato, con il token mascherato. Se adaccount current restituisce l'ID act_ corretto, sei pronto.
Comandi della Meta Ads CLI: un cheat sheet pratico
Prima di tutto conta una regola di sintassi: le opzioni root come --output vanno prima di ads, e le opzioni dell'account vanno dopo ads ma prima della risorsa.
meta --output json ads campaign list
meta ads --ad-account-id act_123456789 campaign list
Dubbi a collegare l’IA direttamente a Meta?
Ads Uploader è amato da media buyer esperti e agenzie, che gli affidano il lancio di centinaia di migliaia di inserzioni Meta ogni mese.
Prova Ads Uploader gratisNessuna carta di credito richiesta • 7 giorni di prova gratuita
Comandi di lettura (account, campagne, insights)
meta ads adaccount list
meta ads campaign list
meta ads adset list
meta ads ad list
meta ads insights get --date-preset last_7d
Insights usa per default last_30d, restituisce spend,impressions,clicks,ctr,cpc,reach e si ferma a 50 righe se non lo modifichi. Puoi filtrare su un singolo oggetto e aggiungere breakdown:
meta --output json ads insights get \
--campaign-id <CAMPAIGN_ID> \
--date-preset last_7d \
--fields spend,impressions,clicks,ctr,cpc \
--breakdown publisher_platform
Esistono filtri per --campaign-id, --adset-id e --ad-id, e i breakdown includono età, genere, paese, publisher platform, device platform e platform position.
Crea una campagna dall'inizio alla fine
Questa è la sequenza documentata da Meta. Ogni comando di creazione accetta --status, quindi scegli tu se ogni oggetto parte in pausa o attivo. Questi esempi creano tutto in pausa e lo attivano alla fine:
# 1. Campaign (budget in cents: 5000 = $50.00 on a USD account)
meta ads campaign create \
--name "Spring Test | Traffic" \
--objective OUTCOME_TRAFFIC \
--daily-budget 5000 \
--status PAUSED
# 2. Ad set
meta ads adset create <CAMPAIGN_ID> \
--name "US | Broad" \
--optimization-goal LINK_CLICKS \
--billing-event IMPRESSIONS \
--targeting-countries US \
--status PAUSED
# 3. Creative (image or --video ./file.mp4)
meta ads creative create \
--name "Hero Banner" \
--page-id <PAGE_ID> \
--image ./banner.jpg \
--body "Check out our latest deals!" \
--title "Shop Now" \
--link-url https://example.com/sale \
--call-to-action SHOP_NOW \
--status PAUSED
# 4. Ad
meta ads ad create <AD_SET_ID> \
--name "Hero Banner Ad" \
--creative-id <CREATIVE_ID> \
--status PAUSED
Alcune regole che i flag non ti dicono:
- I budget sono nell'unità minore della valuta dell'account.
5000corrisponde a $50.00 in USD. Controlla la valuta dell'account prima che un agente scriva un budget. - Il budget sta in un solo posto. Mettilo sulla campagna (CBO) o sugli ad set (ABO), non su entrambi. Entrambi insieme di solito restituiscono l'errore 1885621.
--targeting-countriesè l'unico flag di targeting semplice. Età, genere, interessi, Custom Audience, esclusioni e posizionamenti manuali passano da--targetingcome JSON o@file.json.- La Dynamic Creative richiede un ad set dinamico. Crea prima l'ad set con
--dynamic-creative. - Il flag di Instagram è cambiato. Il riferimento web indica
--instagram-actor-id; il pacchetto 1.1.0 usa--instagram-user-id. Eseguimeta ads creative create --helpsulla versione che hai installato.
Nomi coerenti contano ancora di più quando è uno script o un agente a creare gli oggetti, perché poi li rileggerai negli elenchi. Definisci una convenzione di denominazione prima di automatizzare qualsiasi cosa.

Attivazione, pausa e pulizia
L'attivazione richiede tre aggiornamenti separati, uno per ogni livello di delivery:
meta ads campaign update <CAMPAIGN_ID> --status ACTIVE
meta ads adset update <AD_SET_ID> --status ACTIVE
meta ads ad update <AD_ID> --status ACTIVE
Per mettere in pausa si usa lo stesso comando con --status PAUSED. Le eliminazioni chiedono conferma a meno che tu non passi --force, e si propagano a cascata: eliminare una campagna elimina i suoi ad set e annunci, ed eliminare un ad set elimina i suoi annunci.
meta ads campaign delete <CAMPAIGN_ID>
Cataloghi e dataset
I comandi per cataloghi e dataset risolvono l'azienda da --business-id, poi da BUSINESS_ID, poi dall'account pubblicitario configurato.
meta ads dataset create --name "Website Pixel"
meta ads dataset connect <PIXEL_ID> --ad-account-id act_123456789
meta ads dataset connect <PIXEL_ID> --catalog-id <CATALOG_ID>
meta ads catalog create --name "My Product Catalog"
meta ads product-set list --catalog-id <CATALOG_ID>
La creazione di un dataset richiede che un admin dell'azienda abbia accettato i termini dei Business Tools di Meta (altrimenti errore 1870092). I dataset sono gli stessi Pixel che vedi in Events Manager, quindi tutto ciò che crei qui compare anche lì.
La Meta Ads CLI crea gli annunci in pausa o attivi?
Campagne, ad set e annunci partono in pausa a meno che tu non passi --status ACTIVE. Il tutorial della Ads CLI di Meta dice: "Ads CLI creates everything in PAUSED status by default." Nella versione 1.1.0 le creatività sono l'eccezione e per default sono attive. In ogni caso la scelta è tua: imposta --status a ogni creazione e attiva o disattiva gli oggetti in seguito con update.
Usare la Meta Ads CLI da Claude Code o Codex
Non serve niente di speciale per collegare un agente. Claude Code, Codex e strumenti simili eseguono comandi shell, quindi eseguono la Meta Ads CLI esattamente come faresti tu e analizzano --output json. Questa è tutta l'integrazione.
La cosa importante da capire è che l'agente eredita ogni autorizzazione del token. Il commento più acuto in uno dei primi thread di r/FacebookAds lo diceva chiaramente: lo stesso setup che prepara le creatività sostitutive può anche modificare i budget e mettere in pausa le campagne, quindi il tuo passaggio di revisione è l'unica cosa che separa una bozza da una modifica live, e funziona solo se l'agente non approva automaticamente le scritture. La divisione che consigliavano è quella da copiare: approva automaticamente le letture, blocca tutto ciò che modifica spesa o stato.
In Claude Code questo si traduce direttamente in regole di autorizzazione in .claude/settings.json:
{
"permissions": {
"allow": [
"Bash(meta --output json ads campaign list:*)",
"Bash(meta --output json ads insights get:*)",
"Bash(meta ads adaccount current:*)"
],
"ask": [
"Bash(meta ads campaign create:*)",
"Bash(meta ads campaign update:*)",
"Bash(meta ads adset update:*)",
"Bash(meta ads ad update:*)"
],
"deny": [
"Bash(meta ads campaign delete:*)"
]
}
}
Codex ha le sue impostazioni di approvazione; usale allo stesso modo, così le letture girano liberamente e le scritture aspettano te.
Qualche altro guardrail che regge alla prova dei fatti:
- Usa un system user dedicato per l'agente, assegnato solo agli account di cui ha bisogno. Non riutilizzare un token condiviso con accesso ampio.
- Tieni il token in
.env, mai in un prompt, in un fileCLAUDE.mdo in un argomento di comando. - Chiedi un piano scritto prima di ogni creazione: ID dell'account, ID dei genitori, obiettivo, budget sia in centesimi sia in dollari, targeting, Pixel e stato finale di ogni oggetto. Poi fai rileggere all'agente ogni oggetto in JSON e confrontalo.
- Non lasciare mai che l'agente usi
--forcedi sua iniziativa. E tieni presente che--no-inputsopprime solo i prompt. Non è una funzione di sicurezza. - Limita loop e tentativi. Un loop di retry su una creazione fallita è il modo in cui ti ritrovi con cinque campagne duplicate.
I workflow più utili con un agente sono in lettura. Lo stesso professionista su Reddit esegue un controllo mattutino che recupera le campagne attive, confronta spesa, ROAS e CPL delle ultime 72 ore e segnala tutto ciò che supera le soglie per cliente (un CPL di $5 è ottimo per un account e pessimo per un altro). Ha riferito che gli fa risparmiare circa 45 minuti al giorno. Anche la sua regola sulla fatigue è un punto di partenza sensato: frequenza in aumento mentre il CTR cala per tre o più giorni fa scattare la bozza di un copy sostitutivo, che poi rivede una persona. E i buoni agenti aggiungono un contesto che una soglia non può dare, come aspettare prima di intervenire su una campagna il cui CPL è salito perché due giorni fa ne hai aumentato il budget.
Limiti e lacune note
La Meta Ads CLI è un'ottima base, ma ci sono cose che ancora non fa:
- Nessun dry run o anteprima. Non esistono
--dry-run,--previewo--validate-only. Il tuo passaggio di revisione deve essere un piano scritto più una rilettura. - Nessuna transazione. Una creazione consiste in quattro chiamate API separate. Se l'annuncio fallisce dopo che campagna e ad set sono andati a buon fine, quegli oggetti restano lì e li ripulisci tu.
- Nessun comando batch. Il lavoro in blocco significa loop nella shell, che aumentano il rischio di errori parziali, duplicati e limiti di frequenza.
- Le funzioni avanzate richiedono JSON grezzo. Caroselli, controlli delle creatività Advantage+ (
--degrees-of-freedom-spec,--asset-feed-spec), personalizzazione degli asset per posizionamento e targeting complesso richiedono tutti JSON della Marketing API. A quel punto devi conoscere lo schema dell'API. - Insights è più limitato dell'API. Puoi filtrare per campagna, ad set o annuncio, ma non c'è un flag
--levelesplicito, né report asincroni, né controllo della finestra di attribuzione. - Nessun profilo di account con nome. Il lavoro su più account passa da
AD_ACCOUNT_IDe--ad-account-id, senza un selettoreclient-a/client-b. - Alcuni campi delle creatività non si possono modificare dopo la creazione. Metti in conto di creare invece una creatività sostitutiva.
- La documentazione è indietro rispetto al pacchetto. La 1.1.0 installata ha più flag e gruppi di risorse del riferimento pubblico, e non esiste un changelog pubblico. I primi utenti su Reddit hanno detto di aver capito alcuni comandi per tentativi, e
--helpsulla versione installata resta il riferimento più affidabile.
Alcuni limiti iniziali sono stati risolti. Nella settimana del lancio si diceva che non fosse possibile caricare video e che insights funzionasse solo a livello di campagna. Le versioni attuali supportano --video sulle creatività e i filtri per gli insights di ad set e annunci.
Risoluzione degli errori comuni
Parti dal codice di uscita, che ti dice quale livello ha fallito:
| Codice di uscita | Significato |
|---|---|
| 0 | Successo |
| 1 | Errore generico |
| 2 | Errore di utilizzo o di argomento |
| 3 | Errore di autenticazione |
| 4 | Errore API |
| 5 | Risorsa non trovata |
Negli script, gestiscili in modo diverso. Ritentare dopo un errore di utilizzo (2) o di autenticazione (3) non funziona mai. Solo alcuni errori API (4) vale la pena ritentarli.
Gli errori Meta in cui è più probabile imbattersi:
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| Uscita 3, errore API 190 | Token mancante, scaduto o revocato | Rigenera il token, esegui meta auth status |
| Errori 10, 200 o 294 | Scope o livello di accesso mancante | Controlla gli scope del token, l'accesso dell'app e l'assegnazione degli asset |
adaccount list è vuoto | System user non assegnato all'account | Assegna l'account pubblicitario nelle Impostazioni aziendali |
| Errore 1885183 | Post della creatività creato da un'app in modalità sviluppo | Imposta l'app su Live e verifica il livello di accesso |
| Errore 1885621 | Budget su campagna e ad set | Scegli CBO o ABO, non entrambi |
| Errore 1870092 | Termini dei Business Tools non accettati | Un admin dell'azienda accetta i termini |
| Uscita 4 con errore 17 o 613 | Limite di frequenza | Rallenta; non ritentare in un loop stretto |
La Meta Ads CLI non ha una quota separata per i limiti di frequenza. Condivide i limiti della Marketing API, che Meta documenta nella sua pagina sul rate limiting. Con il Limited Access, il punteggio dell'account pubblicitario ha un tetto di 60 (una lettura costa circa un punto, una scrittura circa tre) e un blocco dura cinque minuti. Il Full Access alza il tetto a 9,000. Le modifiche al budget hanno un proprio limite di circa quattro per ad set all'ora, il che conta se a un agente piace ritoccare.
La Meta Ads CLI è sicura per il tuo account pubblicitario?
Se passi del tempo su X o nelle community di media buying, avrai visto il rumore: inserzionisti che hanno collegato i connettori AI di Meta, o puntato un agente sul proprio account, e poi hanno scritto che l'account era stato limitato per automazione. Vale la pena prenderlo sul serio. E vale anche la pena leggerlo con attenzione, perché ogni caso è diverso, le restrizioni raramente hanno una sola causa, e non possiamo commentare i dettagli di un singolo account.
La posizione ufficiale di Meta è quella della sua documentazione. La CLI è uno strumento costruito da Meta e destinato esplicitamente a sviluppatori e agenti AI, e chiama la stessa Marketing API di qualsiasi altra integrazione, quindi valgono le stesse policy pubblicitarie, gli stessi livelli di accesso e gli stessi limiti di frequenza. Meta non ha detto che la CLI esenti un account da nessuno di questi, né che usarla causi restrizioni.
Ciò che un agente cambia è lo schema delle attività. Un media buyer in Ads Manager lavora a velocità umana. Un agente in un loop può sparare decine di scritture in un minuto, ritentare le chiamate fallite, ricaricare gli stessi media e cambiare i budget avanti e indietro, e visto da fuori quello schema appare molto diverso da una singola chiamata. I rischi che controlli sono quelli visti prima: scritture sull'account act_ sbagliato, budget nell'unità sbagliata, retry fuori controllo e token esposti. Blocca le scritture, limita i loop e rispetta gli errori di rate limit, e la CLI si comporta come qualsiasi altra integrazione ben costruita.
Dove si inserisce la CLI di Ads Uploader
La CLI e l'MCP di Meta in sostanza espongono la Marketing API in una forma più comoda da chiamare per gli agenti. È utile, ed è ciò che Meta si era proposta di costruire. Ciò a cui un livello sottile e generico ha probabilmente dedicato meno riflessione è tutto quello che sta intorno alle chiamate: dosare le richieste entro i limiti di frequenza, lo schema delle azioni che un agente esegue su un account nell'arco di una giornata e il caricamento sicuro dei media. La documentazione della CLI di Meta non descrive alcun livello di dosaggio o di retry; lo strumento eredita i limiti della Marketing API così come sono. Sono proprio queste le cose che Ads Uploader ha integrato e gestisce da solo sul proprio backend.
C'è anche un problema meno evidente. Ottenere campagne, ad set e annunci esattamente con il target e la configurazione che vuoi è un'arte sottovalutata. Obiettivo, obiettivo di ottimizzazione, posizionamenti, identità, tracciamento, denominazione e formato della creatività devono essere tutti allineati, e le combinazioni che funzionano non sono scritte in un unico posto. È esattamente lo scopo di Ads Uploader.
La CLI di Ads Uploader è pensata per essere pilotata da un agente come Claude Code o Codex, e ti permette di modellare i nuovi annunci su quelli esistenti: salva come preset un annuncio già configurato come ti piace (ads presets:save --from-ad), e i nuovi lanci ereditano quelle impostazioni. Con milioni di annunci lanciati, sappiamo quali combinazioni di impostazioni vanno d'accordo e dove le persone incontrano problemi, e quella conoscenza collettiva vive dentro il workflow invece che in un prompt. Il tuo agente carica una cartella di creatività, esegue ads create:preview per controllare esattamente cosa verrà creato, poi crea gli annunci, usando gli stessi preset e le stesse build salvate della web app. La documentazione della CLI copre l'intero set di comandi.
Tre differenze pratiche emergono subito:
- Setup. L'installazione è
npm install -g @adsuploader/cli(richiede Node.js 18+), poiads loginti autentica nel browser con il tuo account Ads Uploader. Niente app sviluppatore e niente token di system user. Anchepip install meta-adsdi Meta è una riga sola se hai Python 3.12+; la vera trafila lì è l'autenticazione: un'app sviluppatore, un system user admin, l'assegnazione degli asset e un token con scope. - Cloud storage. Le creatività spesso stanno su Google Drive.
ads upload:drive "<shared folder link>"consegna una cartella di Drive condivisa tramite link alla nostra infrastruttura, che scarica ed elabora i media lato server, e l'MCP ospitato di Ads Uploader accetta allo stesso modo il link a una cartella o a un file di Drive. Spesso è più veloce che spostare i file da solo. - Build salvate che puoi aprire. La web app, la CLI e l'MCP condividono la stessa build. Un agente può assemblare un'intera campagna tramite la CLI o l'MCP e restituire un link alla build. Aprilo nell'uploader di Ads Uploader e puoi modificare testi, configurazione degli ad set e miglioramenti o aggiungere altri media, poi lanciare dal web o continuare tramite la CLI o l'MCP con la stessa build. Una scheda dell'uploader aperta recepisce automaticamente le modifiche dell'agente. In un workflow solo via chat non vedi davvero il risultato previsto finché gli annunci non vengono lanciati, e questo conta soprattutto sugli account di altre persone.
Quale strada abbia senso dipende dal tuo setup:
- Un setup semplice: un account pubblicitario, immagini statiche in pochi formati, una sola struttura di campagna. Puoi costruirti le tue skill sulla CLI o sull'MCP di Meta per caricare esattamente come vuoi, ed è un buon modo per imparare l'API.
- Agenzie e partner: tanti account, configurazioni di campagna diverse per ogni cliente e le complicazioni che ognuno si porta dietro. È lì che le skill costruite a mano tendono a cedere, perché ogni nuovo account aggiunge combinazioni da gestire. Lì Ads Uploader è la rete di sicurezza. Affidi la conoscenza e l'implementazione a un workflow collaudato da migliaia di media buyer e agenzie, a un prezzo molto accessibile.
Poi c'è la manutenzione. Strumenti, autorizzazioni e regole di approvazione di Meta continuano a cambiare: i livelli di accesso sono stati rinominati in Limited e Full, i nuovi tipi di campagna portano nuove autorizzazioni, l'App Review si applica quando un'app gestisce gli account di altre aziende e va ripetuta al cambiare dei requisiti, e nella nostra esperienza quelle revisioni ora richiedono molto più tempo di prima. Avere qualcun altro che tiene il passo con strumenti, autorizzazioni e approvazioni significa non restare indietro quando cambiano. Ads Uploader è un'app Meta approvata, mantenuta da noi, con canali consolidati per segnalare a Meta problemi di piattaforma e di API quando qualcosa si rompe dalla sua parte, quindi seguire quei cambiamenti è compito nostro e non tuo.
Meta Ads CLI vs CLI di Ads Uploader
Ecco come si confrontano le due, fianco a fianco:
| Meta Ads CLI | CLI di Ads Uploader | |
|---|---|---|
| Installazione | pip install meta-ads (Python 3.12+) | npm install -g @adsuploader/cli (Node.js 18+) |
| Autenticazione e setup | La tua app sviluppatore Meta, un system user admin, l'assegnazione degli asset e un token con scope | ads login nel browser con il tuo account Ads Uploader |
| Anteprima | Nessun dry run o anteprima; verifica rileggendo gli oggetti | ads create:preview mostra cosa verrà creato prima di crearlo |
| Importazione dal cloud | Legge file locali; il cloud storage deve essere sincronizzato sul disco | ads upload:drive importa lato server una cartella di Google Drive condivisa tramite link |
| Build e revisione | Ogni comando è una chiamata API a sé, senza un piano salvato | Build salvate condivise con la web app e l'MCP; apri il link della build per rivedere e modificare nell'interfaccia |
| Manutenzione e approvazioni dell'app | Mantieni tu app, token, livello di accesso ed eventuale App Review | App Meta approvata, mantenuta da noi |
| Costo | Gratuita; paghi solo la spesa pubblicitaria | Piani a pagamento |
Se vuoi dare a un agente di coding l'API di Meta senza nulla in mezzo, la Meta Ads CLI ufficiale è il punto di partenza ovvio, e per un setup semplice è un'ottima scelta. Se preferisci non costruire e mantenere da solo anteprima, logica di lancio e approvazioni, è proprio il lavoro che fa la CLI di Ads Uploader.
Dai al Tuo Agente IA una Rete di Sicurezza
Lancia su tutti gli account dei clienti con un MCP e una CLI pensati per media buyer esperti e agenzie.
Prova Ads Uploader gratisNessuna carta di credito richiesta • 7 giorni di prova gratuita
Domande frequenti
La Meta Ads CLI è gratuita?
Sì. Meta non addebita alcun costo separato per la CLI. Installi il pacchetto meta-ads da PyPI gratuitamente e paghi solo la tua normale spesa pubblicitaria. Il pacchetto è proprietario e non open source, e ti servono comunque un'app sviluppatore Meta e un token di system user.
Esiste una CLI ufficiale per Facebook Ads?
Sì. La CLI ufficiale di Meta per gli annunci Facebook e Instagram è il pacchetto Python meta-ads, lanciato il 29 aprile 2026, con i comandi sotto meta ads.
La Meta Ads CLI può caricare annunci video?
Sì. Passa un file locale a meta ads creative create con --video e la CLI lo carica. Meta documenta i file mp4, mov, avi, mkv e wmv, e la Dynamic Creative accetta fino a 10 video tramite flag --videos ripetibili.
Devo essere uno sviluppatore per usare la Meta Ads CLI?
Non devi scrivere codice per l'API, ma la configurazione ha un sapore da sviluppatore: Python 3.12+, un'app sviluppatore Meta, un system user admin con asset assegnati e un token con gli scope giusti. Molti media buyer lasciano che un agente AI di coding si occupi dell'installazione ed esegua i comandi.
Posso gestire più account pubblicitari con la Meta Ads CLI?
Sì, se il system user è assegnato a ciascun account. Elencali con meta ads adaccount list, imposta un predefinito con AD_ACCOUNT_ID oppure sovrascrivilo per singolo comando con --ad-account-id. Non esistono profili con nome, quindi indica esplicitamente l'account a ogni scrittura.
Quale versione di Python richiede la Meta Ads CLI?
Python 3.12 o successivo. Il pacchetto viene distribuito come wheel compilate, quindi un Python più vecchio o una piattaforma non supportata restituisce "No matching distribution found." Un ambiente virtuale Python 3.12 o 3.13 lo evita.
La Meta Ads CLI funziona con Claude Code e Codex?
Sì. Meta indica gli agenti AI tra i destinatari previsti, e qualsiasi agente che esegue comandi shell e legge JSON può pilotarla. Nessuno dei due agenti aggiunge sicurezza da solo, quindi approva automaticamente le letture e richiedi la tua approvazione per creazioni, attivazioni, modifiche al budget ed eliminazioni.
Usare la Meta Ads CLI può farmi bannare l'account pubblicitario?
Non c'è un semplice sì o no. La CLI è lo strumento di Meta per sviluppatori e agenti AI, e Meta non ha detto che il suo uso causi restrizioni né che ne esenti. Policy, livelli di accesso e limiti di frequenza si applicano come a qualsiasi integrazione. Alcuni inserzionisti segnalano restrizioni dopo aver automatizzato con agenti, ma ogni caso è diverso, quindi tieni le scritture sotto controllo e i loop limitati.
Qual è la differenza tra la Meta Ads CLI e il Meta Ads MCP?
La CLI è uno strumento Python locale che esegue comandi shell con un token di system user. Il Meta Ads MCP è un server ospitato da Meta su mcp.facebook.com/ads a cui i client di chat AI si collegano tramite OAuth, senza un'app sviluppatore nel flusso standard del connettore. La CLI è adatta a script e agenti di coding; l'MCP è adatto al lavoro conversazionale.
Come iniziare con la Meta Ads CLI
La Meta Ads CLI offre a sviluppatori e agenti AI un accesso ufficiale e scriptabile alla Marketing API, e la versione 1.1.0 copre molto più della release della settimana di lancio. In breve:
- Installa
meta-adsin un ambiente virtuale Python 3.12+ e fissane la versione insieme afacebook-business. - Autenticati con un token di system user admin, assegnato solo agli asset che ti servono e salvato in
.env. - Decidi cosa costruire: un setup semplice con un solo account è facile da scriptare da solo; il lavoro di agenzia su più account è dove un workflow di lancio mantenuto da altri si ripaga.
- Pianifica tenendo conto delle lacune: nessun dry run, nessuna transazione, nessun comando batch, JSON grezzo per i formati avanzati.
- Con un agente, approva automaticamente le letture e blocca ogni scrittura.
Fai della tua prima settimana con la Meta Ads CLI una settimana in sola lettura. Recupera gli insights in JSON, poi crea una campagna di test e portala a mano attraverso revisione e attivazione. Quando quel ciclo ti sembrerà routine, saprai quali parti automatizzare e quali tenere nelle tue mani.
