---
title: "Budget & Bid Recipes: CBO vs ABO, Bid Strategy, and Learning-Phase-Aware Sizing"
type: synthesis
tags: [budgets-bidding, cbo, abo, bid-strategy, learning-phase, pacing, decision-guide]
created: 2026-06-11
updated: 2026-06-11
confidence: high
sources: [
  "raw/web_community-budgets.md",
  "raw/web_community-bidding-overview.md",
  "raw/web_community-advantage-campaign-budget.md",
  "raw/web_community-pacing-and-scheduling.md",
  "raw/web_community-graph-api-reference-v25-0-ad-campaign-learning-stage-info-do.md",
  "raw/web_community-cbo-facebook-ads-2026-complete-guide-to-budget-optimization.md",
  "raw/web_community-cbo-now-advantage-campaign-budget-or-abo.md",
  "raw/web_community-about-the-facebook-ads-learning-phase-2025-update.md",
  "raw/web_community-how-to-exit-the-facebook-ads-learning-phase-quicker-social-m.md"
]
---

# Budget & Bid Recipes

Decision guide for the three money levers in Meta Ads: **where the budget lives** (campaign vs ad set), **how bids are constrained** (bid strategy), and **how spend is released over time** (pacing). Official Marketing API semantics are stated first (high confidence); practitioner heuristics are tiered below them (medium confidence, attributed). Background: [[concepts/budgets-bidding]], [[concepts/campaign-structure]].

## Comparison

### CBO (Advantage campaign budget) vs ABO (ad set budgets) — official semantics

