BOGO And Quantity-Break Tests: Where Mix Shift Hides In Units-Per-Order

Metricuno
July 12, 2026
7 min read
BOGO And Quantity-Break Tests: Where Mix Shift Hides In Units-Per-Order — How to analyze BOGO and quantity-break A/B tests using CVR × UPO × ASP decomposition — spot the units-per-order mix shift that AOV alone hides.
Quick answer

BOGO and tiered-quantity offers move revenue through units per order, not just AOV. Here's the CVR × UPO × ASP decomposition that makes the mix shift visible.

Quick answer

BOGO and quantity-break tests break the usual RPV = CVR × AOV frame because AOV silently absorbs two independent movements: units per order (UPO) and average selling price per unit (ASP). Decompose RPV as CVR × UPO × ASP instead. If UPO is up 18% but ASP is down 22%, the offer is shuffling mix, not adding revenue — and standard AOV reporting will hide it.

Definition
Experimentation analysis

BOGO and quantity-break UPO mix shift

The revenue axis that BOGO and tiered-quantity offers move — units per order — which CVR × AOV analysis silently absorbs into AOV.

In a standard A/B test, RPV = CVR × AOV is enough to diagnose lift. Once a promo mechanic changes how many units land in a cart (buy-one-get-one, buy-2-save-10%, buy-3-save-20%), AOV becomes a composite of two moving parts: how many units per order (UPO) and how much each unit sells for (ASP). A BOGO that halves ASP but doubles UPO looks like AOV-flat in the dashboard while completely reshaping unit economics. The fix is to decompose RPV three ways — CVR × UPO × ASP — so each axis is attributable, and mix shift stops hiding inside a single AOV number.

Also known as
three-axis RPV decomposition
UPO-ASP split
promo mechanic mix analysis

The failure mode is specific and common. A BOGO 50%-off test posts a +6% RPV lift, the team ships it, and 60 days later gross margin is down without a clean explanation. What happened lived inside AOV the whole time.

AOV was flat because two things moved in opposite directions: shoppers took 1.8 units instead of 1.1 (UPO up 64%), but the blended ASP dropped from €42 to €26 (down 38%). The promo worked as a bundle-builder, not a price cut — but the dashboard couldn't tell you that.

Why UPO is the axis that hides

Most Shopify and GA4 reports surface sessions, conversion rate, orders, revenue, and AOV. UPO is derivable (total units ÷ orders) but rarely surfaced by default. In a non-promo world that's fine — UPO barely moves week to week.

BOGO and quantity-break mechanics change that. They're explicitly designed to move UPO. A test that fires this lever without reporting it is measuring the mechanic through the wrong instrument — like judging a suspension change by top speed.

The AOV-flat trap

If your BOGO test shows AOV within ±2% of control but CVR moved meaningfully, that's a red flag, not a null result. AOV-flat with high UPO variance almost always means UPO and ASP moved in opposite directions and cancelled out in the aggregate. Recompute with the CVR × UPO × ASP decomposition before calling the test.

The CVR × UPO × ASP decomposition

The identity is simple: RPV = CVR × UPO × ASP, where UPO = units ÷ orders and ASP = revenue ÷ units. Multiplying through gives revenue ÷ sessions, which is RPV. The three-axis view is fully covered in The CVR × UPO × ASP Decomposition For Promo-Mechanic Tests.

Compute all three per variant, then read them independently. Any axis moving more than ±3% deserves an explanation — even if RPV lift looks clean. Silent offsets between UPO and ASP are the whole reason margin decays post-launch.

The typical BOGO signature: CVR flat or slightly down, UPO up 40–80%, ASP down 30–45%, net RPV up single digits. The typical quantity-break signature: CVR down 1–3%, UPO up 15–30%, ASP down 8–15%, net RPV up mid single digits. Different mechanics, different footprints.

Benchmark UPO and ASP moves by vertical

Benchmark

Typical UPO and ASP deltas from BOGO and quantity-break tests, Shopify DTC brands

Vertical & mechanicCVR ΔUPO ΔASP ΔRPV Δ
Apparel — BOGO 50% off−1%+62%−38%+3%
Apparel — Buy 2 save 15%+2%+24%−12%+13%
Beauty — BOGO free (2-for-1)−4%+78%−44%−3%
Beauty — Buy 3 save 20%+1%+31%−17%+12%
Consumables — Buy 2 save 10%+3%+42%−9%+35%
Consumables — Buy 3 save 15%+2%+58%−13%+40%
Electronics accessories — BOGO 25%0%+35%−18%+11%

Consumables (supplements, coffee, personal care) show the strongest true lift because UPO gains stick — shoppers use what they bought. Apparel and beauty BOGOs often post small RPV wins that mask a margin problem, which is why Quantity-Break Tests On Consumables and Pull-Forward vs True Lift both matter before you ship.

