Create the campaign resource via POST /v5/campaigns with is_campaign_budget_optimization set to true and a daily or lifetime budget set at the campaign level.
Do not set budgets on individual ad groups when CBO is enabled; CBO automatically distributes the campaign budget across ad groups to maximize the campaign objective, and ad group budgets override this behavior.
Create at least one ad group under the campaign, specifying bid_strategy_type and targeting criteria; with CBO active, set a minimum daily spend threshold per ad group if you want to protect specific ad group delivery.
Add at least 10 ads per ad group to give the CBO algorithm sufficient creative variation to identify top performers.
Set the campaign's objective_type (e.g., CONVERSION or CATALOG_SALES) before enabling CBO; the algorithm optimizes toward the objective, so mismatched objectives and bid strategies will underperform.
Monitor campaign performance via the analytics endpoint and compare ad group spend distribution to identify if the algorithm is over-concentrating on one ad group, which may warrant manual budget floors.
Known gotchas
Setting a budget on an ad group when CBO is enabled at the campaign level overrides CBO for that ad group and prevents budget from flowing freely; remove ad group budgets or set only minimum spend thresholds if CBO control is desired.
CBO requires a daily budget of at least 5x your target cost-per-result to give the algorithm enough room to optimize; a budget too close to the target CPA will result in under-delivery.
CBO is not reversible once set on a campaign via the API; if you need manual budget control per ad group, create a new campaign with is_campaign_budget_optimization set to false.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp