Create ad sets (batch) (adsap_create_ad_sets)
Platform: Meta · Read or write: Write · Plan: All plans · Consumes a task: Yes · Preview supported: Yes
What it does
Creates one or more ad sets under an existing Meta campaign, up to 20 in one call. Each ad set carries its own targeting, placements, optimization goal, budget and schedule. Ad sets start paused. Ask for a preview first: the copilot validates every ad set and shows a launch review card where you confirm and activate.
Parameters
Descriptions are shortened from the tool schema. Your assistant sees the full text.
| Name | Type | Required | Description |
|---|---|---|---|
campaign_id | string | Yes | Parent campaign ID. Call list_campaigns first if needed. |
campaign_objective | one of OUTCOME_SALES, OUTCOME_LEADS, OUTCOME_AWARENESS, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT, OUTCOME_APP_PROMOTION | No | Parent campaign’s objective. Pass it (e.g. from adsap_create_campaign’s response) when the campaign was created recently and may not be cached yet. If omitted, resolved from cache; an unresolvable objective fails with guidance. |
ad_account_id | string | No | Target ad account. Defaults to user’s primary account. |
ad_sets | array of object | Yes | Array of ad set definitions. Max 20 per call. |
ad_sets[].name | string | Yes | Ad set name. |
ad_sets[].daily_budget | number | No | Daily budget in cents. |
ad_sets[].lifetime_budget | number | No | Lifetime budget in cents. |
ad_sets[].daily_min_spend_target | number | No | Min daily spend in cents. |
ad_sets[].daily_spend_cap | number | No | Max daily spend in cents. |
ad_sets[].start_time | string | No | ISO 8601 start time UTC. |
ad_sets[].end_time | string | No | ISO 8601 end time UTC. |
ad_sets[].optimization_goal | one of OFFSITE_CONVERSIONS, LINK_CLICKS, IMPRESSIONS, REACH, LANDING_PAGE_VIEWS, LEAD_GENERATION, VALUE, APP_INSTALLS and 8 more | Yes | Optimization goal for ad delivery. PROFILE_VISIT (traffic) / PROFILE_AND_PAGE_ENGAGEMENT (engagement) drive Instagram profile / Facebook Page visits: pair with an INSTAGRAM_PROFILE / FACEBOOK_PAGE / INSTAGRAM_PROFILE_AND_FACEBOOK_PAGE destination_type and a page_id; not available on Special Ad Category campaigns. AD_RECALL_LIFT / TWO_SECOND_CONTINUOUS_VIDEO_VIEWS are Awareness goals (TWO_SECOND also for Engagement + ON_VIDEO). |
ad_sets[].billing_event | one of IMPRESSIONS, LINK_CLICKS | No | |
ad_sets[].bid_strategy | one of LOWEST_COST_WITHOUT_CAP, COST_CAP, BID_CAP, MINIMUM_ROAS | No | |
ad_sets[].bid_amount | number | No | Bid cap in cents. |
ad_sets[].roas_target | number | No | ROAS target e.g. 2.5. |
ad_sets[].frequency_control_specs | object | No | Frequency cap (hard ceiling). Only supported for REACH and THRUPLAY optimization goals. REACH requires a cap: Meta defaults to 2 impressions per 7 days when omitted. |
ad_sets[].destination_type | one of WEBSITE, APP, ON_AD, WEBSITE_AND_LEAD_FORM, ON_PAGE, ON_VIDEO, ON_POST, INSTAGRAM_PROFILE and 2 more | No | Where users land after clicking. Default WEBSITE. APP is only valid on OUTCOME_APP_PROMOTION campaigns. |
ad_sets[].promoted_object | object | No | |
ad_sets[].attribution_spec | object | No | |
ad_sets[].pixel_id | string | No | |
ad_sets[].conversion_event | string | No | |
ad_sets[].page_id | string | No | |
ad_sets[].instagram_user_id | string | No | |
ad_sets[].advantage_audience | boolean | No | Advantage+ audience (targeting_automation.advantage_audience). Default false. For App promotion, true + broad geo-only targeting + automatic placements is Meta’s modern Advantage+ App setup (legacy smart_promotion_type is dead: Meta derives advantage_state from these settings). |
ad_sets[].saved_audience_id | string | No | Use a SAVED AUDIENCE instead of manual targeting (mirrors the web UI’s Saved Audience picker). When set, the backend takes the entire targeting spec (geo/age/gender/audiences) from the saved audience and IGNORES the targeting object and manual… Get ids from adsap_list_custom_audiences with type_filter SAVED. |
ad_sets[].targeting | object | No | Manual targeting. Required unless saved_audience_id is set (in which case it is ignored). |
ad_sets[].placements | object | No | Placement targeting. Omit entirely (or set use_advantage_placements true) for Advantage+ automatic placements (recommended). Set use_advantage_placements false and provide positions for manual placements. |
ad_sets[].status | one of PAUSED, ACTIVE | No | |
dry_run | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |
idempotency_key | string | No | Unique key to prevent duplicate creation from retries. |
Example prompts
- “Add an ad set to the Summer Sale campaign targeting women 25 to 45 in the US, optimized for purchases, $30 a day.”
- “Create three ad sets under this campaign, one each for the UK, Germany and France, same interests, 20 EUR daily each.”
- “Preview a lead ad set with Instant Forms as the destination before creating it.”
Notes
Messaging, calls, event responses, reminders and shop destinations are not supported yet. For those, use Meta Ads Manager. App promotion ad sets need the app store URL and an app in Live mode.
Related tools
adsap_list_ad_sets: List ad sets for a campaign.
Guide
Read Creating an ad set for the workflow around this tool, and the Tool reference for every tool.