Docs menu

MCP tool · Actions

duplicate_ad

Copies an ad into other ad sets of the same ad account, keeping the same post (likes, comments, shares).

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

What it does

Duplicate a winning ad into one or more target ad sets of the same ad account, on the SAME Facebook post: its likes, comments and shares stay (a new ad on its post id, else on its creative). Instagram starts a new post for each ad, as with a post id in Ads Manager. Use when user asks to duplicate, replicate, scale a winning creative to other campaigns.

Keeps the SAME Facebook post (its likes, comments and shares): a new ad on its post id, else on its creative (Meta's /copies made a new post). Instagram starts a new post for each ad, as with a post id in Ads Manager. Only inside the same ad account (a copy into another ad account makes a new post); changing a text or the URL afterwards makes a new post too. The result lists each new ad id and the method used (post_id: shown as an existing post in Ads Manager; shared_creative: the same post shown as a new ad).

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

  • source_ad_id string required

    ID of the ad to duplicate

  • source_ad_name string required

    Name of the source ad (for confirmation display)

  • target_adset_ids array of strings required

    Ad set IDs to duplicate into

  • target_adset_names array of strings required

    Names of target ad sets (for confirmation display)

  • ad_account_id string required

    Meta ad account id (act_…), from list_ad_accounts

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

  • rename_suffix string optional

    Optional suffix to append to duplicated ad names (e.g. " - Copy")

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": "duplicate_ad",
    "arguments": {
      "source_ad_id": "120200000000000003",
      "source_ad_name": "Nordlicht | Spring launch",
      "target_adset_ids": [
        "120200000000000001"
      ],
      "target_adset_names": [
        "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":"duplicate_ad","arguments":{"source_ad_id":"120200000000000003","source_ad_name":"Nordlicht | Spring launch","target_adset_ids":["120200000000000001"],"target_adset_names":["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