Tools

Meta Ads CLI: Setup, Befehle und Grenzen von Metas offiziellem Ads CLI (2026)

Von Chris Pollard
23. September 202628 Min. Lesezeit

Das Meta Ads CLI ist Metas offizielles Kommandozeilen-Tool für die Marketing API, gestartet am 29. April 2026 als Teil der Ads AI Connectors. Es wird als Python-3.12+-Paket installiert, authentifiziert sich mit einem System-User-Access-Token und führt Befehle nach dem Muster meta ads <resource> <action> aus. Es deckt Kampagnen, Ad Sets, Ads, Creatives, Insights, Kataloge und Datasets ab, mit Tabellen-, JSON- oder Plain-Ausgabe, die Skripte parsen können. Damit können Entwickler und KI-Coding-Agenten Meta Ads verwalten, ohne API-Code zu schreiben.

Meta ist eine der ersten Werbeplattformen, die ein eigenes Kommandozeilen-Tool herausbringt, und hat klar gesagt, für wen es gedacht ist: Entwickler und KI-Agenten. Wenn du seit dem Launch versucht hast, es einzurichten, hast du wahrscheinlich gemerkt, dass die Infos über acht Dokumentationsseiten, einen Launch-Blogpost und jede Menge Kommentare von Dritten verstreut sind, die sich schon bei Grundlagen wie dem Installationsweg und der Authentifizierung widersprechen.

Dieser Meta Ads CLI Guide bringt alles zusammen: die genaue Installation, das Setup des System-User-Tokens (wo die meisten hängen bleiben), jede Befehlsgruppe, die sichere Nutzung aus Claude Code oder Codex, aktuelle Grenzen, Troubleshooting und den Vergleich mit dem Ads Uploader CLI. Er ist mit Metas aktueller Dokumentation und dem neuesten Paket, Version 1.1.0, abgeglichen und stammt von einem Team, das sein eigenes Meta Ads CLI baut und jeden Tag Ads über die Marketing API startet.

Warum ich ein CLI für den besseren Weg halte, Ads hochzuladen

Ich habe darüber schon in unserem Vergleich Meta Ads MCP vs CLI geschrieben, und der Kern hat sich nicht geändert. Meiner Meinung nach ist ein CLI die bessere Infrastruktur, um Ads hochzuladen.

Der erste Grund sind Dateien. Ein CLI hat nativen Zugriff auf dein Dateisystem. Launches starten meist von deiner Festplatte oder von Cloud-Speicher, der auf deinen Rechner gestreamt oder synchronisiert wird, und ein CLI liest diese Dateien ganz selbstverständlich. Ein gehosteter MCP-Server wie der von Meta unter mcp.facebook.com/ads sieht deine Festplatte überhaupt nicht, also müssen Dateien per URL, Drive-Link oder als Inline-Daten ankommen. Dieser Umweg ist der Grund, warum Leute Videos über ein gehostetes MCP schwieriger finden als Bilder. Metas eigene MCP-Tool-Liste enthält ein Creative-Tool, das als "single-image link ad creative" beschrieben wird, dazu Tools zum Auflisten vorhandener Bilder und Videos, aber kein eigenes Upload-Tool und keine dokumentierten Dateilimits. Bilder scheinen machbar, Video ist nicht dokumentiert. (Ein lokal installiertes MCP ist etwas anderes: Es läuft auf deinem Rechner und kann Dateien lesen, deshalb gibt es auch das MCP von Ads Uploader als lokales Paket, das von der Festplatte liest.)

Der zweite Grund ist, wie der Agent seinen Weg findet. Ich finde das CLI deterministischer. Das Feedback der Kommandozeile wirkt wie Leitplanken: --help-Ausgaben, Exit-Codes und strukturierte Fehler schicken den Agenten auf einen bestimmten Pfad. Mit einem MCP braucht der Agent mehr Wissen darüber, wie die Tools zusammenpassen, um einen Launch zusammenzustellen, und viele Clients laden jede Tool-Definition vorab in den Kontext, bei Meta sind das rund 90. Manche Clients laden Tools inzwischen bei Bedarf, aber ein MCP kann mehr Tokens fressen, und meiner Erfahrung nach ist das CLI einfach geradliniger.

Das MCP hat trotzdem seinen Platz für konversationelles Reporting und Fragen zum Konto, darum geht es in unserem Meta Ads MCP Guide. Dieser Guide bleibt beim CLI.

Was ist das Meta Ads CLI?

In Metas eigenen Worten, aus der Ads CLI Dokumentation: "Ads CLI is a command-line tool for managing Meta advertising from your terminal." Es ist ein Python-Wrapper um die Marketing API, der die Teile übernimmt, die früher jeder Entwickler von Hand nachbauen musste: Authentifizierung, Pagination, Ausgabeformatierung und Fehlerbehandlung.

Die wichtigsten Fakten, Stand 23. September 2026:

  • Paket: meta-ads auf PyPI, gepflegt von Meta. Das Executable heißt meta.
  • Neueste Version: 1.1.0, veröffentlicht am 17. Juni 2026.
  • Status: Meta hat die Ads AI Connectors (das CLI plus den gehosteten MCP-Server) als offene Beta gestartet. PyPI stuft das Paket als Alpha ein.
  • Lizenz: proprietär. Die Installation ist kostenlos, aber es ist nicht Open Source, und es gibt kein öffentliches GitHub-Repo und keinen Issue-Tracker.
  • Zielgruppe: Meta nennt Entwickler, die Ad-Integrationen bauen, Operations-Teams, die über Skripte und CI/CD automatisieren, und "AI agents and tools".

