Skip to Content
Tool referenceCreate ad sets (batch)

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.

When to use it

  • Use it once the campaign exists, to add 1 to 20 ad sets under it in one call.
  • Pass campaign_objective when the campaign is new. Adsap otherwise looks the objective up in its cache, and the call fails if it is not there yet.
  • Each ad set needs targeting with at least one country, or a saved_audience_id. Get targeting IDs from adsap_search_detailed_targeting and adsap_search_geo_locations.
  • Detailed targeting goes in targeting.flexible_spec, a list of groups as in Ads Manager. People must match at least one item inside a group (or), and every group (and). [{"interests":[Cooking],"behaviors":[Frequent Travelers]},{"family_statuses":[Parents (All)]}] reaches people who like cooking or travel often, and are parents. Up to 25 groups.
  • Meta combines the separate targeting.interests and targeting.behaviors lists with and: people must match an interest and a behavior. To use or between them, put both in one flexible_spec group.
  • Meta cannot build (A and B) or (C and D) in one ad set. Create two ad sets instead. Size the audience first with adsap_get_delivery_estimate, using the same groups.
  • OFFSITE_CONVERSIONS and VALUE need a pixel_id and a conversion_event. Pixels come from adsap_list_meta_assets, events from adsap_list_pixel_events.
  • It supports a preview call. With dry_run set to true, Adsap validates every ad set and creates nothing.

Worked example

You ask

“Add a Prospecting US ad set to the Spring sale campaign: people 25 to 54 in the US, optimized for purchases. The campaign holds the budget. Preview it first.”

The assistant calls adsap_create_ad_sets

{ "campaign_id": "120210000000002", "campaign_objective": "OUTCOME_SALES", "ad_account_id": "act_1234567890", "ad_sets": [ { "name": "Prospecting US", "optimization_goal": "OFFSITE_CONVERSIONS", "pixel_id": "120210000000009", "conversion_event": "PURCHASE", "targeting": { "countries": ["US"], "age_min": 25, "age_max": 54 } } ], "dry_run": true }

Adsap returns

The field names are the ones Adsap returns. The values are examples.

{ "dry_run": true, "validation_passed": true, "ad_sets_count": 1, "resolved_payloads": [ { "ad_account": "act_1234567890", "campaign": "120210000000002", "ad_set_name": "Prospecting US", "objective": "sales", "campaign_objective": "OUTCOME_SALES", "optimization_goal": "OFFSITE_CONVERSIONS", "destination_type": "WEBSITE", "budget": 0, "budget_type": "Campaign Budget", "geo_locations": { "countries": ["US"] }, "genders": "All", "age_min": 25, "age_max": 54, "placements": "", "pixel_id": "120210000000009", "custom_event_type": "PURCHASE", "advantage_audience": 0, "status": "PAUSED", "click_through": 7, "view_through": 1 } ], "warnings": [ "No budget set. Campaign must use CBO (Advantage Campaign Budget), otherwise Meta will reject." ] }

How to read it

resolved_payloads has one entry per ad set, with the defaults filled in. Here destination_type falls back to WEBSITE and status to PAUSED. An empty placements means Advantage+ automatic placements. click_through 7 and view_through 1 are the default attribution windows in days. The example shows part of each entry and leaves out request_echo, which repeats your input.

Read warnings before you confirm. This ad set has no budget, which only works when the campaign holds the budget. The list always ends with a reminder that Meta runs its own checks at creation. That entry is left out here. The preview opens a launch review card where you confirm the create.

Parameters

Descriptions are shortened from the tool schema. Your assistant sees the full text.

NameTypeRequiredDescription
campaign_idstringYesParent campaign ID. Call list_campaigns first if needed.
campaign_objectiveone of OUTCOME_SALES, OUTCOME_LEADS, OUTCOME_AWARENESS, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT, OUTCOME_APP_PROMOTIONNoParent 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_idstringNoTarget ad account. Defaults to user’s primary account.
ad_setsarray of objectYesArray of ad set definitions. Max 20 per call.
ad_sets[].namestringYesAd set name.
ad_sets[].daily_budgetnumberNoDaily budget in cents.
ad_sets[].lifetime_budgetnumberNoLifetime budget in cents.
ad_sets[].daily_min_spend_targetnumberNoMin daily spend in cents.
ad_sets[].daily_spend_capnumberNoMax daily spend in cents.
ad_sets[].start_timestringNoISO 8601 start time UTC.
ad_sets[].end_timestringNoISO 8601 end time UTC.
ad_sets[].optimization_goalone of OFFSITE_CONVERSIONS, LINK_CLICKS, IMPRESSIONS, REACH, LANDING_PAGE_VIEWS, LEAD_GENERATION, VALUE, APP_INSTALLS and 8 moreYesOptimization 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_eventone of IMPRESSIONS, LINK_CLICKSNo
ad_sets[].bid_strategyone of LOWEST_COST_WITHOUT_CAP, COST_CAP, BID_CAP, MINIMUM_ROASNo
ad_sets[].bid_amountnumberNoBid cap in cents.
ad_sets[].roas_targetnumberNoROAS target e.g. 2.5.
ad_sets[].frequency_control_specsobjectNoFrequency 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_typeone of WEBSITE, APP, ON_AD, WEBSITE_AND_LEAD_FORM, ON_PAGE, ON_VIDEO, ON_POST, INSTAGRAM_PROFILE and 2 moreNoWhere users land after clicking. Default WEBSITE. APP is only valid on OUTCOME_APP_PROMOTION campaigns.
ad_sets[].promoted_objectobjectNo
ad_sets[].attribution_specobjectNo
ad_sets[].pixel_idstringNo
ad_sets[].conversion_eventstringNo
ad_sets[].page_idstringNo
ad_sets[].instagram_user_idstringNo
ad_sets[].advantage_audiencebooleanNoAdvantage+ 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_idstringNoUse 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[].targetingobjectNoManual targeting. Required unless saved_audience_id is set (in which case it is ignored).
ad_sets[].placementsobjectNoPlacement 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[].statusone of PAUSED, ACTIVENo
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.
idempotency_keystringNoUnique 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.”
  • “Create an ad set in France for people who like cooking or travel often, and who are parents.”

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.

Guide

Read Creating an ad set for the workflow around this tool, and the Tool reference for every tool.

The Meta Ads MCP server  page shows how to connect Meta Ads to Claude, ChatGPT or Perplexity.

Last updated on