Draft campaign changes
update_campaignDraft changes to an existing campaign and return a preview without applying them. Only supplied settings change; confirm the plan to apply the update.
Instructions
Draft an update to an existing campaign — returns a PREVIEW, does NOT apply.
Only the parameters passed are changed; omitted ones stay as they are, and at least one change is required. Replacing geo targets keeps the campaign's negative geo exclusions (the preview lists them). A budget change shows the current amount; when the budget is shared with other campaigns, the preview names them and needs a double confirmation, because the new amount covers all of them. A bidding change on a campaign in a portfolio bid strategy takes it out of the portfolio, also with a double confirmation.
Returns a preview with a plan_id plus any warnings; nothing changes until confirm_and_apply applies it.
Google Ads API: https://developers.google.com/google-ads/api/docs/start
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"campaign_id": "<campaign_id>"
},
"name": "update_campaign"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| max_cpc | No | Maximize Clicks CPC cap in the account's currency when bidding_strategy is TARGET_SPEND, or when the existing campaign already uses TARGET_SPEND. Increases are limited by the config's max_bid_increase_pct. 0 leaves it unchanged. | |
| target_cpa | No | Target CPA in the account's currency; required if bidding_strategy is TARGET_CPA. 0 leaves it unchanged. | |
| campaign_id | Yes | The numeric ID of the campaign to update (required). | |
| customer_id | No | Google Ads customer ID (digits, e.g. "1234567890"). Empty uses the configured default account. | |
| target_roas | No | Target ROAS as a ratio (e.g. 4.0 = 400%); required if bidding_strategy is TARGET_ROAS. 0 leaves it unchanged. | |
| daily_budget | No | New daily budget in the account's currency (not micros), at most the config's max_daily_budget. 0 leaves it unchanged. On a shared budget it is the amount for every campaign sharing it. | |
| language_ids | No | REPLACES all language targets; must not be empty when given. Common IDs: "1001" German, "1000" English, "1002" French, "1003" Spanish, "1004" Italian. | |
| geo_target_ids | No | REPLACES all positive geo targets; must not be empty when given. Common IDs: "2276" Germany, "2040" Austria, "2756" Switzerland, "2840" USA, "2826" UK. | |
| location_option | No | PRESENCE | PRESENCE_OR_INTEREST | SEARCH_INTEREST. Who the geo targets reach; the preview shows the current value (current_location_option) and warns when the new one is anything but PRESENCE. Empty leaves it unchanged. | |
| bidding_strategy | No | MAXIMIZE_CONVERSIONS | TARGET_CPA | TARGET_ROAS | MAXIMIZE_CONVERSION_VALUE | TARGET_SPEND | MANUAL_CPC. Empty leaves the strategy unchanged. | |
| final_url_suffix | No | Parameters appended to the landing page URL. Omitted leaves it unchanged; "" removes it. | |
| keyword_match_type | No | Campaign-level broad match. BROAD turns it on and CONVERTS every existing phrase and exact keyword in the campaign to broad match (the originals show as Removed; turning it off does not restore them), and since September 2026 Google upgrades such campaigns to AI Max. Refused unless the campaign uses Smart Bidding (MAXIMIZE_CONVERSIONS, MAXIMIZE_CONVERSION_VALUE, TARGET_CPA, TARGET_ROAS), checked again at apply; needs a double confirmation. UNSPECIFIED turns it off: no further conversions, but converted keywords stay broad. Moving a campaign with broad match on to a non-Smart bidding_strategy is refused unless the same call passes UNSPECIFIED. The preview shows the current value. Empty leaves it unchanged. | |
| tracking_url_template | No | Campaign tracking template; must contain {lpurl} or a variant. Omitted leaves it unchanged; "" removes it. | |
| url_custom_parameters | No | List of {"key", "value"}; REPLACES the campaign's custom parameters. Keys alphanumeric, max 8 characters. Omitted leaves them unchanged; [] removes them. The preview shows each current value (current_tracking_url_template etc.), names any removal, and gives example_click: one of the campaign's final URLs with the campaign's options applied. It is approximate: a template on the ad group, ad or keyword overrides the campaign's. | |
| display_network_enabled | No | Enable Search campaign display expansion. Omitted leaves the setting unchanged. | |
| search_partners_enabled | No | Include ads on Search partners. Omitted leaves the setting unchanged. | |
| negative_location_option | No | PRESENCE | PRESENCE_OR_INTEREST. Who the location exclusions exclude; the preview shows the current value. PRESENCE excludes fewer people (only those physically there), so it widens reach and the preview warns. Empty leaves it unchanged. | |
| display_expansion_enabled | No | Alias for display_network_enabled; both must match when both are given. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||