Die Motivation hinter dem Meta Ads CLI kennt jeder, der schon einmal Meta Ads automatisiert hat. Ein Agentur-Buyer auf r/FacebookAds beschrieb sein Setup vor dem CLI aus Python-Skripten und Cron-Jobs als "brittle as hell", weil es jedes Mal kaputtging, wenn Meta etwas an der API geändert hat. Ein offizielles Tool verlagert einen großen Teil dieser Wartung zu Meta, aber nicht alles.

Was das Meta Ads CLI kann

Das Executable in Version 1.1.0 stellt 14 Ressourcengruppen bereit. Die öffentliche Befehlsreferenz listet die meisten davon, und das installierte Paket enthält ein paar Extras (Produkt-Feeds, Guidance und Studies), die in der Web-Doku kaum dokumentiert sind.

RessourceAktionen
campaignlist, create, get, update, delete
adsetlist, create, get, update, delete
adlist, create, get, update, delete
creativelist, create, get, update, delete
insightsget
cataloglist, create, get, update, delete
product-itemlist, create, get, update, delete
product-setlist, create, get, update, delete
product-feedlist, create, get, update, delete
datasetlist, create, get, connect, disconnect, assign-user
adaccountlist, get, current
pagelist, get
guidancelist
studylist

Es gibt keine eigene Gruppe für audience, video, image oder lead-form. Video-Uploads laufen über creative create, und Custom Audiences werden im Targeting-JSON des Ad Sets referenziert.

Die Automatisierungsfunktionen machen das Meta Ads CLI agentenfreundlich:

  • Drei Ausgabeformate: table (der Standard, für Menschen), json (für Agenten und jq) und plain (tabulatorgetrennt, für awk und cut).
  • --no-input unterdrückt interaktive Abfragen, damit ein Skript nie hängen bleibt und auf ein y/n wartet.
  • Standard-Exit-Codes von 0 bis 5, damit ein Skript oder Agent je nach Fehlerart verzweigen kann.
  • Umgebungsvariablen und .env-Support, damit Tokens nicht in der Befehlshistorie landen.

Übersicht der Meta Ads CLI Funktionen mit Kampagnen, Ad Sets, Ads, Creatives, Insights, Katalogen, Datasets, Werbekonten und Pages samt ihren Aktionen

So installierst du das Meta Ads CLI

Metas Anforderungen sind kurz: Python 3.12 oder neuer und pip oder uv.

Der offizielle Installationsbefehl lautet:

pip install meta-ads

Metas Get-started-Seite lässt darauf ein nacktes uv sync folgen, das nur funktioniert, wenn du dich bereits in einem uv-Projekt mit einer pyproject.toml befindest. Nach einer normalen pip-Installation brauchst du es nicht. Für ein sauberes, reproduzierbares Setup nimmst du eine virtuelle Umgebung und pinnst die Version:

python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install meta-ads==1.1.0
meta --version

Zwei Stolperfallen bei der Installation solltest du vorab kennen:

  1. "No matching distribution found for meta-ads." Das Paket wird als kompilierte Wheels ausgeliefert, nicht als Source-Distribution. Wenn dein Python älter als 3.12 ist oder deine Plattform zu keinem veröffentlichten Wheel passt, findet pip es nicht. Ein Nutzer auf r/FacebookAds ist in der ersten Woche genau darüber gestolpert. Prüfe python --version, bevor du annimmst, dass der Paketname falsch ist.
  2. Die API-Version ist nicht fixiert. Das CLI pinnt keine Marketing-API-Version. Es übernimmt, was das installierte facebook-business SDK verwendet, und eine frische Installation am 23. September 2026 löst SDK 26.0.2 auf, also Marketing API v26.0. Ein Dependency-Upgrade kann die API-Version unter deinen Skripten stillschweigend ändern, also pinne sowohl meta-ads als auch facebook-business für alles, was du automatisierst.

In Claude Code oder Codex kannst du den Agenten bitten, das Meta Ads CLI für dich zu installieren. Was er nicht übernehmen kann, ist das Setup auf Meta-Seite im nächsten Abschnitt.

Authentifizierung mit einem System-User-Access-Token

Meta sagt klar, dass das Meta Ads CLI einen Token braucht: "Ads CLI requires a system user access token to authenticate for programmatic access." Es gibt keinen Befehl meta auth login, keinen OAuth-Flow im Browser und kein whoami. Du generierst einen Token im Business Manager und gibst ihn dem CLI über eine Umgebungsvariable.

Hier bleiben die meisten Setups hängen, deshalb kommt hier die komplette Abfolge.

Meta-App und System-User anlegen

  1. Geh in der Meta Business Suite zu Settings > Users > System Users.
  2. Leg einen System-User mit der Rolle Admin an.
  3. Erstelle oder wähle eine Meta-Entwickler-App für das Business.
  4. Füge den System-User der App als App Admin hinzu.

Für den CLI-Weg ist eine Entwickler-App Pflicht. Das ist ein echter Unterschied zum gehosteten MCP, das über einen Standard-OAuth-Connector ohne eigene App funktioniert.

