ads_update_batch
Change multiple Google Ads keyword bids or campaign budgets in one call, with dry-run validation and safeguards that refuse unmatched entries or excessive total spend.
Instructions
Change several Google Ads keyword bids, or several campaign daily budgets, in one call. It is a named list of pairs, not a rule applied to many things: each entry names one target and the value it should end at, and an entry that matches no row or more than one refuses the whole batch before anything is written. The sum is guarded as well as each entry, because separately reasonable raises are one large spend change together. Dry run unless dryRun is false, and every value is read back afterwards
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | One kind per call. A summed guard is only honest inside one kind: bids and budgets sum to dollars, statuses do not, and mixing them makes the total unreadable | |
| dryRun | No | Resolve and price every entry and report the total, without changing anything | |
| changes | Yes | A named list of pairs, each with its own value. There is no selector form: enumeration cannot make the mistake that a pattern can | |
| confirm | No | Perform the batch even though a guard tripped. The dry run lists every reason, so this confirms something already read |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| notes | Yes | ||
| applied | Yes | ||
| entries | Yes | ||
| customerId | Yes | ||
| totalAfter | Yes | ||
| totalBefore | Yes | Null when any entry has no current value to read, because a total that counts unknowns as zero is not a total | |
| totalGuards | Yes | Guards on the batch as a whole. Five individually reasonable raises are one large spend change, and doing them one at a time is how that gets missed | |
| totalSummary | Yes | The batch total in words, always present whether or not anything tripped. The sentence is what gets read; the guard is only what stops you when it is not |