duplicate_negative_keywords_list
Duplicate (copy) a negative keyword list from one search channel to the other: Google Ads to Microsoft Ads (Bing), or Microsoft Ads to Google Ads.
Writes search
Creates or changes something in the account. Put it behind whatever review your agent uses.
What it does
Duplicate (copy) a negative keyword list from one search channel to the other:
Google Ads to Microsoft Ads (Bing), or Microsoft Ads to Google Ads.
KEYWORDS: duplicate, copy, clone, replicate, negative keywords, Bing, Microsoft Ads, Google Ads
PURPOSE:
Users who run the same campaigns on Google and Bing keep the two negative keyword
libraries in sync by hand. This tool copies an existing negative keyword list to the
other search channel in one call: the platform reads the source list's keywords,
adapts match types for the target channel, and creates a new list there.
WHAT IT DOES (server-side, automatic):
- Reads every keyword in the source list.
- Remaps match types for the target: Microsoft Ads does not support BROAD negative
keywords, so BROAD (and untyped) keywords become PHRASE when the target is
Microsoft Ads. EXACT and PHRASE are kept as-is. Google-bound copies keep all
match types unchanged.
- Creates a NEW list on the target channel. The source list is never modified.
DRY RUN (preview):
Call with dryRun=true first when the source list may contain BROAD keywords.
Nothing is created; the response reports keywordsCopied and broadRemappedToPhrase
so you can tell the user "N broad keywords will become phrase match on Microsoft"
and let them confirm. Then repeat the call with dryRun=false to actually create.
PARAMETERS:
- sourceListId: Required. The id of the negative keyword list to copy, as returned
by list_negative_keywords_list.
- sourceChannel: Channel the source list lives on. Default GOOGLE_ADS.
- targetChannel: Channel to create the copy on. Default MICROSOFT_ADS.
Must differ from sourceChannel - only cross-channel copies are supported.
- name: Optional name for the new list. When omitted the platform derives
"<source name> (<target>)", e.g. "Competitor Brands (Microsoft)".
- dryRun: Optional, default false. When true, preview without creating.
RESPONSE FORMAT:
{
"id": 456, // new list id on the target channel; null on dry run
"name": "Competitor Brands (Microsoft)",
"keywordsCopied": 32,
"broadRemappedToPhrase": 5, // 0 when target is Google Ads
"dryRun": false
}
WORKFLOW:
1. Find the source list id with list_negative_keywords_list (or ask the user).
2. Optional: duplicate_negative_keywords_list(sourceListId=..., dryRun=true) to
preview the match-type conversion and confirm with the user.
3. duplicate_negative_keywords_list(sourceListId=...) to create the copy.
4. The new list exists on the target channel; attach it to campaigns like any
other negative keyword list.
ERROR CASES:
- Source list not found (or empty) on the source channel: the platform rejects the
copy with a not-found error - re-check the id and sourceChannel.
- Same source and target channel: rejected; use the platform UI's same-channel
duplicate instead.
- Accounts are capped at 20 negative keyword lists per channel; if the target
channel is at the cap the creation fails - delete a list there first.
EXAMPLES:
- "Copy my Google negative list to Bing":
duplicate_negative_keywords_list(sourceListId=123)
- Preview first:
duplicate_negative_keywords_list(sourceListId=123, dryRun=true)
- Custom name, Microsoft to Google:
duplicate_negative_keywords_list(sourceListId=77, sourceChannel="MICROSOFT_ADS",
targetChannel="GOOGLE_ADS", name="Brand Safety (Google)")
RELATED TOOLS:
- list_negative_keywords_list / get_negative_keywords_list_details: find the source
list and inspect its keywords (currently Google Ads only).
- create_negative_keywords_list: build a brand-new list from scratch instead.Arguments
| Argument | Type | Notes | |
|---|---|---|---|
sourceListId |
integer | required | Id of the negative keyword list to copy, as returned by list_negative_keywords_list. |
sourceChannel |
string | Channel the source list lives on. Default GOOGLE_ADS. one of: GOOGLE_ADS, MICROSOFT_ADS |
|
targetChannel |
string | Channel to create the copy on. Must differ from sourceChannel. Default MICROSOFT_ADS. one of: GOOGLE_ADS, MICROSOFT_ADS |
|
name |
string | Optional name for the new list. Defaults to "<source name> (<target>)", e.g. "Competitor Brands (Microsoft)". | |
dryRun |
boolean | When true, preview the copy (keyword count + BROAD-to-PHRASE conversions) without creating the list. |
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_negative_keywords_list","arguments":{"sourceListId":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.
Related
Other search tools: