Prepare a change to a campaign
prepare_campaign_changePrepare a change to an existing campaign as a proposal in the Loop inbox (needs a propose key): set a Google Ads search campaign's languages, replace a running search ad's wording and landing page, change a daily budget by more than the per-change limit (the daily cap still applies), give a campaign a total cap that Loop pauses it at, set a max CPC you choose (campaign or ad group; above the workspace max CPC only with overrideWorkspaceCap), move the same daily amount from one campaign to another (total unchanged; both or neither), add an ad group (keywords and one responsive search ad) to a running Google Ads search campaign within its current budget, move a Google Ads or Apple Ads campaign's end date (optionally raising the total cap Loop watches so it does not pause before the new end), or keep only chosen keywords in an Apple Ads campaign and pause the rest. Nothing is sent to the ad platform; a person approves it in Loop.
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": {
"kind": "<kind>",
"campaignId": "<campaignId>"
},
"name": "prepare_campaign_change"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cap | No | total_cap: the total in the campaign's currency. | |
| keep | No | keep_keywords: the keyword texts to keep enabled; the campaign's other enabled keywords are paused. | |
| kind | Yes | ||
| adRef | No | replace_search_ad: the ad to replace (customers/…/adGroupAds/…). | |
| since | No | total_cap: YYYY-MM-DD to count spend from (default today). | |
| amount | No | budget_transfer: the daily amount to move. | |
| family | No | replace_search_ad / add_ad_group: the workspace campaign family for utm_campaign. | |
| maxCpc | No | max_cpc: the new max CPC in the account's currency. add_ad_group: the new ad group's max CPC (manual CPC campaigns only). | |
| endDate | No | end_date: the new last day (YYYY-MM-DD) in the ad account's time zone. | |
| landing | No | replace_search_ad / add_ad_group: landing page without utm_*; UTM is added by Loop. | |
| fundedBy | No | budget_move: id of the campaign whose budget this uses (recorded only). | |
| keywords | No | add_ad_group: the new ad group's keywords. | |
| headlines | No | ||
| languages | No | languages: codes such as vi, ja; empty = all languages. | |
| campaignId | Yes | The campaign id from list_campaigns (budget_transfer: the campaign that receives). | |
| adGroupName | No | max_cpc: an ad group of a manual CPC campaign (omit for the campaign max CPC). add_ad_group: the new ad group's name. | |
| dailyBudget | No | budget_move: the new daily budget in the campaign's currency. | |
| utmCampaign | No | replace_search_ad / add_ad_group: utm_campaign for this campaign ({adgroup} allowed). | |
| descriptions | No | ||
| raiseTotalCap | No | end_date: if Loop watches a total cap on this campaign, raise it by the added days × daily budget. | |
| fromCampaignId | No | budget_transfer: the campaign that gives the budget. | |
| overrideWorkspaceCap | No | max_cpc: allow a value above the workspace max CPC. |