Assets zuweisen und den Token generieren

  1. Weise dem System-User jedes Asset zu, das das CLI anfassen soll: Werbekonten, Facebook Pages, Datasets (Pixels) und Produktkataloge, falls du sie nutzt. Ein nicht zugewiesenes Asset ist der häufigste Grund, warum meta ads adaccount list leer zurückkommt.
  2. Generiere einen Token für die App mit diesen Scopes, die Metas Setup-Guide auflistet:
business_management
ads_management
pages_show_list
pages_read_engagement
pages_manage_ads
catalog_management
read_insights

Laut Metas Postman-Dokumentation können System-User-Tokens bis zu 60 Tage gültig sein oder nie ablaufen, je nach gewählter Option und Berechtigung deines Business.

Fünfstufiger Authentifizierungsablauf für das Meta Ads CLI: Admin-System-User, Entwickler-App, Asset-Zuweisung, Token mit Scopes, Umgebungsvariablen

App-Berechtigungen und App Review

Das Meta Ads CLI läuft immer über deine eigene Meta-Entwickler-App, und die Berechtigungen dieser App entscheiden, was das CLI kann. Wenn ein neuer Job oder ein anderer Kampagnentyp fehlschlägt, liegt es oft an einer fehlenden Berechtigung statt an einem Bug im CLI:

  • Page-basierte Creatives brauchen pages_manage_ads.
  • Kataloge brauchen catalog_management.
  • Partnership Ads brauchen zusätzlich zu den Ads-Scopes die Branded-Content-Berechtigungen.
  • Manche Creative-Wege sind blockiert, solange die App im Entwicklungsmodus ist, was sich als Fehler 1885183 zeigt. Ein YouTube-Walkthrough vom Mai zeigte, wie Kampagne und Ad Set problemlos erstellt wurden, während die Ads fehlschlugen, bis die App auf Live umgestellt wurde.

Auch die Zugriffsstufe spielt eine Rolle. Meta beschreibt den Marketing-API-Zugriff inzwischen als Limited oder Full. Limited Access reicht für die Werbekonten deines eigenen Business, aber für die Verwaltung von Konten anderer Businesses, also genau das, was Agenturen und Partner machen, brauchst du Full Access und App Review.

App Review ist auch keine einmalige Sache. Wenn sich Metas Anforderungen ändern, musst du erneut durch, um mitzuhalten. Unserer Erfahrung nach dauern Reviews, die vor einem Jahr, bevor alle KI nutzten, ein paar Tage gebraucht haben, jetzt ungefähr 10 bis 20 Tage, manchmal länger. Meta veröffentlicht keine Zusage zur Review-Dauer, also beantrage neue Berechtigungen lange vor dem Launch, der sie braucht.

Umgebungsvariablen setzen und Konfigurationsreihenfolge

Das CLI liest drei Variablen:

VariableZweckErforderlich
ACCESS_TOKENSystem-User-Access-TokenJa
AD_ACCOUNT_IDStandard-Werbekonto, im act_-FormatFür die meisten Ads-Befehle
BUSINESS_IDStandard-Business für Kataloge und DatasetsOptional

Leg sie in einer .env-Datei im Projekt ab, die von der Versionskontrolle ausgeschlossen ist:

ACCESS_TOKEN=<SYSTEM_USER_TOKEN>
AD_ACCOUNT_ID=act_123456789
BUSINESS_ID=123456789

Einstellungen werden in dieser Reihenfolge aufgelöst, höchste Priorität zuerst: Kommandozeilen-Flags, Umgebungsvariablen der Shell, die .env des Projekts, dann die Nutzerkonfiguration unter ~/.config/meta/. Dann prüfst du, ob alles funktioniert:

meta auth status
meta ads adaccount current
meta ads page list

meta auth status zeigt mit einem maskierten Token, ob du authentifiziert bist. Wenn adaccount current die richtige act_-ID zurückgibt, bist du startklar.

Meta Ads CLI Befehle: ein praktischer Spickzettel

Eine Syntaxregel ist wichtiger als alles andere: Root-Optionen wie --output stehen vor ads, und Konto-Optionen stehen nach ads, aber vor der Ressource.

meta --output json ads campaign list
meta ads --ad-account-id act_123456789 campaign list

Bedenken, KI direkt mit Meta zu verbinden?

Ads Uploader wird von Power-Media-Buyern und Agenturen geschätzt und jeden Monat mit dem Launch von Hunderttausenden Meta-Anzeigen betraut.

Ads Uploader kostenlos testen

Keine Kreditkarte nötig • 7 Tage kostenlos testen