Reading Shopify's discount engine correctly

Shopify reports BOGO discounts either as line-item discounts (per unit) or as order-level discounts, depending on how the promotion was configured. Line-item BOGO reduces the reported price of the free/discounted unit, so ASP falls cleanly and UPO rises cleanly. Order-level BOGO discounts the order total, leaving unit prices intact and inflating ASP while suppressing the apparent UPO gain.

Same mechanic, two different footprints in your data — see Reading Shopify's Discount Engine for the full mapping. Before you run a BOGO A/B test, confirm which configuration you're using and standardise how discounts are allocated in the analysis layer. Otherwise your control and variant may not even be reporting on the same axes.

Pull-forward: the follow-up test you need

A UPO lift can be genuine incremental units or a pulled-forward version of the next order. A shopper who would have bought 2 tubes of moisturiser this month and 2 next month buys 4 now — UPO is up 100%, but 60-day revenue per customer is flat. See Pull-Forward vs True Lift for the diagnostic framework.

The cheapest check: run the BOGO test for at least one full purchase cycle (30–60 days for most consumables, 90+ for apparel) and compare 60-day RPV, not session RPV. If session RPV is up 10% but 60-day cohort revenue is flat, you pulled forward — you didn't lift. How Long To Run A BOGO Test covers the stabilisation curve.

Frequently asked

Frequently asked questions

AOV = UPO × ASP, so it collapses two independent axes into one number. BOGO mechanics almost always move UPO up and ASP down. When they move by similar magnitudes, AOV looks flat and the dashboard tells you nothing changed — while gross margin per order changed a lot. Splitting into UPO and ASP makes the offsetting movements visible.

UPO = total line-item quantity ÷ number of orders, per variant. ASP = net revenue (after discounts, before shipping and tax) ÷ total line-item quantity. Both should be computed per experiment variant using the same discount-allocation logic. If your BOGO uses order-level discounting, allocate the discount pro-rata across units before computing ASP so the two variants are comparable.

For apparel BOGO 50%-off, expect UPO to roughly double (from ~1.1 to ~1.8–2.0). For quantity-break offers like 'buy 2 save 15%', expect UPO up 15–30%. Consumables tend to sit at the higher end because the offer aligns with genuine stock-up behaviour. Anything above +100% UPO deserves a hard look at pull-forward risk.

For promo-mechanic tests, RPV decomposed as CVR × UPO × ASP is the primary read. CVR alone will often decline slightly because BOGO shoppers deliberate longer and abandon more; RPV alone hides the mix shift. Report all four numbers — RPV, CVR, UPO, ASP — and only call the test when the story across all four is coherent.

Quantity-break tiers (buy 2 save 15%, buy 3 save 20%) move UPO less aggressively than BOGO but preserve ASP much better, so net RPV lift is usually larger and margin-safe. BOGO shifts more units but at deeper per-unit discounts. See BOGO vs Tiered Quantity Break for a full head-to-head.

Yes, meaningfully. Shoppers who would have bought one unit at full price often shift to the BOGO cohort, so measured UPO gain overstates incremental units. Segment the analysis: compare BOGO-eligible SKU sales in test vs control at the SKU level, not just cart-level. The gap between session UPO lift and SKU-level unit lift is your cannibalisation estimate.

Longer than a standard CRO test. UPO stabilises more slowly than CVR because early adopters over-index on stock-up behaviour, then usage settles. Plan for 3–4 weeks minimum, and confirm UPO variance has flattened over the last 7 days before calling it. For consumables, extend to one full purchase cycle (30–60 days) to catch pull-forward.

Common and often shippable — but only if the RPV win is driven by real UPO lift with acceptable ASP compression, not by CVR drop compounding into a smaller-but-richer basket. Walk through the diagnostic in When BOGO Wins RPV But Loses CVR: check gross margin per session, not just RPV, and confirm the CVR loss isn't concentrated in high-LTV new customers.

Consumables are where BOGO and quantity-break math looks best on paper and worst in cohort revenue. UPO gains are real, but 60-day repeat rate typically falls because customers stocked up. Model CAC payback on 90-day cohort revenue, not first-order revenue, or you'll ship offers that inflate short-term RPV and stretch payback by weeks.

Yes — this is the promo-mechanic special case of the broader How AOV Mix Shift Explains Most RPV/CVR Disagreements pattern. AOV mix shift usually comes from product-mix changes (cheaper SKUs selling more). BOGO adds a second mix axis — units per order — that needs its own column in the analysis, hence the three-axis decomposition.

Test ideas before you ship them

Run unlimited A/B tests, attach hypotheses to outcomes, and build a searchable archive of what works — and what doesn't.