---
name: choose-cbo-vs-abo
description: >-
  Decides where budget control lives for a campaign: Advantage Campaign Budget (CBO), set once at
  the campaign level and redistributed by Meta across ad sets toward whichever is delivering the
  lowest cost per result, versus ad-set budgets (ABO), fixed per ad set for guaranteed spend and a
  clean read on each cell. Crosses campaign intent (scaling a proven audience vs. testing distinct
  creative or audience cells), ad-set count, and whether any cell must not be starved, and outputs
  daily vs. lifetime budget plus a minor-unit figure per node (a $50.00 daily budget is
  daily_budget=5000). Reach for it right after the campaign/ad-set map exists and before any
  create call, or when a live CBO campaign is visibly starving a cell. It ends at a budget-
  placement decision, it does not size the budget in absolute terms (set-minimum-viable-budget)
  or raise it later (scale-budget-vertically).
---
# Choose Advantage Campaign Budget (CBO) vs Ad-Set Budgets (ABO)

## Purpose
CBO and ABO are two different philosophies for the same dollar. Advantage Campaign Budget hands Meta's
delivery system one campaign-level pool and lets it shift spend toward whichever ad set is currently
cheapest, good once the ad sets are proven and the goal is efficiency at scale. Ad-set budgets fix spend
per cell regardless of relative performance, good when a test needs a clean, comparable read, or a
specific cell (a small warm audience, a contractual geo) must not be starved by the auction's opinion of
where the cheap results are. Getting this wrong either produces noisy CBO allocation with nothing proven
yet, or manual ABO guesswork that reallocates slower than Meta would.

## When to run
- Immediately after `design-account-structure` produces the campaign/ad-set map, before any create call.
- A live CBO campaign shows one or more ad sets receiving near-zero spend that should be getting traffic.
- Setting up an A/B or creative test that needs guaranteed, comparable spend per cell.
- Moving a campaign from a testing phase (ABO) into a scaling phase (CBO) once winners are known.

## When NOT to run
- Structure or audiences are not yet mapped → `design-account-structure` first.
- Objective or optimization event is not yet chosen → `select-campaign-objective`.
- The question is how big the budget should be, not where it sits → `set-minimum-viable-budget`.
- The placement is already decided and the question is raising it → `scale-budget-vertically` or
  `scale-horizontally-with-duplication`.

## Prerequisites
- Campaign/ad-set map from `design-account-structure`.
- Per-ad-set expected event volume (~50/week target) from `select-campaign-objective`.
- Ad-set count and relative maturity (new cells vs. proven cells) for the campaign in question.
- Account currency confirmed via `mads_get_ad_account`, since money is set in the currency's minor unit.

## Procedure
1. **Classify the campaign's intent.** Scaling a proven set of audiences with known winners leans CBO;
   testing distinct audiences or creatives that need individually readable results leans ABO.
2. **Check every ad set can still clear ~50 events/week under the chosen mode.** CBO does not exempt any
   ad set from the learning-event threshold, it only decides who gets the marginal dollar. IF an ad set
   would predictably get starved below ~50/week under CBO, THEN set a per-ad-set minimum spend limit or
   move that cell to its own ABO budget.
3. **Set spend limits as a safety rail, not the primary control.** Under CBO, minimum and maximum spend
   limits protect a must-serve cell or cap a runaway one; using limits to micromanage every cell defeats
   the point of choosing CBO in the first place.
4. **Choose daily vs. lifetime.** Daily budget for ongoing always-on delivery; lifetime budget only for a
   campaign with a fixed end date, since Meta paces spend across the whole schedule and that complicates
   mid-flight changes. Default to daily unless the campaign is genuinely date-bound.
5. **Convert to minor units before any write.** Confirm the account currency (`mads_get_ad_account`), not
   every currency uses two decimal places, then compute the figure: a $50.00 daily budget is
   `daily_budget=5000`.
6. **Preview, get sign-off, record the decision.** HUMAN STEP: show the account owner which control is
   being set (campaign-level `daily_budget`/`lifetime_budget` for CBO, or ad-set-level for ABO), the
   minor-unit number, and the reasoning, and get explicit approval before any `mads_create_campaign` /
   `mads_create_adset` / `mads_update_campaign` / `mads_update_adset` call. Hand the sized number to
   `set-minimum-viable-budget` if it still needs validating.

## Decision rules
- **Proven audiences, want Meta to chase efficiency →** CBO at the campaign level.
- **Testing creative or audience variants and need a clean per-cell read →** ABO, one fixed budget per
  ad set, so spend differences don't confound the test.
- **A must-serve cell that CBO would likely starve →** ABO for that cell, or a CBO minimum spend limit.
- **Ad-set count ≥ 5-6 with uneven historical performance →** CBO generally outperforms manual ABO
  allocation, since Meta reallocates faster than a human reviewing reports can.
- **Every ad set must clear ~50 events/week individually, CBO or ABO**, CBO redistributes budget, not
  the event-volume requirement itself.
- **IF the campaign has a fixed end date, THEN** lifetime budget is appropriate; otherwise daily.
- **Done means:** CBO or ABO chosen per campaign (and per cell where mixed), spend limits set on any cell
  that needs protection, the budget expressed in minor units, and the decision recorded before any create
  call.

## Common failure modes
- **CBO on a brand-new campaign with no proven winners.** Meta has nothing to judge yet, so early CBO
  allocation is noisy, prove cells under ABO first, then switch to CBO once winners emerge.
- **Assuming CBO exempts ad sets from the learning-event floor.** It doesn't; a starved ad set under CBO
  is still Learning Limited.
- **Mixing budget levels inconsistently**, some ad sets manually funded while CBO is also active, with
  no spend limits set, produces unpredictable allocation.
- **Forgetting the minor-unit conversion**, entering 50 instead of 5000 and setting a budget 100x too
  small.
- **Defaulting to lifetime budget out of habit**, then being unable to cleanly scale mid-flight without
  recalculating the whole schedule.

## Related skills
- Run after: `design-account-structure` (needs the map first), `select-campaign-objective`.
- Run before: `set-minimum-viable-budget` (sizes the number this skill placed).
- Related: `scale-budget-vertically` (raises the number later), `consolidate-fragmented-account` (often
  re-decides CBO vs. ABO while merging).
