Propose an account change
propose_changePrepares one change to a running ad account as a proposal the owner approves in Taseli: pause or resume a campaign (or a Meta ad set, a Google ad group), a new daily budget, a target (Google target CPA or ROAS, a Meta or TikTok cost cap or bid cap, a Meta ROAS floor; a proposal from outside moves it at most 15% from the current one), or blocked searches (Google Search negatives, for one campaign or every running search campaign). Nothing changes in the account here, and it never runs by itself: the owner approves it in Taseli, which then runs it, reads it back and watches it 7 days. The reason goes in why, and the owner reads it on the card. A proposal from outside follows Taseli's rules and may be held (declined lately, a campaign still learning, the owner's rules); owner_asked with the owner's words in quote records that the owner asked for exactly this. restructure (Meta and TikTok): Taseli's structure check builds the change from the account's numbers (which ad sets or ad groups merge, which ads move, what budget; total spend stays the same) and says why when none is due. Not for new campaigns or for new creatives in running campaigns. The same change again returns the same proposal.
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": {
"change": "<change>",
"why": "<why>"
},
"name": "propose_change"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| fix | No | restructure: merge like ad sets / ad groups into one (Google: thin ad groups of one theme, or duplicate keywords kept once), a closer goal (Meta / TikTok: checkout or add to cart instead of a rare purchase), one campaign budget (Meta), own_goal (Google: a campaign counts only the real results), or brand (Google: Performance Max kept off brand searches). Leave out for the most valuable one. | |
| why | Yes | One short line the owner reads on the card, in the conversation's language: why this change, from this account's facts. | |
| quote | No | With owner_asked: the owner's own words, as written. | |
| terms | No | block_searches: the search words to block (phrase match). | |
| change | Yes | ||
| account | No | An ad account's name or id; needed when the business has more than one. | |
| campaign | No | The campaign (or ad set / ad group) name exactly as Taseli shows it, or its id. For block_searches, omit for every running search campaign. | |
| language | No | Answer language. The business's language by default. | |
| owner_asked | No | true only when the owner asked for exactly this change in this conversation. | |
| target_kind | No | target: cpa = target cost per result (Google) or cost cap (Meta, TikTok); roas = target return (Google) or ROAS floor (Meta); bid_cap = Meta bid cap or TikTok bid. | |
| daily_budget | No | budget: the new daily budget, in the account's currency. | |
| target_value | No | target: the new value. Money in the account's currency; roas as a ratio (3.5 = 350%). | |
| budget_change_pct | No | budget, instead of daily_budget: a percent step from the current daily budget, e.g. 15 or -20; Taseli reads the live budget and works out the amount. | |
| target_change_pct | No | target, instead of target_value: a percent step from the current target, e.g. 10 or -10; Taseli reads the current one. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | not_found, ambiguous, read_only, role, invalid, declined_lately, skipped or failed. | |
| detail | No | ||
| status | No | waiting: on the owner's approval screen. | |
| account | No | ||
| candidates | No | ||
| proposalId | No | ||
| approvalUrl | No |