---
name: set-up-value-optimization
description: >-
  Switches an ad set's optimization_goal to VALUE so the auction chases purchase value, not count, and pairs
  it with LOWEST_COST_WITH_MIN_ROAS once a real ROAS target exists. Front-loads verification: Purchase must
  reliably send value and currency through both pixel and Conversions API, the ad set needs ~50+ purchases
  per week (the same volume floor as any goal), and the catalog needs real price variance - a single-price
  product gives value optimization nothing to differentiate and degenerates into volume bidding. Accurate
  purchase value also feeds value-based lookalike and custom audiences downstream. Reach for it once
  bid-strategy selection points at value/ROAS, or when an ecommerce account with real price spread still
  optimizes for conversion count. It ends at value optimization running with the value signal verified
  accurate - pixel/CAPI instrumentation belongs to set-up-pixel-and-standard-events, and the ROAS number to
  calibrate-cost-cap-and-roas-goals.
---
# Set Up Value Optimization and Value-Based Bidding

## Purpose
Value optimization lets Meta's auction chase a $200 order as hard as it chases a $20 one, but only if
the value it sees is real, varied, and arriving reliably. This skill verifies the value signal before
trusting it, switches `optimization_goal` from a count goal to `VALUE`, pairs it with a ROAS goal once
one exists, and states plainly the conditions under which value optimization is worse than simply
optimizing for count.

## When to run
- `select-bid-strategy` or the objective decision points toward `LOWEST_COST_WITH_MIN_ROAS` / value-based
  bidding.
- An ecommerce account is optimizing Purchase count and has a catalog with real price variance, a
  candidate to move to value.
- Value optimization is already live but delivery or ROAS looks wrong and the value signal itself is
  suspect.
- Building value-based lookalike audiences and the seed needs to be genuine purchase value, not a proxy.

## When NOT to run
- The catalog is single-price or near-uniform → value optimization has nothing to differentiate on; stay
  on standard conversion-count optimization.
- Purchase volume is well under ~50/week → build volume on count-based optimization first
  (`select-campaign-objective`), and revisit once volume supports it.
- The pixel/CAPI Purchase event isn't confirmed sending value and currency → `set-up-pixel-and-standard-events`
  first; this skill verifies the signal, it doesn't instrument it.
- The ROAS multiplier itself needs calibrating against margin → `calibrate-cost-cap-and-roas-goals`, after
  value optimization is confirmed live and accurate.

## Prerequisites
- Purchase (or equivalent) standard event firing via pixel and Conversions API, both sending `value` and
  `currency`, verified in Events Manager.
- ~50+ purchases/week at the ad set (or pooled campaign) level, the same volume floor value optimization
  needs to exit learning like any other goal.
- A catalog with genuine price or value spread, not every order landing at the same amount.
- A `bid_strategy` decision in hand from `select-bid-strategy` (`VALUE` pairs with
  `LOWEST_COST_WITH_MIN_ROAS`).

## Procedure
1. **Confirm the value signal exists and is trustworthy.** Check `mads_list_pixels` and Events Manager
   (HUMAN STEP) that Purchase carries `value` and `currency` on both pixel and CAPI, and that recent
   events show real variance, not every purchase logging the same flat number, a sign of a hardcoded
   placeholder rather than the true order total.
2. **Pull purchase volume.** `mads_run_insights` over the last 2-4 weeks: purchases/week per ad
   set, or pooled across the campaign. Under ~50/week means stop here, stay on count-based optimization
   and revisit once volume grows, or consolidate ad sets to pool it (`manage-the-learning-phase`).
3. **Confirm value variance.** From the same report, check the value-per-purchase distribution. If every
   order clusters at, or near, one price point, value optimization has nothing to optimize against and
   will underperform the simplicity of standard count optimization, stop and stay on count-based
   bidding.
4. **HUMAN STEP.** Spot-check 10-20 recent Purchase events' logged value against actual order totals in
   the order management system. Meaningful divergence means the value pass-through is broken, fix
   tracking (`set-up-pixel-and-standard-events`) before optimizing anything against it.
