The Playbook
- 1. Price Image ≠ Price Level
- 2. KVIs — Finding the SKUs That Carry Your Reputation
- 3. The Competitive Price Index, Done Honestly
- 4. Elasticity from Historical Data — The Recipe and the Traps
- 5. Testing Price Changes Without an A/B Test
- 6. The Margin Waterfall — Where Price Realization Leaks
- 7. Price Architecture Quick Wins
- 8. Governance — The Part That Actually Determines Success
Pricing content online splits into two camps: consulting frameworks with no math (McKinsey-style) and vendor pitches for pricing software. This playbook is the missing middle — what an analyst actually does to measure price position, estimate response, and move prices with confidence, using the data warehouse you already have.
1. Price Image ≠ Price Level
The foundational insight of retail pricing: customers don't know most of your prices. They form a "price image" — cheap, fair, expensive — from a small set of products they buy often and compare actively, then generalize it to your whole catalog. The strategic consequence is enormous:
You can be priced sharp on the ~5–10% of SKUs that build price image and recover margin on the long tail customers never compare — and be perceived as cheaper than a competitor with a lower average price who mismanages their visible items.
This is why blanket strategies ("match competitor X everywhere" or "cost-plus 20% everywhere") are both wrong: the first gives away tail margin for invisible sharpness; the second loses the image battle on the items that decide it. Every serious pricing operation therefore starts by splitting the catalog into KVIs (key value items) and the background assortment.
2. KVIs — Finding the SKUs That Carry Your Reputation
KVI identification is a scoring exercise on signals you already have:
| Signal | Why it marks a KVI | Where to get it |
|---|---|---|
| Purchase frequency | Bought often = price remembered | Orders table |
| Traffic & search volume | Highly viewed = highly compared | PDP views, search logs |
| Price-comparison exposure | Present on comparison engines, competitor overlap | Competitor matching (below) |
| Measured elasticity | Demand actually responds to price | Section 4 |
| Basket-starter role | First item in baskets → drives the trip | Order item sequence |
Score, rank, and take the top slice per category — typically 5–10% of SKUs covering 30–50% of volume. The pricing policy then splits: KVIs get competitive index targets and tight monitoring; the tail gets margin targets and elasticity-informed room. Most of the margin you'll recover in a pricing program comes from the tail items that were needlessly matched to competitors for years.
3. The Competitive Price Index, Done Honestly
The standard metric: CPI = Σ(your price × weight) ÷ Σ(competitor price × weight) — 100 = parity, 102 = you're 2% more expensive. Three decisions determine whether yours means anything:
- Matching quality is the whole game. Comparing your 6-pack to their 4-pack corrupts everything downstream. The embeddings + LLM adjudication pipeline from the LLM playbook (section 6) is exactly this problem; track match coverage and audit precision monthly.
- Weight by your revenue, not SKU count. An unweighted index treats a fringe item like your top seller. Weight by your units or revenue — and report KVI-index separately from tail-index; the KVI index is the one that predicts perception.
- Availability-adjust. A competitor's great price on an out-of-stock item is not a price. Exclude their OOS listings, and beware marketplace "reference prices" no one can actually buy at.
Report the distribution, not just the average. "CPI 101" can hide "30% of KVIs are >5% overpriced and 25% are needlessly underpriced." The action list lives in the tails: the overpriced visible items (fix for image) and the underpriced ones (harvest quietly).
4. Elasticity from Historical Data — The Recipe and the Traps
Elasticity — % volume change per 1% price change — turns pricing from opinion into arithmetic: an item at elasticity −0.6 gains profit from a price increase; at −2.5 it loses badly. The basic estimation is a log-log regression on your own price history:
# log(units) = a + e·log(price) + controls — the coefficient e IS the elasticity
import statsmodels.formula.api as smf
model = smf.ols(
"log_units ~ log_price"
" + promo_flag" # CRITICAL — see trap 1
" + stockout_share" # days item was unavailable
" + C(month)" # seasonality
" + log_comp_price", # competitor price → cross-elasticity
data=weekly_sku_data,
).fit()
elasticity = model.params["log_price"]python
The traps, in the order they'll bite you:
- Promo confounding (the big one). Historically, low prices came bundled with banners, emails, and homepage slots. A naive regression attributes the visibility effect to price and overstates elasticity 2–5x — leading you to under-price permanently. Control for promo participation at minimum; better, estimate on non-promo price variation only.
- Censored demand. Zero sales during a stockout is not zero demand (same issue as forecasting — ML playbook, section 4). Exclude or control stockout periods.
- No price variation, no elasticity. If an item's price never moved, no method can estimate its response. Pool to category × price-band level and shrink item estimates toward the pool (hierarchical/empirical-Bayes style) — item-level estimates on sparse data are noise with confidence intervals wider than the answer.
- Asymmetry and reference prices. Response to increases ≠ decreases, and customers anchor on the price they last saw. Treat estimated elasticity as a directional planning number, not a precision instrument — and validate the big moves with tests (next section).
5. Testing Price Changes Without an A/B Test
You generally cannot user-split price tests: showing different prices to different users simultaneously is a legal/trust minefield and violates arm independence anyway (the interference problem from the experimentation playbook). The honest alternatives:
| Method | How | Best for |
|---|---|---|
| Region / market split | New price in city A, old in city B; difference-in-differences on the gap vs its pre-period | Companies operating multiple comparable markets |
| Switchback | Alternate price levels over time blocks; compare within-item across blocks, controlling day effects | Single market; needs demand stability and care with reference-price effects |
| Matched-item rollout | Change price on a treatment set of SKUs; compare vs matched control SKUs (synthetic control) | Tail-margin harvesting programs — the workhorse in practice |
The matched-item design deserves emphasis because it's the practical default: pick 200 tail SKUs for a +3% move, match each to a control SKU on category, price band, and velocity, then compare volume trends. Report profit delta, not revenue delta — a small volume loss is the expected cost of a correct price increase.
6. The Margin Waterfall — Where Price Realization Leaks
List price is fiction; what matters is pocket price — what's left after every leak. Lay it out as a waterfall per category:
List price 100.0
− promo discounts −8.2 (promo playbook territory)
− coupon / voucher stacking −2.1 (watch stacking rules!)
− loyalty points liability −1.4
− payment fees & COD costs −1.8 (payments playbook)
− returns & RTO net cost −3.6 (returns playbook)
− shipping subsidy −2.9
= Pocket price 80.0 → 20pts of leak, each with an ownerthe waterfall
Build this once per category and two things happen: leaks get owners (each line maps to a playbook in this series), and pricing conversations shift from "can we raise prices?" to "which leak do we fix first?" — usually a far easier win. Classic finds: voucher stacking configurations nobody intended, shipping subsidies on orders that would clear the threshold anyway, and loyalty accruals on already-discounted items.
7. Price Architecture Quick Wins
- Good-better-best coverage: gaps in the ladder (no mid-tier option) push customers to the cheap end; a well-placed premium anchor lifts mid-tier sales. Check ladder completeness per category.
- Threshold integrity: if free shipping starts at 100, prices at 97 strand baskets below the threshold. Audit price points just under your own thresholds.
- Ending consistency: pick a rule (x9, x5, round) per category tier and enforce it — mixed endings on adjacent items read as carelessness and complicate perception. The measurable part: inconsistency correlates with lower conversion on the comparison page; test it if doubted.
- Pack-size honesty: per-unit price should fall with pack size. Violations (common after uncoordinated repricing) are quietly toxic — deal-hunting customers screenshot them.
8. Governance — The Part That Actually Determines Success
Pricing analytics fails organizationally before it fails technically. The minimum viable operating model:
- One repricing cadence with rules, not ad-hoc edits: KVIs repriced on index triggers (e.g., >2% adverse gap for 3 days), tail repriced on elasticity-informed margin rules, all changes logged with reasons — that log becomes next year's elasticity dataset.
- Guardrails in the system: margin floors, max daily change, MAP compliance, no increases on items in active promos, pack-size sanity checks. Every guardrail exists because someone once didn't have it.
- A weekly price review ritual: index vs target by category, active tests, waterfall leak of the week. 30 minutes, commercial + analytics together.
- Measure the program on realized margin and KVI index, not on "number of prices optimized" — vendor-metric theater.
Sharpen the few prices customers actually see, harvest the many they don't, trust elasticity only after controlling for promos, and fix the waterfall leaks before touching list prices — most pricing money is lying in the leaks.
Sources & Further Reading:
Competera: KVI Pricing •
McKinsey: Pricing in Retail •
Revology: Retailer Pricing Frameworks •
Price Elasticity: Formula & Pitfalls