Lesebefehle (Konten, Kampagnen, 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 nutzt standardmäßig last_30d, liefert spend,impressions,clicks,ctr,cpc,reach und ist auf 50 Zeilen begrenzt, solange du nichts änderst. Du kannst auf ein Objekt filtern und Breakdowns hinzufügen:

meta --output json ads insights get \
  --campaign-id <CAMPAIGN_ID> \
  --date-preset last_7d \
  --fields spend,impressions,clicks,ctr,cpc \
  --breakdown publisher_platform

Filter gibt es für --campaign-id, --adset-id und --ad-id, und zu den Breakdowns gehören Alter, Geschlecht, Land, Publisher-Plattform, Geräteplattform und Plattformposition.

Eine Kampagne von Anfang bis Ende bauen

Das ist Metas dokumentierte Abfolge. Jeder Create-Befehl akzeptiert --status, du entscheidest also, ob jedes Objekt pausiert oder aktiv startet. Diese Beispiele erstellen alles pausiert und schalten es am Ende ein:

# 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

Ein paar Regeln, die dir die Flags nicht verraten:

  • Budgets sind in der kleinsten Währungseinheit des Kontos. 5000 sind $50.00 in USD. Prüfe die Kontowährung, bevor ein Agent ein Budget schreibt.
  • Das Budget liegt an genau einer Stelle. Setz es auf die Kampagne (CBO) oder auf die Ad Sets (ABO), nicht auf beide. Beides gleichzeitig führt meist zu Fehler 1885621.
  • --targeting-countries ist das einzige einfache Targeting-Flag. Alter, Geschlecht, Interessen, Custom Audiences, Ausschlüsse und manuelle Platzierungen laufen über --targeting als JSON oder @file.json.
  • Dynamic Creative braucht ein dynamisches Ad Set. Erstelle das Ad Set zuerst mit --dynamic-creative.
  • Das Instagram-Flag hat sich geändert. Die Web-Referenz nennt --instagram-actor-id, das Paket 1.1.0 nutzt --instagram-user-id. Führe meta ads creative create --help mit deiner installierten Version aus.

Einheitliche Namen sind noch wichtiger, wenn ein Skript oder Agent Objekte erstellt, weil du sie später in Listen wieder lesen musst. Leg eine Namenskonvention fest, bevor du irgendetwas automatisierst.

Build-Abfolge im Meta Ads CLI: Kampagne, Ad Set, Creative und Ad erstellen, prüfen und dann jede Ebene starten

Live schalten, pausieren und aufräumen

Die Aktivierung besteht aus drei separaten Updates, eines pro Auslieferungsebene:

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

Pausieren ist derselbe Befehl mit --status PAUSED. Löschvorgänge fragen nach einer Bestätigung, außer du übergibst --force, und sie kaskadieren: Wenn du eine Kampagne löschst, werden ihre Ad Sets und Ads gelöscht, und wenn du ein Ad Set löschst, werden seine Ads gelöscht.

meta ads campaign delete <CAMPAIGN_ID>

Kataloge und Datasets

Katalog- und Dataset-Befehle ermitteln das Business zuerst über --business-id, dann über BUSINESS_ID, dann über das konfigurierte Werbekonto.

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>

Um ein Dataset zu erstellen, muss ein Business-Admin Metas Business-Tools-Nutzungsbedingungen akzeptiert haben (sonst Fehler 1870092). Datasets sind dieselben Pixels, die du im Events Manager siehst, also taucht alles, was du hier erstellst, auch dort auf.

Erstellt das Meta Ads CLI Ads pausiert oder aktiv?

Kampagnen, Ad Sets und Ads starten pausiert, außer du übergibst --status ACTIVE. Metas Ads CLI Tutorial sagt: "Ads CLI creates everything in PAUSED status by default." In Version 1.1.0 sind Creatives die Ausnahme und standardmäßig aktiv. So oder so entscheidest du: Setz --status bei jedem Create und schalte Objekte danach mit update ein oder aus.

Das Meta Ads CLI aus Claude Code oder Codex nutzen

Um einen Agenten anzubinden, brauchst du nichts Besonderes. Claude Code, Codex und ähnliche Tools führen Shell-Befehle aus, sie nutzen das Meta Ads CLI also genau wie du und parsen --output json. Das ist die ganze Integration.

Wichtig ist zu verstehen, dass der Agent jede Berechtigung erbt, die der Token hat. Der treffendste Kommentar in einem frühen Thread auf r/FacebookAds hat genau das betont: Dasselbe Setup, das Ersatz-Creatives entwirft, kann auch Budgets ändern und Kampagnen pausieren, also ist dein Review-Schritt das Einzige, was zwischen einem Entwurf und einer Live-Änderung steht, und das funktioniert nur, wenn der Agent Schreibvorgänge nicht automatisch genehmigt. Die empfohlene Aufteilung solltest du übernehmen: Lesevorgänge automatisch genehmigen, alles, was Spend oder Status verändert, absichern.

In Claude Code lässt sich das direkt auf Berechtigungsregeln in .claude/settings.json übertragen:

{
  "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 hat eigene Freigabeeinstellungen. Nutze sie genauso, damit Lesevorgänge frei laufen und Schreibvorgänge auf dich warten.

Ein paar weitere Leitplanken, die sich in der Praxis bewähren:

  • Nutze einen eigenen System-User für den Agenten, der nur den Konten zugewiesen ist, die er braucht. Verwende keinen breit geteilten Token wieder.
  • Bewahre den Token in .env auf, nie in einem Prompt, einer CLAUDE.md-Datei oder einem Befehlsargument.
  • Verlange vor jedem Build einen schriftlichen Plan: Konto-ID, Parent-IDs, Ziel, Budgets in Cent und Dollar, Targeting, Pixel und den finalen Status jedes Objekts. Lass den Agenten dann jedes Objekt als JSON zurücklesen und vergleichen.
  • Lass den Agenten --force nie eigenständig nutzen. Und beachte, dass --no-input nur Abfragen unterdrückt. Eine Sicherheitsfunktion ist es nicht.
  • Begrenze Schleifen und Retries. Eine Retry-Schleife bei einem fehlgeschlagenen Create ist genau der Weg, auf dem du mit fünf doppelten Kampagnen endest.

Die nützlichsten Agenten-Workflows sind lesend. Derselbe Praktiker auf Reddit lässt morgens einen Check laufen, der aktive Kampagnen abruft, Spend, ROAS und CPL der letzten 72 Stunden vergleicht und alles markiert, was über kundenspezifischen Schwellenwerten liegt (ein CPL von $5 ist für ein Konto großartig und für ein anderes furchtbar). Laut eigener Aussage spart ihm das rund 45 Minuten am Tag. Seine Fatigue-Regel ist ebenfalls ein sinnvoller Ausgangspunkt: Steigt die Frequency, während die CTR drei oder mehr Tage fällt, wird ein Entwurf für Ersatz-Copy ausgelöst, den ein Mensch prüft. Und gute Agenten ergänzen Kontext, den ein Schwellenwert nicht liefern kann, etwa bei einer Kampagne abzuwarten, deren CPL gestiegen ist, weil du ihr Budget vor zwei Tagen hochskaliert hast.

Einschränkungen und bekannte Lücken

Das Meta Ads CLI ist ein starkes Grundwerkzeug, aber manches kann es noch nicht:

  • Kein Dry Run und keine Vorschau. Es gibt kein --dry-run, --preview oder --validate-only. Dein Review-Schritt muss aus einem schriftlichen Plan plus Rücklesen bestehen.
  • Keine Transaktionen. Ein Build besteht aus vier separaten API-Calls. Wenn die Ad fehlschlägt, nachdem Kampagne und Ad Set erfolgreich waren, bleiben diese Objekte zurück und du räumst sie selbst auf.
  • Kein Batch-Befehl. Massenarbeit heißt Shell-Schleifen, was das Risiko für Teilfehler, Duplikate und Rate-Limits erhöht.
  • Fortgeschrittene Funktionen brauchen rohes JSON. Carousels, Advantage+ Creative-Steuerung (--degrees-of-freedom-spec, --asset-feed-spec), Asset-Anpassung pro Platzierung und komplexes Targeting nehmen alle Marketing-API-JSON entgegen. Spätestens dann musst du das API-Schema kennen.
  • Insights ist enger als die API. Du kannst nach Kampagne, Ad Set oder Ad filtern, aber es gibt kein explizites --level-Flag, keine asynchronen Reports und keine Steuerung des Attributionsfensters.
  • Keine benannten Kontoprofile. Arbeit mit mehreren Konten läuft über AD_ACCOUNT_ID und --ad-account-id, ohne Umschalter wie client-a / client-b.
  • Manche Creative-Felder lassen sich nach der Erstellung nicht bearbeiten. Plane stattdessen, ein Ersatz-Creative zu erstellen.
  • Die Doku hinkt dem Paket hinterher. Die installierte Version 1.1.0 hat mehr Flags und Ressourcengruppen als die öffentliche Referenz, und es gibt kein öffentliches Changelog. Frühe Nutzer auf Reddit sagten, sie hätten manche Befehle per Trial and Error herausgefunden, und --help in deiner installierten Version ist weiterhin die zuverlässigste Referenz.

Einige frühe Grenzen wurden behoben. Berichte aus der Launch-Woche sagten, Video-Uploads seien nicht möglich und Insights funktioniere nur auf Kampagnenebene. Aktuelle Versionen unterstützen --video bei Creatives und Filter für Insights auf Ad-Set- und Ad-Ebene.

Troubleshooting häufiger Fehler

Fang mit dem Exit-Code an, er sagt dir, welche Ebene fehlgeschlagen ist:

Exit-CodeBedeutung
0Erfolg
1Allgemeiner Fehler
2Nutzungs- oder Argumentfehler
3Authentifizierungsfehler
4API-Fehler
5Ressource nicht gefunden

Behandle sie in Skripten unterschiedlich. Einen Nutzungsfehler (2) oder Auth-Fehler (3) erneut zu versuchen, bringt nie etwas. Nur manche API-Fehler (4) sind einen Retry wert.

Die Meta-Fehler, auf die du am wahrscheinlichsten stößt:

SymptomWahrscheinliche UrsacheLösung
Exit 3, API-Fehler 190Token fehlt, ist abgelaufen oder widerrufenToken neu generieren, meta auth status ausführen
Fehler 10, 200 oder 294Fehlender Scope oder fehlende ZugriffsstufeToken-Scopes, App-Zugriff und Asset-Zuweisung prüfen
adaccount list ist leerSystem-User ist dem Konto nicht zugewiesenDas Werbekonto in den Business Settings zuweisen
Fehler 1885183Creative-Post von einer App im EntwicklungsmodusApp auf Live stellen und Zugriffsstufe bestätigen
Fehler 1885621Budget auf Kampagne und Ad SetCBO oder ABO wählen, nicht beides
Fehler 1870092Business-Tools-Nutzungsbedingungen nicht akzeptiertEin Business-Admin akzeptiert die Bedingungen
Exit 4 mit Fehler 17 oder 613Rate-LimitPausieren, nicht in einer engen Schleife erneut versuchen

Das Meta Ads CLI hat kein eigenes Rate-Limit-Kontingent. Es teilt sich die Limits der Marketing API, die Meta auf seiner Seite zum Rate Limiting dokumentiert. Mit Limited Access ist der Score des Werbekontos auf 60 begrenzt (ein Lesevorgang kostet etwa einen Punkt, ein Schreibvorgang etwa drei), und eine Sperre dauert fünf Minuten. Full Access hebt das Limit auf 9,000. Budgetänderungen haben ein eigenes Limit von etwa vier pro Ad Set und Stunde, was wichtig ist, wenn ein Agent gern herumschraubt.

Ist das Meta Ads CLI sicher für dein Werbekonto?

Wenn du Zeit auf X oder in Media-Buying-Communities verbringst, hast du den Wirbel gesehen: Werbetreibende, die Metas AI Connectors verbunden oder einen Agenten auf ihr Konto losgelassen haben und dann posteten, dass ihr Konto wegen Automatisierung eingeschränkt wurde. Das sollte man ernst nehmen. Man sollte es aber auch genau lesen, denn jeder Fall ist anders, Einschränkungen haben selten eine einzige Ursache, und wir können uns nicht zu den Details einzelner Konten äußern.

Metas offizielle Position ist das, was in der Dokumentation steht. Das CLI ist ein von Meta gebautes Tool, das sich ausdrücklich an Entwickler und KI-Agenten richtet, und es ruft dieselbe Marketing API auf wie jede andere Integration, also gelten dieselben Werberichtlinien, Zugriffsstufen und Rate-Limits. Meta hat nicht gesagt, dass das CLI ein Konto von irgendetwas davon ausnimmt, und auch nicht, dass die Nutzung des CLI Einschränkungen verursacht.

Was ein Agent verändert, ist das Aktivitätsmuster. Ein Media Buyer im Ads Manager arbeitet in menschlichem Tempo. Ein Agent in einer Schleife kann Dutzende Schreibvorgänge pro Minute abfeuern, fehlgeschlagene Calls wiederholen, dieselben Medien erneut hochladen und Budgets hin- und herschalten, und dieses Muster sieht von außen ganz anders aus als jeder einzelne Call. Die Risiken, die du kontrollierst, sind die weiter oben beschriebenen: Schreibvorgänge im falschen act_-Konto, Budgets in der falschen Einheit, außer Kontrolle geratene Retries und geleakte Tokens. Sichere Schreibvorgänge ab, begrenze Schleifen und respektiere Rate-Limit-Fehler, dann verhält sich das CLI wie jede andere gut gebaute Integration.

Wo das Ads Uploader CLI ins Spiel kommt

Metas CLI und MCP stellen die Marketing API im Grunde in einer freundlicheren Form bereit, die Agenten aufrufen können. Das ist nützlich, und genau das wollte Meta bauen. Worüber bei einer dünnen, universellen Schicht vermutlich weniger nachgedacht wurde, ist alles rund um die Calls: Requests unter den Rate-Limits zu takten, das Aktivitätsmuster, das ein Agent über einen Tag auf einem Konto erzeugt, und das sichere Hochladen von Medien. Metas CLI-Doku beschreibt keine Taktungs- oder Retry-Schicht, das Tool übernimmt die Limits der Marketing API so, wie sie sind. Genau diese Dinge hat Ads Uploader eingebaut und erledigt sie im eigenen Backend.

Dazu kommt ein leiseres Problem. Kampagnen, Ad Sets und Ads genau so aufzusetzen, wie du sie haben willst, ist eine unterschätzte Kunst. Ziel, Optimierungsziel, Platzierungen, Identität, Tracking, Benennung und Creative-Format müssen alle zusammenpassen, und die Kombinationen, die funktionieren, stehen nirgends an einer Stelle. Genau dafür gibt es Ads Uploader.

Das Ads Uploader CLI ist dafür gebaut, von einem Agenten wie Claude Code oder Codex gesteuert zu werden, und du kannst neue Ads nach dem Vorbild deiner bestehenden Ads anlegen: Speichere eine Ad, die schon so eingerichtet ist, wie du sie magst, als Preset (ads presets:save --from-ad), und neue Launches übernehmen diese Einstellungen. Aus Millionen gestarteter Ads wissen wir, welche Einstellungen zusammengehören und wo Leute auf Probleme stoßen, und dieses gesammelte Wissen steckt im Workflow statt in einem Prompt. Dein Agent lädt einen Ordner mit Creatives hoch, führt ads create:preview aus, um genau zu prüfen, was erstellt wird, und erstellt dann die Ads, mit denselben Presets und gespeicherten Builds wie die Web-App. Die CLI-Doku deckt alle Befehle ab.

Drei praktische Unterschiede fallen schnell auf:

  • Setup. Die Installation ist npm install -g @adsuploader/cli (dafür brauchst du Node.js 18+), dann authentifiziert dich ads login im Browser mit deinem Ads Uploader Konto. Es gibt keine Entwickler-App und keinen System-User-Token. Metas pip install meta-ads ist ebenfalls eine Zeile, wenn Python 3.12+ vorhanden ist; das eigentliche Theater dort ist die Authentifizierung: eine Entwickler-App, ein Admin-System-User, Asset-Zuweisung und ein Token mit Scopes.
  • Cloud-Speicher. Creatives liegen oft in Google Drive. ads upload:drive "<shared folder link>" übergibt einen per Link geteilten Drive-Ordner an unsere Infrastruktur, die die Medien serverseitig herunterlädt und verarbeitet, und das gehostete Ads Uploader MCP nimmt einen Drive-Ordner- oder Datei-Link genauso an. Das ist oft schneller, als Dateien selbst hin- und herzuschieben.
  • Gespeicherte Builds, die du öffnen kannst. Web-App, CLI und MCP teilen sich denselben Build. Ein Agent kann eine ganze Kampagne über CLI oder MCP zusammenstellen und einen Build-Link zurückgeben. Öffne ihn im Ads Uploader Uploader, und du kannst Texte, die Ad-Set-Konfiguration und Enhancements ändern oder weitere Medien hinzufügen und dann aus dem Web starten oder mit demselben Build über CLI oder MCP weitermachen. Ein offener Uploader-Tab übernimmt die Änderungen des Agenten automatisch. In einem reinen Chat-Workflow siehst du das beabsichtigte Ergebnis eigentlich erst, wenn die Ads starten, und das zählt am meisten bei Konten anderer Leute.

Welcher Weg sinnvoll ist, hängt von deinem Setup ab:

  • Ein einfaches Setup: ein Werbekonto, statische Bilder in ein paar Größen, eine Kampagnenstruktur. Du kannst eigene Skills auf Metas CLI oder MCP bauen, um genau so hochzuladen, wie du willst, und es ist eine gute Möglichkeit, die API kennenzulernen.
  • Agenturen und Partner: viele Konten, unterschiedliche Kampagnen-Setups pro Kunde und die Komplikationen, die jedes davon mit sich bringt. Genau dort geraten selbst gebaute Skills gern ins Straucheln, weil jedes neue Konto weitere Kombinationen hinzufügt. Ads Uploader ist dort das Sicherheitsnetz. Du lagerst das Wissen und die Umsetzung an einen Workflow aus, der von Tausenden Media Buyern und Agenturen erprobt ist, zu einem sehr erschwinglichen Preis.

Dann ist da noch die Pflege. Metas Tools, Berechtigungen und Freigaberegeln ändern sich ständig: Zugriffsstufen wurden in Limited und Full umbenannt, neue Kampagnentypen bringen neue Berechtigungen, App Review greift, sobald eine App Konten anderer Businesses verwaltet, und muss wiederholt werden, wenn sich Anforderungen ändern, und unserer Erfahrung nach dauern diese Reviews heute viel länger als früher. Wenn jemand anderes Tools, Berechtigungen und Freigaben im Blick behält, wirst du nicht abgehängt, wenn sie sich ändern. Ads Uploader ist eine freigegebene Meta-App, die wir pflegen, mit etablierten Kanälen, um Plattform- und API-Probleme bei Meta zu melden, wenn auf Metas Seite etwas kaputtgeht, also ist es unser Job, diese Änderungen zu verfolgen, nicht deiner.

Meta Ads CLI vs Ads Uploader CLI

So schneiden die beiden im direkten Vergleich ab:

Meta Ads CLIAds Uploader CLI
Installationpip install meta-ads (Python 3.12+)npm install -g @adsuploader/cli (Node.js 18+)
Auth und SetupDeine eigene Meta-Entwickler-App, ein Admin-System-User, Asset-Zuweisung und ein Token mit Scopesads login im Browser mit deinem Ads Uploader Konto
VorschauKein Dry Run und keine Vorschau; Prüfung durch Zurücklesen der Objekteads create:preview zeigt, was erstellt wird, bevor du es erstellst
Cloud-ImportLiest lokale Dateien; Cloud-Speicher muss auf die Festplatte synchronisiert werdenads upload:drive importiert einen per Link geteilten Google-Drive-Ordner serverseitig
Builds und ReviewJeder Befehl ist ein eigenständiger API-Call, ohne gespeicherten PlanGespeicherte Builds, geteilt mit Web-App und MCP; öffne den Build-Link, um in der UI zu prüfen und zu bearbeiten
Wartung und App-FreigabenDu pflegst App, Token, Zugriffsstufe und jedes App ReviewFreigegebene Meta-App, von uns gepflegt
KostenKostenlos; du zahlst nur die WerbeausgabenBezahlte Pläne

Wenn du einem Coding-Agenten Metas API ohne irgendetwas dazwischen geben willst, ist das offizielle Meta Ads CLI der naheliegende Startpunkt, und für ein einfaches Setup ist es ein guter. Wenn du Vorschau, Launch-Logik und Freigaben lieber nicht selbst bauen und pflegen willst, genau diesen Job übernimmt das Ads Uploader CLI.

Gib deinem KI-Agenten ein Sicherheitsnetz

Launche über alle Kundenkonten hinweg, mit einem MCP und CLI für Power-Media-Buyer und Agenturen.

Ads Uploader kostenlos testen

Keine Kreditkarte nötig • 7 Tage kostenlos testen

Häufig gestellte Fragen

Ist das Meta Ads CLI kostenlos?

Ja. Meta verlangt keine separate Gebühr für das CLI. Du installierst das Paket meta-ads kostenlos über PyPI und zahlst nur deine normalen Werbeausgaben. Das Paket ist proprietär statt Open Source, und du brauchst trotzdem eine Meta-Entwickler-App und einen System-User-Token.

Gibt es ein offizielles Facebook Ads CLI?

Ja. Metas offizielles CLI für Facebook- und Instagram-Ads ist das Python-Paket meta-ads, gestartet am 29. April 2026, mit Befehlen unter meta ads.

Kann das Meta Ads CLI Video-Ads hochladen?

Ja. Übergib eine lokale Datei mit --video an meta ads creative create, und das CLI lädt sie hoch. Meta dokumentiert mp4-, mov-, avi-, mkv- und wmv-Dateien, und Dynamic Creative akzeptiert bis zu 10 Videos über wiederholbare --videos-Flags.

Muss ich Entwickler sein, um das Meta Ads CLI zu nutzen?

Du musst keinen API-Code schreiben, aber das Setup ist recht entwicklerlastig: Python 3.12+, eine Meta-Entwickler-App, ein Admin-System-User mit zugewiesenen Assets und ein Token mit den richtigen Scopes. Viele Media Buyer lassen einen KI-Coding-Agenten die Installation übernehmen und die Befehle ausführen.

Kann ich mit dem Meta Ads CLI mehrere Werbekonten verwalten?

Ja, wenn der System-User jedem Konto zugewiesen ist. Liste sie mit meta ads adaccount list auf, setze mit AD_ACCOUNT_ID einen Standard oder überschreibe ihn pro Befehl mit --ad-account-id. Es gibt keine benannten Profile, also gib das Konto bei jedem Schreibvorgang explizit an.

Welche Python-Version braucht das Meta Ads CLI?

Python 3.12 oder neuer. Das Paket wird als kompilierte Wheels ausgeliefert, daher gibt es bei einer älteren Python-Version oder einer nicht unterstützten Plattform den Fehler "No matching distribution found." Eine virtuelle Umgebung mit Python 3.12 oder 3.13 vermeidet das.

Funktioniert das Meta Ads CLI mit Claude Code und Codex?

Ja. Meta nennt KI-Agenten ausdrücklich als Zielgruppe, und jeder Agent, der Shell-Befehle ausführt und JSON liest, kann es steuern. Keiner der beiden Agenten bringt von sich aus Sicherheit mit, also genehmige Lesevorgänge automatisch und verlange deine Zustimmung für Erstellungen, Aktivierungen, Budgetänderungen und Löschungen.

Wird mein Werbekonto gesperrt, wenn ich das Meta Ads CLI nutze?

Ein einfaches Ja oder Nein gibt es nicht. Das CLI ist Metas eigenes Tool für Entwickler und KI-Agenten, und Meta hat weder gesagt, dass seine Nutzung Einschränkungen verursacht, noch dass sie davon ausnimmt. Richtlinien, Zugriffsstufen und Rate-Limits gelten wie bei jeder anderen Integration. Manche Werbetreibende berichten von Einschränkungen, nachdem sie mit Agenten automatisiert haben, aber jeder Fall ist anders, also halte Schreibvorgänge unter Kontrolle und begrenze Schleifen.

Was ist der Unterschied zwischen dem Meta Ads CLI und dem Meta Ads MCP?

Das CLI ist ein lokales Python-Tool, das Shell-Befehle mit einem System-User-Token ausführt. Das Meta Ads MCP ist ein von Meta gehosteter Server unter mcp.facebook.com/ads, mit dem sich KI-Chat-Clients per OAuth verbinden, ohne Entwickler-App im Standard-Connector-Flow. Das CLI passt zu Skripten und Coding-Agenten, das MCP zu konversationeller Arbeit.

Erste Schritte mit dem Meta Ads CLI

Das Meta Ads CLI gibt Entwicklern und KI-Agenten einen offiziellen, skriptfähigen Zugang zur Marketing API, und Version 1.1.0 kann weit mehr als das Release aus der Launch-Woche. Die Kurzfassung:

  • Installiere meta-ads in einer virtuellen Umgebung mit Python 3.12+ und pinne es zusammen mit facebook-business.
  • Authentifiziere dich mit dem Token eines Admin-System-Users, der nur den Assets zugewiesen ist, die du brauchst, gespeichert in .env.
  • Entscheide, was du bauen willst: Ein einfaches Setup mit einem Konto lässt sich leicht selbst skripten; Agenturarbeit mit mehreren Konten ist der Punkt, an dem sich ein gepflegter Launch-Workflow bezahlt macht.
  • Plane um die Lücken herum: kein Dry Run, keine Transaktionen, kein Batch-Befehl, rohes JSON für fortgeschrittene Formate.
  • Mit einem Agenten genehmigst du Lesevorgänge automatisch und sicherst jeden Schreibvorgang ab.

Nutze das Meta Ads CLI in deiner ersten Woche nur lesend. Ruf Insights als JSON ab, dann baue eine Testkampagne und führe sie von Hand durch Review und Aktivierung. Sobald sich dieser Ablauf routiniert anfühlt, weißt du, welche Teile du automatisieren und welche du selbst in der Hand behalten willst.

Chris Pollard
Chris Pollard

Chris ist der Gründer von Ads Uploader und hilft Marketing-Teams und Agenturen dabei, Stunden bei der Meta Ads Automatisierung zu sparen. Nach Jahren, in denen er beobachtete, wie Teams Zeit mit sich wiederholenden Ad-Uploads verschwendeten, baute er das Tool, das er sich gewünscht hatte.

Schluss mit dem Hochladen
Ad für Ad

Lade hunderte Anzeigen in Minuten hoch. Auto-Matching für Videoformate und Thumbnails. Direktes Veröffentlichen bei Meta.

Ads Uploader kostenlos testen

Keine Kreditkarte nötig
7 Tage kostenlos

Ad Library Helper

Kostenlose Chrome-Erweiterung, um Anzeigen aus der Meta Ad Library zu durchsuchen, zu filtern und zu speichern.

Kostenlos sichern

Entwickelt von Ads Uploader

Bereit, deine Meta Ads zu skalieren?

Sieh, warum Performance-Marketer, Agenturen und Marken Ads Uploader für ihre Bulk-Creative-Uploads vertrauen. Starte hunderte Anzeigen in Minuten statt Stunden.

Kostenlos loslegen

7 Tage kostenlos testen

Keine Kreditkarte nötig

Jederzeit kündbar