5. **Switch `optimization_goal` to `VALUE`.** On the ad set, set it via `mads_update_adset` (new ad set:
   include it in `mads_create_adset`, `status=PAUSED` until reviewed). This is a goal change, treat it
   as a learning-reset event.
6. **Pair with `LOWEST_COST_WITH_MIN_ROAS` once a target exists.** Set `bid_strategy=LOWEST_COST_WITH_MIN_ROAS`
   with the ROAS multiplier from `calibrate-cost-cap-and-roas-goals` (start near the trailing average ROAS
   achieved under lowest-cost bidding, expressed as whatever unit the tool expects, confirm before
   writing, e.g. 2.0 = 200%). `VALUE` with no cap is legal and correct while still gathering a value
   distribution; add `MIN_ROAS` once a real target exists.
7. **Preview, diff, approve, commit.** Entity, fields (`optimization_goal`, `bid_strategy`, ROAS goal if
   set), from → to, expected impact, relearning, and that early ROAS numbers will be volatile.
   **HUMAN STEP.** Get explicit approval before committing. Commit via `mads_update_adset`.
8. **Confirm value keeps flowing post-launch.** For the following 1-2 weeks, `mads_run_insights`:
   purchases still logging value and currency, ROAS readable, no sudden drop to zero-value events, a
   silent tracking break looks like a ROAS collapse but is actually a data problem.
9. **Hand downstream once stable.** Confirmed-accurate purchase value also feeds value-based lookalike or
   custom audiences once the ad set has run clean for a full cycle, note it as available; building the
   audience itself is out of scope here.

## Decision rules
- IF Purchase value/currency isn't confirmed reliable on both pixel and CAPI THEN do not switch to
  `VALUE`, fix tracking first (`set-up-pixel-and-standard-events`).
- IF purchases run below ~50/week THEN stay on count-based optimization, value optimization needs at
  least the same volume floor as any other goal, plus enough spend to learn a value distribution.
- IF the catalog is single-price or values don't meaningfully vary THEN value optimization degenerates
  into volume optimization with extra complexity, skip it, optimize for count instead.
- IF value optimization is chosen AND a real ROAS target exists THEN pair with
  `LOWEST_COST_WITH_MIN_ROAS`; IF the target isn't known yet THEN run `VALUE` uncapped
  (`LOWEST_COST_WITHOUT_CAP`) to gather a value distribution first.
- IF ROAS readings suddenly collapse toward zero after a period of normal delivery THEN suspect a
  tracking break before a targeting or creative problem, verify value is still passing before touching
  bid strategy.
- IF switching an existing count-optimized ad set to `VALUE` THEN treat it exactly like a bid-strategy
  change, plan for a learning reset, time it, and batch it with other pending edits
  (`manage-the-learning-phase`).
- **Done means:** `optimization_goal=VALUE` is live on ad sets that clear the volume and variance gates,
  value is verified accurate against backend truth, and a ROAS goal is either set from real data or
  deliberately deferred while value-max gathers a distribution.

## Common failure modes
- **Turning on `VALUE` with a broken value feed.** A flat or hardcoded value per Purchase event gives the
  auction nothing real to differentiate on, it optimizes against noise while looking like it's working.
- **Value optimization on a single-price product.** No variance means no signal; the extra complexity
  buys nothing over standard conversion optimization.
- **Switching to `VALUE` below the ~50/week floor.** Same learning-phase math as any other goal, thin
  volume plus a harder optimization problem is a worse combination, not a better one.
- **Setting an aggressive `MIN_ROAS` on day one of value optimization.** Two unproven things at once (the
  goal and the cap) makes it impossible to tell which one is causing under-delivery.
- **Never spot-checking value against backend truth.** A tracking bug that inflates or deflates value
  quietly steers the entire budget toward the wrong customers.

## Related skills
- Before: `set-up-pixel-and-standard-events` (instruments Purchase value and currency),
  `select-bid-strategy` (decides whether `MIN_ROAS` applies).
- After: `calibrate-cost-cap-and-roas-goals` (the ROAS multiplier itself).
- Related: `manage-the-learning-phase` (the goal switch resets it).
