Meta Ads: Create adset
meta_create_adsetNeues Meta-Adset anlegen (Default PAUSED) — hier liegen Budget und Zielgruppe.
daily_budget / lifetime_budget: EUR, genau eines davon (error=budget_conflict
bei beiden); ohne CBO Pflicht (sonst error=budget_required), bei
CBO-Kampagne wird das Adset-Budget ignoriert. lifetime_budget =
Gesamtsumme bis end_time und braucht end_time (error=end_time_required).
optimization_goal: z.B. LINK_CLICKS, LANDING_PAGE_VIEWS, REACH,
OFFSITE_CONVERSIONS, LEAD_GENERATION.
promoted_page_id: Page, deren Instant Forms das Adset bewirbt — Pflicht bei
LEAD_GENERATION (sonst error=promoted_page_required; ID aus
meta_list_pages). Wird als promoted_object={page_id} gesendet.
pixel_id + custom_event_type: Pixel und Ereignis, auf das optimiert wird —
Pflicht bei OFFSITE_CONVERSIONS und immer nur zusammen (sonst
error=pixel_event_required; Pixel aus meta_list_pixels). Ereignisse
laut Meta-Enum, z.B. LEAD, PURCHASE, COMPLETE_REGISTRATION, CONTACT,
SUBMIT_APPLICATION, SUBSCRIBE, ADD_TO_CART, INITIATED_CHECKOUT
(error=invalid_custom_event_type bei anderen Werten). Wird als
promoted_object={pixel_id, custom_event_type} gesendet.
destination_type: wohin die Anzeige führt, laut Meta-Enum — z.B. WEBSITE,
ON_AD (Instant Form direkt in der Anzeige; Metas Lead-Ads-Beispiel),
MESSENGER, WHATSAPP, INSTAGRAM_DIRECT, APP, FACEBOOK_PAGE
(error=invalid_destination_type bei anderen Werten).
Lead-Adset (Instant Form): optimization_goal='LEAD_GENERATION',
promoted_page_id, destination_type='ON_AD'; Anzeige danach mit
meta_create_ad(lead_gen_form_id=...). Voraussetzung: ein Page-Admin
hat die Lead-Ads-Nutzungsbedingungen akzeptiert (meta_list_pages ->
leadgen_tos_accepted); sonst lehnt Meta die Anzeige ab.
Zurücklesen: meta_list_adsets zeigt promoted_object und destination_type.
bid_strategy: Default LOWEST_COST_WITHOUT_CAP ('Highest Volume');
LOWEST_COST_WITH_BID_CAP/COST_CAP brauchen bid_amount (EUR);
LOWEST_COST_WITH_MIN_ROAS braucht min_roas (error=min_roas_required),
kennt KEIN bid_amount (error=bid_amount_not_applicable) und bei Meta
optimization_goal='VALUE' plus ein für Wertoptimierung freigeschaltetes
Konto. Bei einer CBO-Kampagne liegt die Strategie an der Kampagne und
gilt für jedes Adset: bid_strategy hier weglassen (abweichende Angabe:
error=bid_strategy_campaign_level) und je nach Kampagnenstrategie nur
bid_amount (BID_CAP/COST_CAP, Pflicht) bzw. min_roas (MIN_ROAS,
Pflicht) mitgeben — das Tool liest die Kampagnenstrategie und prüft
dagegen. Zurücklesen: meta_list_adsets bid_strategy/bid_amount_eur/
min_roas (Strategie bei CBO via meta_list_campaigns).
min_roas: Mindest-ROAS als Verhältnis (2.5 = 250 %, erlaubt 0.01–1000;
error=invalid_min_roas), wird als bid_constraints.roas_average_floor
(×10000) gesendet. Nur mit LOWEST_COST_WITH_MIN_ROAS (am Adset oder,
bei CBO, an der Kampagne), sonst error=min_roas_not_applicable.
countries: ISO-Codes. Default ['AT'] gilt NUR, wenn keine Geo-Verfeinerung
(regions/cities/zips/custom_locations) übergeben wird; genders: nur
'male'/'female', Default alle — andere Werte werden still ignoriert;
custom_audience_ids: IDs aus meta_list_audiences.
Geo-Verfeinerung — Schlüssel immer via meta_targeting_search holen, nie
raten. Formate: cities=[{'key': '2420605', 'radius_km': 17}] (Umkreis
um eine Stadt 17–80 km, ohne radius_km nur das Stadtgebiet;
error=invalid_city_radius), regions=['1234'] (Bundesland/Region),
zips=['AT:5020'] (Landespräfix Pflicht, error=invalid_zip_key),
custom_locations=[{'latitude': 47.8, 'longitude': 13.04,
'radius_km': 10}] oder [{'address_string': 'Getreidegasse 9, Salzburg',
'radius_km': 5, 'name': 'Altstadt'}] (Umkreis 1–80 km,
error=invalid_custom_location). Städte/Umkreise aus meta_list_adsets
({'key', 'radius', 'distance_unit': 'kilometer', ...}) dürfen 1:1
übernommen werden; Meilen und unbekannte Felder werden abgelehnt
(error=invalid_city_radius/invalid_cities). Leere Listen sind beim
Anlegen keine Angabe. Konfliktregel von Meta (Subcode 1487756 "Some
locations conflict with each other"): Orte, die ineinander liegen,
dürfen nicht gemeinsam EINGESCHLOSSEN werden — countries=['AT'] +
Stadt Salzburg, Region Salzburg + Stadt Salzburg oder Stadt-Umkreis +
PLZ darin lehnt Meta ab; der Fehler kommt mit hint zurück. Deshalb:
nur die Verfeinerung gemeint → countries weglassen (dann kein
AT-Default). countries UND Verfeinerung zusammen nur länderübergreifend
(z.B. DE komplett + Salzburg/AT). Ausschlüsse INNERHALB eines
eingeschlossenen Gebiets sind erlaubt (excluded_geo_locations, z.B.
Region Salzburg minus Stadt Salzburg).
excluded_geo_locations: Gebiete AUSSCHLIESSEN, gleiche Struktur als Dict,
z.B. {'zips': ['AT:5020']} oder {'cities': [{'key': '...',
'radius_km': 17}]} oder {'countries': ['CH']}; andere Schlüssel
error=invalid_excluded_geo_locations.
excluded_custom_audience_ids: Custom Audiences ausschließen (IDs aus
meta_list_audiences, z.B. bestehende Kunden).
interest_ids / behavior_ids: Interessen bzw. Behaviors (IDs aus
meta_targeting_search kind='interest'/'behavior').
locales: Sprachen als Meta-Locale-Schlüssel (Ganzzahlen aus
meta_targeting_search kind='locale'; error=invalid_locales sonst).
Zurücklesen: meta_list_adsets zeigt Verfeinerungen, Ausschlüsse,
Interessen, Behaviors und locales im targeting.
dsa_beneficiary/dsa_payor: DSA-Pflichtangaben für EU-Ads — wer profitiert /
wer bezahlt (Payor default = Beneficiary), z.B. 'Honeyfield GmbH'.
Bei EU-/EWR-Targeting ohne dsa_beneficiary warnt das nicht-blockierende
warnings-Feld. Erfasst werden Geo-Einträge mit Ländercode sowie
country_groups; nicht auswertbare Geo-Listeneinträge erscheinen als
UNKNOWN.
advantage_audience: Metas KI-Zielgruppenerweiterung (Pflichtentscheidung;
Default False = konfiguriertes Targeting gilt exakt).
publisher_platforms: Plattformen, z.B. ['facebook','instagram']. OHNE Angabe
laufen AUTOMATISCHE Platzierungen, also auch Audience Network.
positions: Positionen je Plattform, z.B.
{'facebook': ['feed','story'], 'instagram': ['stream','reels']}.
Eine Plattform mit Positionen muss auch in publisher_platforms stehen.
device_platforms: ['mobile'] und/oder ['desktop'].
excluded_publisher_categories / excluded_publisher_list_ids: Brand Safety.
start_time / end_time: Zeitplan des Adsets. end_time ist das
Traffic-Enddatum (danach pausiert Meta die Auslieferung). Je als Datum
'2026-09-30' (= Tagesende) oder ISO-Zeitstempel; ohne Offset wird die
Zeitzone des Werbekontos angehängt (Meta würde sonst UTC annehmen).
Pflicht bei lifetime_budget und bei Adsets in Kampagnen mit
Laufzeitbudget (error=end_time_required), sonst optional.
validate_only: True lässt Meta den Aufruf prüfen, ohne etwas zu ändern.
Ein Erfolg heißt: Meta würde die Änderung annehmen.
campaign_id muss zum Werbekonto des Workspace gehoeren — eine Kampagne eines
anderen Kontos (auch wenn die Meta-Verbindung es sieht) → {'error': 'foreign_object'}.
workspace: Slug des Kunden-Workspace (optional bei nur einem Workspace).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| zips | No | ||
| cities | No | ||
| status | No | PAUSED | |
| age_max | No | ||
| age_min | No | ||
| genders | No | ||
| locales | No | ||
| regions | No | ||
| end_time | No | ||
| min_roas | No | ||
| pixel_id | No | ||
| countries | No | ||
| dsa_payor | No | ||
| positions | No | ||
| workspace | No | ||
| bid_amount | No | ||
| start_time | No | ||
| campaign_id | Yes | ||
| behavior_ids | No | ||
| bid_strategy | No | ||
| daily_budget | No | ||
| interest_ids | No | ||
| billing_event | No | IMPRESSIONS | |
| validate_only | No | ||
| dsa_beneficiary | No | ||
| lifetime_budget | No | ||
| custom_locations | No | ||
| destination_type | No | ||
| device_platforms | No | ||
| promoted_page_id | No | ||
| custom_event_type | No | ||
| optimization_goal | No | LINK_CLICKS | |
| advantage_audience | No | ||
| custom_audience_ids | No | ||
| publisher_platforms | No | ||
| excluded_geo_locations | No | ||
| excluded_publisher_list_ids | No | ||
| excluded_custom_audience_ids | No | ||
| excluded_publisher_categories | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||