Docs menu

MCP tool · Actions

create_adset

A new ad set in an existing campaign, from scratch or copying another ad set's targeting and conversion; created paused.

Prepares Scope: actions Pro and Scale plans Credits: Free*

What it does

Create a new ad set in an existing campaign. The ad set is created as PAUSED. Use when user asks to create a new ad set or audience. In a campaign budget (CBO) leave daily_budget out: the campaign's budget and bid strategy apply, each ad set gets its own bid_amount / roas_floor. In ABO, daily_budget is required. copy_from_adset_id copies the audience, optimization, conversion event, destination and attribution of an ad set of the same account (then targeting and optimization_goal can be left out).

In Apogee this only PREPARES the action: it returns an action_id and what will change. Show it to the user and call execute_action only after their explicit OK (valid 24 hours).

Parameters

  • campaign_id string required

    Campaign ID to create the ad set in

  • name string required

    Ad set name

  • ad_account_id string required

    Meta ad account id (act_…), from list_ad_accounts

    Matches ^(act_)?\d{1,32}$

  • copy_from_adset_id string optional

    Optional: an ad set of the same account to copy targeting, optimization_goal, billing_event, promoted_object, destination_type and attribution_spec from (its budget, bid and schedule are not copied)

  • daily_budget number optional

    ABO only: daily budget in cents (e.g. 2000 = 20€). Leave it out in a CBO campaign

  • targeting object optional

    Targeting spec (geo_locations, age_min, age_max, genders, interests, custom_audiences, etc.). Required unless copy_from_adset_id

  • optimization_goal string optional

    Optimization goal (e.g. OFFSITE_CONVERSIONS, LINK_CLICKS, IMPRESSIONS). Required unless copy_from_adset_id

  • promoted_object object optional

    Conversion event, e.g. { pixel_id, custom_event_type: "PURCHASE" }. Required for OFFSITE_CONVERSIONS / VALUE / LEAD_GENERATION unless copied

  • billing_event string optional

    Billing event (default IMPRESSIONS)

  • bid_strategy string optional

    ABO: this ad set's bid strategy (default LOWEST_COST_WITHOUT_CAP). CBO: the campaign's (leave it out)

    One of LOWEST_COST_WITHOUT_CAP, COST_CAP, LOWEST_COST_WITH_BID_CAP, LOWEST_COST_WITH_MIN_ROAS

  • bid_amount number optional

    Cost cap / bid cap in cents (e.g. 2500 = 25€): required with COST_CAP and LOWEST_COST_WITH_BID_CAP

  • roas_floor number optional

    Minimum ROAS strategy: the ROAS floor, e.g. 2.5 (optimization becomes VALUE)

  • start_time string optional

    Optional: start time in ISO format

Example

Your assistant calls it for you when you ask in your own words. What it sends (MCP tools/call, JSON-RPC 2.0):

tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "create_adset",
    "arguments": {
      "campaign_id": "120200000000000001",
      "name": "Nordlicht | Spring launch",
      "ad_account_id": "act_1234567890"
    }
  }
}

The same call over HTTP with an API key, for an MCP client of your own (an assistant that signs in sends its OAuth token instead):

curl
curl -X POST https://app.apogee.ad/mcp \
  -H "Authorization: Bearer $APOGEE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_adset","arguments":{"campaign_id":"120200000000000001","name":"Nordlicht | Spring launch","ad_account_id":"act_1234567890"}}}'

Access and cost

PlansPro and Scale.
Scopeactions: a connection or an API key without it does not see this tool (scopes).
EffectStores a plan or an action and says what it will do. Nothing changes on the ad account until it is confirmed.
CreditsFree up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A call that fails costs nothing (credits).
Rate limit600 MCP requests per 15 minutes on Pro, 1,200 on Scale (rate limits).
Daily capCounts 2 units toward the 2,000 units one API key or assistant connection can use in 24 hours.

In the REST API

The same thing for your own code, with an API key:

Actions: Each tool only prepares: it returns an action_id and what will change. Nothing changes until execute_action, after your explicit OK, within 24 hours. Created objects are paused unless you ask otherwise.

Last updated on . The parameters, limits, credits and error codes of these pages are generated from the code of the Apogee API (contract 2026-10-06).

A question, something missing? Write to hello@apogee.ad.

Book a demo

Pick the time that suits you.

Open in a new tab

Loading the calendar…

Talk to Founder