Two people can stand in front of the same shelf, write down exactly the same facts, and report on-shelf availability numbers thirty points apart. Neither one is lying. They divided by different things.
This is why the OSA slide is the most argued-over page in a supplier’s quarterly review. The supplier says availability is 75%. The retailer says 96%. Somebody proposes reconciling the two, everybody agrees that sounds sensible, and it never happens, because the numbers were never measuring the same population of stores to begin with. Nobody in the room is doing arithmetic wrong. They’re doing correct arithmetic on incompatible bases.
We’re gmware, a software and data engineering firm in Austin, TX, with delivery centers in Bangalore and Mohali, India. We also build Shield Suite, our retail-intelligence platform for beverage-alcohol brands across 60,000+ storefronts. Which means we spend a lot of time on the unglamorous end of this. Which stores belong in the denominator. What counts as absent. How to write a number down so it survives someone else’s scrutiny.
This post is the measurement and the arithmetic. What the different absence states actually are, and which one you should chase, is a separate question we covered in the void and out-of-stock reporting guide. Here we’re only concerned with how the percentage gets computed and why yours doesn’t match anyone else’s.
| Term | What it is in one line |
|---|---|
| On-shelf availability (OSA) | Share of observations where a shopper could actually buy the item |
| Out-of-stock rate | The complement of OSA, but only on the same base |
| SKU-store observation | One product, one store, one point in time: the unit being counted |
| Denominator | The store and SKU universe you chose to divide by |
| Observation window | The days and times your observations were taken |
The formula, and why it settles nothing
Here it is:
OSA % = (SKU-store observations where the item was present and saleable ÷ SKU-store observations in the defined universe) × 100
That’s the whole calculation. Every version of the metric you’ll see, from a consultancy deck to a shelf-monitoring vendor’s dashboard, reduces to that. The out-of-stock rate is the same measurement inverted, 100 minus OSA, on the condition that both come from the same base. They frequently don’t, which is how a deck ends up quoting 94% availability on one page and an 11% out-of-stock rate on the next without anyone noticing.
Notice the unit: one SKU, in one store, at one point in time. So OSA describes a set of observations rather than a shelf, and three separate decisions get baked into the number before you divide anything.
Which stores are in the set. Which SKUs are in the set. And which observations count as a miss.
Get those three stated and the metric is useful. Leave them unstated and you’ve produced a number that cannot be compared to last quarter’s, let alone to the retailer’s.
The reason the shelf is the right place to measure at all, rather than the record, is that the losses concentrate in the last few metres. The ECR Europe project measured service levels of 99% from manufacturer depot to retailer DC and 98% from DC to stockroom, then 90 to 93% from stockroom to shelf (Optimal Shelf Availability, ECR Europe, 2003). European FMCG, two decades ago, not beverage alcohol, so treat the figures as shape rather than as your numbers. The shape is what matters: the loss concentrates in the one stretch of the chain that no record system observes.
The denominator decides the number
Take one SKU in one state and hold the shelf facts completely fixed. Every figure below is an assumption I’m making up so the arithmetic is visible, not a measurement.
- Assume 1,000 off-premise stores in the market sell your category at all.
- Assume 500 of them are authorized to carry this SKU, through a chain listing or an independent’s own decision.
- Assume 400 have ordered it at least once.
- Assume 340 ordered it within the last 90 days.
- Assume you observe the 400 stores that ever ordered it. In 300 the bottle is on the shelf. In 100 it isn’t.
- Assume 40 of those 100 absences are at stores still ordering, and the other 60 are at stores that stopped.
One observation set. Five defensible ways to report it.
Same shelf, five OSA numbers
Walk the four unweighted ones.
Active shipped-to accounts. 300 present out of 340 that ordered in the last 90 days gives 88%. This is the execution number. It answers “of the stores currently working with this product, how many have it on the shelf right now,” and it’s the version a distributor or a field team will recognise as fair, because it only holds them accountable for stores they’re actually servicing.
All stores that ever ordered. 300 out of 400 gives 75%. Thirteen points of the gap between this and the previous number is nothing but dormancy: 60 stores that took the SKU at some point and stopped. That’s a real problem, and it’s a completely different problem from a hole on a shelf in a store that reorders every week.
The authorized universe. 300 out of 500 gives 60%. Now you’re including 100 stores that hold a listing and never placed a first order. This is the number a national sales director should care about, because it prices the total unrealised opportunity, and it’s also the number that makes an execution conversation impossible, because most of the gap can’t be replenished into existence.
Every store in the market. 300 out of 1,000 gives 30%. Almost nobody publishes OSA this way and it’s the only version that captures the true commercial ceiling. Useful once a year for planning. Useless every other week.
Then there’s the weighting question, which is separate from the store-list question and gets skipped constantly. Counting stores equally treats a 40-case-a-week door and a 2-case-a-week door as one vote each. If you instead weight each store by its own volume, and if the absences skew toward busier stores, the number falls. Assume the 40 absent active stores account for 18% of your volume in that market rather than the 11.8% of stores they represent by count, and your active-account OSA reads 82% rather than 88%. That skew is not hypothetical: the 2002 GMA study found faster-moving SKUs go out of stock more often than slower movers, so the observations you’d most want to weight up are exactly the ones most likely to be misses.
If your business runs on ACV or on a volume-weighted distribution measure elsewhere, weight OSA the same way. Mixing an unweighted OSA into a weighted distribution report is how a deck ends up internally inconsistent in a way nobody can find.
Which denominator we’d actually use
Two numbers, always, never one.
Publish an execution OSA against active shipped-to accounts, and publish an opportunity number against the authorized universe, side by side, with the store counts printed next to each. The execution number belongs to whoever services the account. The opportunity number belongs to sales. Collapsing them into one percentage guarantees that whoever receives the report can point at the part that isn’t theirs and dismiss the whole thing.
The trap in the middle is the 60 dormant stores. They pollute the execution number and they’re invisible in the opportunity number, so most reports quietly drop them by rebuilding the store list from whatever transacted this period. Do that and a store going quiet stops being an event and becomes a gap in a list. Your denominator needs to be a persistent, versioned store universe with a reason attached to every entry and exit, which is the same plumbing problem as the coverage metrics in our distributor scorecard guide.
One more thing about the authorized universe: in beverage alcohol it’s partly fiction. Chain authorization lists are obtainable. Independent trade has none, so the authorized universe for independents gets inferred from comparable stores, which makes your denominator a model output rather than a fact. Say so in the report. The wider version of that hole is in independent liquor store data coverage.
The numerator has its own arguments
Four counting decisions, each of which moves the number by points.
Out versus low. A facing with two bottles left on a peg built for twelve is technically available and practically about to be a hole. The ECR France work inside the ECR Europe project split this explicitly, using daily point-of-sale data to derive a rate of total stockouts from zero-sales days and a rate of partial stockouts from abnormally low sales days. If you’re observing shelves rather than modelling sales, you need a written threshold, something like “fewer than N facings filled counts as partial,” and you need to report partial separately rather than folding it in. Folded in, it inflates your OOS rate and nobody trusts the report. Left out entirely, you miss the gap you could still have prevented.
Delisted items. ECR Europe treats a delisting as one of three forms of stockout, on the logic that the shopper who wanted the product still didn’t get it. From a shopper-experience view that’s right. From a supplier’s operating view it’s actively unhelpful, because it puts items nobody can replenish into the same bucket as items a rep can fix this week. Our position: exclude confirmed delistings from the OSA numerator and the denominator both, and report them as a separate line with its own count. Then state that you did it. If you follow the ECR definition instead, your number will be lower than a supplier who excludes them, and neither of you will be able to explain why.
Secondary placement. The same product on the main shelf and on an end-cap is two locations and potentially two observations. ECR calls out dual-placement stockouts, where one of the two sites is empty. Decide whether you’re measuring locations or products, write it down, and don’t change it between quarters.
Saleable condition and location. The shopper-side definition includes product that’s present but not sellable, or present in the wrong spot. A case stacked on the floor beside the shelf, a damaged pack, a bottle behind the wrong tag. Whether you count those as absent is a real choice with a real effect on the number, and it’s the choice most often left to whoever is holding the scanner.
Four numerator decisions
Timing moves the number more than most people expect
An OSA percentage without a stated observation window is not a measurement, it’s a mood.
The 2002 GMA study, which pooled 40 separate out-of-stock studies, found availability varies systematically within the week. Across the thirteen studies that reported daily rates, out-of-stock rates averaged 10.9% on Monday and 7.3% on Saturday (Retail Out-of-Stocks: A Worldwide Examination of Extent, Causes and Consumer Responses, Gruen, Corsten & Bharadwaj, Grocery Manufacturers of America, 2002). The same report found rates highest in the evening after 8pm and lowest in the early afternoon, which follows overnight restocking. Worldwide grocery, not beverage alcohol, and 2002. Still, 3.6 points of swing from the day of the visit alone is enough to erase or invent an improvement between two quarters if your visit days drifted.
Duration is the other half. A snapshot tells you a hole existed, not how long it lasted. The same GMA report cites a study of 13 US stores in which roughly 20% of out-of-stocks were replenished in under eight hours while a similar share persisted beyond three days. Those two populations should not carry equal weight in a report, and under a single point-in-time measurement they do.
So state the protocol. The ECR Europe survey ran multiple checks per day across 250 items per store for two weeks, in seven countries and seven retailers, and reported individual products ranging from under 1% to over 30% out of stock. That range carries the same lesson as the denominator table: precision in the method is what makes a headline number mean anything.
For most brands the fix is fixed frequency rather than higher frequency. Same day of the week, same rough time band, every cycle, so a movement in the number reflects a movement on the shelf and not a movement in your schedule.
Why the rep count and the observed count never match
You will eventually put a field team’s stockout count next to an observed shelf panel’s count and find they disagree badly. Both are samples. They just have different selection rules, and neither rule is random.
A rep’s count is selected by the rep’s route. Reps visit their best accounts most often, visit during working hours (which the GMA time-of-day finding says is when availability looks best), and record what they were told to look for. A rep who has fifteen SKUs to check and forty minutes will check the ones that matter to their quota. None of that is misconduct. It’s a non-random sample with a bias that points consistently in one direction: rep-reported availability runs high.
An observed panel has a different bias. Its selection rule is coverage, so it sees the stores it covers, at the cadence it covers them, and it’s blind everywhere it isn’t. It doesn’t know why a hole exists, only that there is one, and it can’t see the back room at all. It also can’t distinguish a delisting from a stockout in week one without the shelf tag, which is a taxonomy question rather than an arithmetic one.
So reconcile on the intersection, not on the totals. Restrict both sources to the same store list, the same date range and the same absence rule, then compare. The residual difference after those three restrictions is the interesting part. In our experience it’s usually a visit-day mismatch, a rep counting the back-room case as available, or a store that appears in one list and not the other because the account master carries it under two names. That last one is dull and extremely common. Fix it before you fix anything else. It’s the same reconciliation work behind verifying retail execution and display compliance.
What a defensible OSA report states on its face
Not in an appendix. On the page with the number.
Four lines that make an OSA number arguable
Add one more discipline: version the definition. When you change the absence rule or add stores to the universe, restate the prior period on the new rule and show both. Otherwise your first quarter of improvement is indistinguishable from a definition change, and everyone in the room will suspect it was.
About targets
You’ll get asked what good looks like. Nobody publishes a beverage-alcohol OSA benchmark we’ve been able to find, and the numbers people quote at each other come from grocery.
The GMA report concluded that around 8% may be the natural out-of-stock average for fast-moving packaged goods given the retail methods of its time, and said plainly that a typical rate is not an acceptable one. ECR Europe put European FMCG at 7.1% average, with availability varying by category, store format, promotion and day of the week, and category-level OSA running from lows of 70% up to over 99%. Adopting any of those as a target means importing a different category, a different continent and a decade that ended a long time ago.
Set your own baseline. Measure three or four cycles on a fixed protocol, take the result as period zero whatever it is, and manage the delta. The absolute number is mostly a function of your denominator anyway.
What we’d recommend
Write the definition down before you buy any measurement. One page: denominator rule, SKU set, absence rule, observation cadence. Circulate it to your distributor partners and your retail contacts, and let them argue with the definition rather than with next quarter’s number. Half the value of OSA measurement is in that argument happening once, upfront, instead of every quarter forever.
Then publish two numbers, execution and opportunity, on a persistent store universe that keeps dormant accounts visible instead of dropping them. That costs a schema decision, not a subscription.
Only after that does wider shelf coverage pay for itself. When you get there, what you want is store-level detail with a date attached rather than a regional average, which is what our Out of Stock module produces across 60,000+ storefronts, alongside the list of stores that hold authorization and never started. The unglamorous half, the store universe and the account and product masters that make any denominator trustworthy, is ordinary data analytics and business intelligence work. If your depletion feeds are the source for your shipped-to store list, our depletion data guide explains what that list can and can’t tell you.
Send us the OSA number you report today along with what it’s divided by, and we’ll give you a straight answer on whether the number is wrong or just undefined. We do this with beverage-alcohol brands and distributors constantly, and undefined is the more common diagnosis.