---
name: select-campaign-objective
description: >-
  Picks the Meta campaign objective and ad-set optimization event before a dollar is spent: the objective
  locks the available optimization goals, billing events, and placements, and the optimization event is what
  delivery chases. Crosses three inputs - the business outcome (sales, leads, installs, reach), the
  conversion event you can feed ~50/week, and whether a pixel/CAPI signal exists yet - and maps them to one
  of six ODAX objectives (OUTCOME_SALES, OUTCOME_LEADS, OUTCOME_ENGAGEMENT, OUTCOME_TRAFFIC,
  OUTCOME_AWARENESS, OUTCOME_APP_PROMOTION) plus optimization_goal and billing_event. Reach for it at every
  new build, when an account optimizes for a proxy event (LINK_CLICKS, LANDING_PAGE_VIEWS) instead of
  revenue, or when the chosen event fires too rarely to exit learning. It ends at a chosen objective + event
  + budget floor - it does not build structure (design-account-structure), pick CBO vs ABO
  (choose-cbo-vs-abo), or set the bid strategy (select-bid-strategy).
---
# Select the Campaign Objective and Optimization Event

## Purpose
On Meta the objective is not a label, it is a hard gate. It decides which `optimization_goal` and
`billing_event` values the ad set may use, which placements and creative formats are eligible, and which
bid strategies appear. Underneath, the single most consequential choice is the **optimization event**:
Meta's auction delivers impressions to the people most likely to trigger that exact event, so optimizing
for a proxy (clicks, landing-page views) buys you proxies, not customers. This skill turns a business
goal into the objective + optimization event + billing event + minimum viable budget that every later
build step depends on.

## When to run
- Standing up any new campaign, before `mads_create_campaign`.
- An existing campaign optimizes for LINK_CLICKS or LANDING_PAGE_VIEWS when the real goal is purchases or
  leads, a classic "cheap clicks, no revenue" account.
- Delivery is stuck in learning or Learning Limited because the optimization event fires far below ~50/week.
- A new objective is being considered (e.g., moving from Traffic to Sales once the pixel has volume).

## When NOT to run
- The objective and optimization event are already correct and you need the campaign/ad-set skeleton →
  `design-account-structure`.
- You are deciding budget placement (campaign-level vs ad-set-level) → `choose-cbo-vs-abo`.
- You are choosing lowest-cost vs cost cap vs ROAS goal → `select-bid-strategy`.
- You are configuring the pixel/Conversions API that a Sales objective requires → `set-up-pixel-and-standard-events`, `implement-conversions-api`.

## Prerequisites
- The business outcome stated as a measurable event (purchase, qualified lead, app install, reach/frequency
  target), and the target cost per that event.
- For any conversion objective (Sales/Leads optimized off-site): a working pixel and ideally Conversions API
  already firing the target event, verified in Events Manager. Without signal, optimizing for OFFSITE_CONVERSIONS
  cannot work, Meta has nothing to chase. (HUMAN STEP if tracking is not yet live.)
- A realistic weekly conversion volume estimate for the target event, to check it against the ~50/week
  learning threshold.

## Procedure
1. **State the outcome as one event.** Write the single event that equals success: `Purchase`, `Lead`,
   `CompleteRegistration`, `AppInstall`, or a reach/awareness target. Everything downstream optimizes to it.
2. **Confirm the signal exists for that event.** Call `mads_list_pixels` and check Events Manager (HUMAN STEP)
   that the event fires with volume. IF the target event has no signal yet, THEN either instrument it first
   (`set-up-pixel-and-standard-events`) or start one rung up the funnel (Traffic/Engagement) and graduate
   later, do not optimize for a conversion Meta cannot see.
3. **Map outcome → objective.** Use Decision rules to pick exactly one of the six ODAX objectives. The 11
   legacy objectives are gone; do not reference them.
4. **Pick the optimization event = closest-to-revenue event you can feed ~50/week.** This is the crux.
   Prefer the deepest event that clears the volume bar: Purchase > AddToCart > LandingPageView > LinkClick.
   IF Purchases run below ~50/week per ad set, THEN optimize one step shallower (e.g., AddToCart or a
   value-dense custom event) until volume supports moving deeper, or consolidate ad sets so the event
   pools (see `manage-the-learning-phase`).
