MMetadata /docs
Docs/Tools/duplicate_campaign

duplicate_campaign

Duplicate (copy) an existing campaign into a NEW DRAFT campaign.

Writes campaigns

Creates or changes something in the account. Put it behind whatever review your agent uses.

What it does

Duplicate (copy) an existing campaign into a NEW DRAFT campaign.

                KEYWORDS: duplicate, copy, clone, replicate, reuse, campaign, draft, copy of

                WHAT IT DOES:
                Creates a brand-new campaign that is a DEEP COPY of an existing one. The new
                campaign is created in DRAFT status and spends no budget. This mirrors the
                platform UI's "Duplicate campaign" action.

                WHAT GETS COPIED (server-side, automatic — there are NO toggles to choose):
                - Goal (Lead Gen / Brand Awareness)
                - Optimization (budget) group / tag
                - All landing pages
                - Every channel that is currently ENABLED FOR THE ACCOUNT, together with that
                  channel's audiences, ads/creatives, keywords, offers and bid settings.
                  (Channels that are disabled for the account are skipped — connect/enable the
                  channel on the account first if you need it carried over.)

                WHAT IS NOT COPIED / CHANGES:
                - The new campaign starts in DRAFT (the original's live/active state is NOT copied).
                - Start/end dates are not carried as a live schedule — set them on the new draft.
                - Only the new name is caller-controlled.

                REQUIRED PARAMETERS:
                - campaign_id (integer): The wizard/campaign ID of the campaign to duplicate.
                  Must be in status Launched, Launching, Editing, or Draft.

                OPTIONAL PARAMETERS:
                - name (string): The name for the NEW campaign. Must be non-blank, <= 255 chars,
                  and UNIQUE across the account's campaigns. If omitted, a unique name is
                  auto-generated as "<original name>_copy_<UTC timestamp>" (e.g.
                  "Q1_2026_Campaign_copy_20260115120000"). If you pass a name that
                  already exists on the account, the platform rejects it — choose a unique name
                  or omit it to auto-generate one.

                CAMPAIGN ID SOURCES:
                - search_campaigns_by_names tool (recommended)
                - list_wizard_campaigns tool
                - get_campaign_by_wizard_id tool

                WORKFLOW:
                1. Find the source campaign ID (search_campaigns_by_names / list_wizard_campaigns).
                2. duplicate_campaign(campaign_id=..., name="..."  # name optional).
                3. The response contains the NEW campaign's id and full configuration.
                4. Review the new DRAFT campaign and MODIFY it with the edit tools below (it is a
                   normal editable draft — change anything you want).

                AFTER DUPLICATING — HOW TO MODIFY THE NEW DRAFT:
                The copy is a regular DRAFT campaign, so use the standard campaign-editing tools on
                the NEW campaign id (NOT the original). The main ones:
                - add_and_edit_campaign_elements — the primary editor: rename, change budget group,
                  start/end dates, enable channels, replace per-channel offers, and ADD audiences,
                  exclusion audiences, ads, ad groups, and keywords. (Native / N×N×N campaigns:
                  use add_and_edit_native_campaign_elements.)
                - update_experiments_daily_budgets — adjust per-experiment daily budgets.
                - update_reddit_channel_settings — Reddit-specific channel/bid/pixel settings.
                - remove_channels_from_campaign / remove_audiences_from_campaign /
                  remove_ad_from_campaign / remove_keywords_from_campaign /
                  remove_offers_from_campaign / remove_target_groups_from_campaign
                  — remove elements from the copy.
                - manage_campaign — pause/restart (lifecycle).
                Tip: call get_campaign_by_wizard_id on the new id first to see what was copied,
                then edit. Use search_campaigns_by_names to re-locate the copy by its new name.

                EXAMPLE:
                User: "Make a copy of campaign 54050 called 'Q2 Relaunch'"
                Call: duplicate_campaign(campaign_id=54050, name="Q2 Relaunch")
                Then: add_and_edit_campaign_elements(campaign_id=<new id>, ...) to tweak the copy.

                RESPONSE FORMAT:
                Returns the full configuration of the newly created DRAFT campaign — including its
                new campaign id, name, status (Draft), goal, optimization group, and copied channels.
                Use the returned id with get_campaign_by_wizard_id and the edit tools.

                Anchor any date-derived naming to the REAL current date — call get_current_date if unsure.

Arguments

ArgumentTypeNotes
campaign_id integer required The wizard/campaign ID of the campaign to duplicate. Must be in status Launched, Launching, Editing, or Draft.
name string Name for the new (copied) campaign. Must be unique on the account and <= 255 chars. Omit to auto-generate '<original name>_copy_<timestamp>'.

Request

curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
  -H "Authorization: $METADATA_PAT" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "MCP-Protocol-Version: 2025-11-25" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"duplicate_campaign","arguments":{"campaign_id":0}}}'

Response

No recorded response. This tool writes to the account, so it is never executed to build these docs. The request above is still the exact shape to send. Nothing on this page is invented.

Other campaigns tools:

All 160 tools · machine-readable index