| Dimension | CBO / Advantage campaign budget | ABO (ad set budgets) |
|---|---|---|
| Budget fields | `daily_budget` / `lifetime_budget` **on the campaign** | `daily_budget` / `lifetime_budget` **per ad set** (amounts in the account currency's minimum denomination, e.g. cents) |
| Allocation | Meta "automatically and continuously finds the best available opportunities for results across your ad sets and distributes your campaign budget in real time" (official) | You fix spend per ad set; disable CBO via `adset_budgets=[{"adset_id":..., "daily_budget":...}]` |
| Bid strategy | Defined **at the campaign level**, shared by all ad sets: `LOWEST_COST_WITHOUT_CAP`, `COST_CAP`, `LOWEST_COST_WITH_BID_CAP`, `LOWEST_COST_WITH_MIN_ROAS` | Per ad set via `bid_strategy` / `bid_amount` |
| Ad-set guardrails under CBO | `daily_min_spend_target`, `daily_spend_cap`, `lifetime_min_spend_target`, `lifetime_spend_cap` (best effort, not guaranteed; remove by setting `0` or empty) | n/a (budget itself is the control) |
| Pacing | Budget pacing at the **campaign** level; `pacing_type` set at campaign level | Budget pacing at the **ad set** level |
| Hard limits | All optimization goals must match across ad sets under auto bid; optimization goals not editable after the campaign runs; `LOWEST_COST_WITH_MIN_ROAS` cannot be switched to another strategy after creation; campaigns with **more than 70 ad sets** cannot edit bid strategy or turn CBO off | — |

### Bid strategy by margin-control need — official semantics

| You need | Strategy (verbatim enum) | Mechanics | Pair with |
|---|---|---|---|
| Maximum volume, no cost control | `LOWEST_COST_WITHOUT_CAP` | Auto-bid; Meta raises your effective bid as needed to spend the budget. Default. With `optimization_goal=VALUE`, Ads Manager displays this as **Highest Value** | Nothing extra |
| Average CPA held near a target | `COST_CAP` | "Get the most results possible while we strive to meet the cost per action you set." Requires `bid_amount` (the cap). **Adherence to cost cap limits is not guaranteed** (official) | `bid_amount` |
| Hard ceiling on the auction bid itself | `LOWEST_COST_WITH_BID_CAP` | Maximum bid across auctions; requires `bid_amount` (per ad set via `adset_bid_amounts` under CBO) | `bid_amount` |
| ROAS floor (margin protection on value) | `LOWEST_COST_WITH_MIN_ROAS` | Requires `bid_constraints={"roas_average_floor": N}`; valid range of `roas_average_floor` is **[100, 10000000]**, i.e. minimum ROAS 0.01–1000.0 (so `10000` = 1.0x). `optimization_goal` must be `VALUE`; cannot use `bid_amount` with `bid_constraints` | `bid_constraints` |

Bid setup guidance (official Bidding Overview): "Bid your true value" — bid the maximum you're willing to pay per optimization event; actual cost per result is usually at or below `bid_amount`. `billing_event` (what you pay for, e.g. `IMPRESSIONS`) is independent of `optimization_goal` (who delivery seeks).

### Budget types and pacing — official semantics

- `daily_budget`: average per day; on high-opportunity days **up to 25% more than your daily budget may be spent** (e.g. $10 → up to $12.50), averaged out over the week.
- `lifetime_budget`: total over the run; spend is uneven by design ($250 over 5 days might pace $50/$50/$75/$25/$50).
- `pacing_type` options (campaign level under CBO, else ad set): **`standard`** (default — bid adjusted through the day for smooth delivery), **`no_pacing`** (accelerated delivery — full max bid in every eligible auction; budget can exhaust early; only sensible for flash sales, live events, key seasonal pushes; pointless if you're already under-delivering from low bid/narrow audience), **`day_parting`** (ad scheduling via `adset_schedule`; **lifetime budgets only**; schedule applies in the *audience's* timezone, hours on the hour, ≥1h blocks).
- Partial days: an ad set starting at 6 PM tries to deliver only ~25% of its daily budget before midnight.
- Official FAQ on changes: every budget/bid change forces the system to re-learn the optimal bid — "you should not change bid and budget frequently"; if you must, **limit to 2–3 times a day, early in the day**.

### Learning phase — official + community

- Official (Graph API `learning_stage_info` on ad sets): `status` is `LEARNING`, `SUCCESS`, or `FAIL` ("isn't generating enough results to exit"); `conversions` counts events **since the last significant edit** (resets to learning on significant edits); `last_sig_edit_ts` records that edit. Only returned for active ad sets.
- Community consensus threshold (medium, Lebesgue + Social Media Examiner): **~50 optimization events per ad set within 7 days** to exit; short of that, the delivery column shows **Learning Limited**.

## Analysis

- **CBO and ABO answer different questions.** CBO maximizes campaign-level results given freedom to move money; ABO buys you per-segment control and clean tests at the cost of liquidity. The official docs are mechanism-only; the *when* comes from practitioners: CBO for scaling proven structures and saving management time, ABO for testing audiences/creatives/regions and for strict per-market budgets (Cropink, Lebesgue — medium). Lebesgue's dataset even shows ABO out-performing CBO on prospecting ROAS (94% vs 81%, medium, single vendor) — see [[summaries/community-field-notes]].
- **Margin control is a ladder, not a binary.** No cap → cost cap (average CPA) → bid cap (per-auction ceiling) → min ROAS (value floor). Each rung trades delivery volume for predictability; cost caps are explicitly best-effort. Min ROAS is the only one that operates on *value* rather than *cost*, and it locks you in (no strategy switch after creation).
- **The learning phase is a budget-math problem.** If budget ÷ cost-per-result × 7 < 50, the ad set mathematically cannot exit learning. Every guardrail above (20% budget-change rule-of-thumb, few ad sets, no mid-flight edits) is downstream of that arithmetic (community, medium — the 50/7 numbers do not appear in the ingested official API docs; the API only exposes thresholds via `dynamic_lp_conversions_threshold` / `dynamic_lp_days_threshold`).
- **Pacing interacts with everything**: budget changes trigger bid re-learning; switching `billing_event` re-adjusts pacing; under CBO the pacing and the budget both live at the campaign level, so per-ad-set spend visibility drops (Lebesgue's stated reason to prefer ABO for insight).

## Recommendations

**Recipe 1 — Testing (audiences/creatives/markets):** ABO. 3–5 ad sets, one variable each, equal budgets, broad audiences unless testing the audience itself. Don't touch anything for 3–5 days. (Community, medium.)

**Recipe 2 — Scaling a proven structure:** CBO (`LOWEST_COST_WITHOUT_CAP`), 3–5 ad sets, varied creative formats per ad set, `daily_min_spend_target` floors on cold/niche ad sets so warm audiences don't starve them. Scale +10–20% every 2–3 days; for bigger jumps, duplicate the campaign and re-enter learning deliberately. Judge at campaign level only. (Official mechanics + community cadence.)

**Recipe 3 — Margin-protected e-commerce:** Sales campaign, `optimization_goal=VALUE`, `bid_strategy=LOWEST_COST_WITH_MIN_ROAS`, `bid_constraints={"roas_average_floor": <100×your minimum ROAS>}`. Remember: locked after creation; only `PURCHASE` events for value optimization under Advantage+ shopping ([[syntheses/objective-picker]], [[concepts/advantage-plus-campaigns]]).

**Recipe 4 — Learning-phase-aware budget sizing:** daily budget per ad set = **cost-per-result × 50 ÷ 7** (e.g. $10 CPA → $72/day; two ad sets under CBO → $144/day campaign budget). If you can't fund that, cut ad sets (consolidate audiences) rather than switching to a cheaper optimization event — optimizing for add-to-cart to exit learning buys you cart-adders, not buyers. Avoid resets: keep budget changes ≤20% per ~72h, never edit audiences in place (duplicate instead), and bulk-create spare ads at launch (paused) so you can rotate without adding new ads. (Community, medium; reset mechanics corroborated by official `last_sig_edit_ts` semantics.)

**Recipe 5 — Time-boxed promos:** lifetime budget + `day_parting` schedule (audience timezone), or `no_pacing` for genuine flash sales — accepting that budget may exhaust before day's end. (Official.)

**Anti-patterns:** >70 ad sets under CBO (locks your bid strategy); frequent intra-day bid/budget edits; judging CBO ad sets individually; overlapping audiences competing in the auction; tiny daily budgets on Purchase optimization. See also [[concepts/attribution-reporting]] before concluding a budget change "hurt performance" — measurement changes can masquerade as delivery changes ([[summaries/community-field-notes]]).

## Pages Compared

- [[concepts/budgets-bidding]] — core concept page
- [[concepts/campaign-structure]] — campaign/ad set/ad hierarchy these levers attach to
- [[concepts/advantage-plus-campaigns]] — CBO is mandatory plumbing in Advantage+ setups
- [[concepts/audiences]] — audience size ↔ budget interaction
- [[summaries/community-field-notes]] — the practitioner claims tiered here
- [[syntheses/objective-picker]] — objective choice upstream of bid strategy
- [[entities/marketing-api]] — field-level reference for everything verbatim above