5. **Choose the billing event.** Default `billing_event=IMPRESSIONS` for essentially all conversion and
   most objectives, it gives delivery the most freedom. Reserve LINK_CLICKS/THRUPLAY billing for the
   narrow cases the objective allows and the goal genuinely warrants.
6. **Set the minimum viable budget from the event's cost.** Budget floor ≈ target cost-per-event × ~50 ÷ 7,
   as a daily number, so the ad set can plausibly hit ~50 events in a week. If the floor is unaffordable at
   the deep event, that is the signal to optimize shallower (step 4). Meta money is in the currency's MINOR
   unit, a $50.00 daily budget is `daily_budget=5000`. Hand the number to `set-minimum-viable-budget`.
7. **Record the decision.** Objective, optimization_goal, billing_event, target cost, expected weekly volume,
   and budget floor, these are the inputs the structure, budget, and bid skills consume. Do not call
   `mads_create_campaign` here; this skill produces the decision, the build skills execute it.

## Decision rules
- **Sales / e-commerce / any off-site purchase or value goal →** `OUTCOME_SALES`, optimization_goal
  `OFFSITE_CONVERSIONS` (or `VALUE` for value optimization once you have ~50+ purchases/week and value
  variance). Requires pixel + CAPI on Purchase.
- **Lead generation →** `OUTCOME_LEADS`. Optimize `OFFSITE_CONVERSIONS` for site/CRM leads, `LEAD_GENERATION`
  for instant forms, or `QUALITY_LEAD` when a CAPI qualified-lead signal exists. Instant forms trade volume
  for lower intent; site leads trade volume for higher intent, pick per the sales team's tolerance.
- **Post/page/video engagement, messaging, or event responses →** `OUTCOME_ENGAGEMENT` (optimization_goal per
  sub-goal: THRUPLAY for video, CONVERSATIONS for messaging, POST_ENGAGEMENT, etc.).
- **Cheap qualified traffic to a destination →** `OUTCOME_TRAFFIC`, optimize `LANDING_PAGE_VIEWS` (not
  LINK_CLICKS, LPV filters out bounces and is the honest traffic proxy).
- **Reach/awareness/brand lift →** `OUTCOME_AWARENESS` (REACH or AD_RECALL_LIFT, with a frequency cap).
- **App installs / in-app events →** `OUTCOME_APP_PROMOTION` (APP_INSTALLS, or an in-app event via SDK/CAPI).
- **Volume gate:** the optimization event must plausibly fire ~50×/ad set/7 days. Below that, optimize
  shallower or consolidate, a deep event you can't feed is worse than a shallow event you can.
- **Signal gate:** never set OFFSITE_CONVERSIONS on an event with no pixel/CAPI history. No signal → start at
  Traffic/Engagement, instrument, then graduate to Sales/Leads.
- **Done means:** one objective, one optimization event that clears the volume + signal gates, a billing
  event, and a daily budget floor in minor currency units, all written down.

## Common failure modes
- **Optimizing for clicks and wondering where the revenue is.** Cheap LINK_CLICKS almost never map to
  purchases; optimize for the deepest event you can feed.
- **Choosing Sales with a dead pixel.** OFFSITE_CONVERSIONS with no signal spends into a void and never
  exits learning. Fix tracking first.
- **Too many ad sets splitting a scarce event** so none reaches ~50/week, every one goes Learning Limited.
  Consolidate before going deeper.
- **VALUE optimization on thin data.** Value optimization needs purchase volume AND value variance; on a
  single-price product or low volume it underperforms plain conversion optimization.
- **Referencing legacy objectives** (Conversions, Traffic-old, Reach-old as separate types). Only the six
  ODAX outcomes exist, build to them.
- **Budget below the learning floor,** guaranteeing Learning Limited from day one. Size the floor to the
  event cost (step 6).

## Related skills
- Run after: `design-account-structure` (turn the objective into a campaign/ad-set map),
  `choose-cbo-vs-abo` (where the budget lives), `select-bid-strategy` (how it bids),
  `set-minimum-viable-budget` (size the floor precisely).
- Run before if signal is missing: `set-up-pixel-and-standard-events`, `implement-conversions-api`.
- Related: `manage-the-learning-phase` (why the ~50/week event choice matters).
