Skip to Content
Tool referenceCreate campaign

Create campaign (adsap_create_campaign)

Platform: Meta · Read or write: Write · Plan: All plans · Consumes a task: Yes · Preview supported: Yes

What it does

Creates a Meta campaign in the ad account you name. You set the objective, the budget model and any special ad category. The campaign starts paused unless you ask for it to go live. Ask for a preview first: the copilot validates the setup and shows a launch review card where you confirm, create and activate.

When to use it

  • Use it as the first step of a Meta launch. Ad sets and ads need a campaign to sit in, and adsap_create_ad_sets comes next.
  • It needs three things: ad_account_id, name and objective. The objective is one of six Meta values, from OUTCOME_AWARENESS to OUTCOME_SALES.
  • A campaign-level daily_budget or lifetime_budget needs campaign_budget_optimization set to true. Without it, set budgets on each ad set. lifetime_budget also needs start_time and stop_time.
  • For Catalog or Collection ads, set advantage_catalog_ads to true and pass a catalog_id from adsap_list_catalogs. This works on OUTCOME_SALES only.
  • It supports a preview call. With dry_run set to true, Adsap validates the setup and creates nothing.

Worked example

You ask

“Set up a sales campaign called Spring sale in act_1234567890 with a $100 daily budget at the campaign level. Preview it first.”

The assistant calls adsap_create_campaign

{ "ad_account_id": "act_1234567890", "name": "Spring sale", "objective": "OUTCOME_SALES", "campaign_budget_optimization": true, "daily_budget": 10000, "dry_run": true }

Adsap returns

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

{ "dry_run": true, "validation_passed": true, "resolved_payload": { "ad_account_id": "act_1234567890", "campaign_name": "Spring sale", "objective": "sales", "status": "PAUSED", "advantage_catalog_ads": "off", "catalog_id": null, "budget_strategy": "campaign", "budget_type": "daily_budget", "budget_amount": 100, "share_budget": "off", "bid_strategy": "highest_volume", "special_ad_categories": "none", "spend_cap": null, "start_time": null, "stop_time": null, "buying_type": "AUCTION" }, "request_echo": { "ad_account_id": "act_1234567890", "name": "Spring sale", "objective": "OUTCOME_SALES", "campaign_budget_optimization": true, "daily_budget": 10000 }, "warnings": ["No end date set. The campaign will run until you pause it."] }

How to read it

validation_passed means the setup passed Adsap’s checks. resolved_payload is what Adsap would send to create the campaign. You send daily_budget in cents, and budget_amount shows it in currency units: 10000 becomes 100. status is PAUSED because the call did not ask for ACTIVE. request_echo repeats your input. The example leaves out a few resolved_payload fields, such as internal IDs.

Read warnings before you confirm. The list always ends with a reminder that Meta runs its own checks at creation and can still reject the campaign. 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
ad_account_idstringYes
namestringYes
objectiveone of OUTCOME_AWARENESS, OUTCOME_TRAFFIC, OUTCOME_ENGAGEMENT, OUTCOME_LEADS, OUTCOME_APP_PROMOTION, OUTCOME_SALESYes
buying_typeone of AUCTION, RESERVEDNo
daily_budgetnumberNoIn cents. Mutually exclusive with lifetime_budget.
lifetime_budgetnumberNoIn cents. Mutually exclusive with daily_budget.
spend_capnumberNoIn cents.
start_timestringNoRequired with lifetime_budget.
stop_timestringNoRequired with lifetime_budget.
special_ad_categoriesarray of one of NONE, HOUSING, EMPLOYMENT, CREDIT, FINANCIAL_PRODUCTS_SERVICES, ISSUES_ELECTIONS_POLITICS, ONLINE_GAMBLING_AND_GAMINGNoMeta Special Ad Category. Required for ads about financial products and services (FINANCIAL_PRODUCTS_SERVICES; CREDIT is the retired name), employment, housing, social issues/elections/politics, or online gambling and gaming. Housing, employment and financial categories lock ad set targeting to 18-65+, all genders and a 15 mi / 25 km radius floor…
special_ad_category_countryarray of stringNoISO country codes, one or several. Required when special_ad_categories is set; ad sets under the campaign must target inside this list.
campaign_budget_optimizationbooleanNoEnable CBO.
share_budget_with_ad_setsbooleanNoCampaign-level toggle for Meta’s “Share some of your budget with other ad sets” (is_adset_budget_sharing_enabled). Only valid on ABO campaigns (no campaign-level budget) whose ad sets use DAILY budgets; rejected on CBO campaigns (Meta error 4834002). Worth considering for ABO campaigns with multiple ad sets.
bid_strategyone of LOWEST_COST_WITHOUT_CAP, COST_CAP, BID_CAP, LOWEST_COST_WITH_MIN_ROASNoCampaign-level bid strategy. Only applied under CBO (campaign_budget_optimization: true) or when share_budget_with_ad_sets is true (budget sharing requires a campaign bid strategy: Meta error 4834005); ignored for plain ad-set-budget campaigns. Cap and ROAS values are set per ad set via adsap_create_ad_sets (bid_amount / roas_target), not at the campaign level.
statusone of PAUSED, ACTIVENo
promoted_objectobjectNoOUTCOME_APP_PROMOTION + iOS apps ONLY: campaign-level app binding for iOS/SKAdNetwork campaigns (is_skadnetwork_attribution is set automatically). Meta treats any campaign with a campaign-level promoted_object as an iOS-14 SKAN campaign: Android apps are rejected there (2446632)… The app must be in Live mode and advertisable by the ad account.
promoted_object.application_idstringYes
promoted_object.object_store_urlstringYes
advantage_catalog_adsbooleanNoEnable Advantage+ Catalog Ads (catalog-based advertising). OUTCOME_SALES only, and requires catalog_id. REQUIRED for any campaign that will host Catalog or Collection ads: Meta binds the catalog at the CAMPAIGN level, so a plain sales campaign cannot host them.
catalog_idstringNoMeta product catalog id to bind to the campaign. Required when advantage_catalog_ads is true, ignored otherwise. Get ids from adsap_list_catalogs.
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.
idempotency_keystringNo

Example prompts

  • “Create a sales campaign called Summer Sale with a $50 daily budget and campaign budget optimization on.”
  • “Set up a leads campaign for the French account, paused, with a lifetime budget of 2,000 EUR ending June 30.”
  • “Preview a catalog sales campaign using my main product catalog before you create anything.”

Notes

Catalog and Collection ads need the catalog bound at the campaign level. Say so when you create the campaign, or those ads fail later.

  • adsap_get_campaign: Read ONE campaign in full, live from Meta: effective_status, objective, buying_type, bid strategy, budgets (campaign budget present =…
  • adsap_list_apps: List the apps an ad account can promote: use to pick application_id + object_store_url for App promotion (OUTCOME_APP_PROMOTION)…
  • adsap_list_campaigns: List Meta campaigns in an ad account (fast cached list).

Guide

Read Creating a campaign 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