Retail Intelligence

On-Shelf Availability: The Formula & the Denominator Problem

15 min read

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.

TermWhat it is in one line
On-shelf availability (OSA)Share of observations where a shopper could actually buy the item
Out-of-stock rateThe complement of OSA, but only on the same base
SKU-store observationOne product, one store, one point in time: the unit being counted
DenominatorThe store and SKU universe you chose to divide by
Observation windowThe 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.

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.

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.

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.

  • on shelf availability
  • osa
  • retail metrics
  • shelf measurement
FAQ

Common questions, answered

What is the on shelf availability formula?
OSA equals the number of SKU-store observations where the item was present and saleable, divided by the number of SKU-store observations in your defined universe, times 100. The unit of measurement is one SKU in one store at one point in time, so the observation count is itself a choice you are making. Out-of-stock rate is 100 minus OSA only when both are computed on the same base. Two teams using the same formula and the same shelf facts will still disagree if they defined the universe differently.
What does on-shelf availability mean in retail?
It means the shopper who wants your product can find it and buy it. The ECR Europe definition is deliberately written from the shopper's side: a product not found in the desired form, flavour or size, not found in saleable condition, or not shelved in the expected location counts as unavailable. That is stricter than a warehouse or inventory-record definition, because an item sitting in the back room is available to the retailer's system and unavailable to the shopper. Anything measured from a record rather than from the shelf will read higher than reality.
Why do our OSA number and the retailer's OSA number disagree?
Almost always because you are dividing by different things. A retailer typically measures against the assortment it authorized for that store, and often only against stores actually trading the item. A supplier often measures against every store it believes should carry the SKU, which includes stores that never started. Add different rules for what counts as absent, and different visit days, and a thirty-point gap between two honest numbers is completely ordinary. Reconcile by restricting both sides to the same store list, the same dates and the same absence rule before comparing anything.
Is a 95% on-shelf availability target good?
It depends entirely on the base it is measured against, so the target is meaningless without the denominator attached. 95% against stores that ordered in the last 90 days is a normal execution result. 95% against the full authorized universe would be unusually strong, because it implies almost no dormant accounts. The published FMCG benchmarks people quote at each other come from European and worldwide grocery studies in the early 2000s, not from beverage alcohol, so use them for the shape of the problem and set your own baseline for the size of yours.
How often do you need to observe a shelf to measure OSA credibly?
Often enough that duration becomes visible, because a single snapshot cannot tell a two-hour gap from a three-week gap. The 2002 GMA study found availability varies by time of day, with the worst rates after 8pm, and by day of the week, and the ECR Europe project ran multiple checks per day on 250 items per store over two weeks. In practice a fixed weekly cycle at a consistent point in the week gives you a comparable series, while ad-hoc visits give you anecdotes. What matters more than raw frequency is that the cadence is the same every period, so a change in the number means a change on the shelf.

See it on your own data.

Book a 30-minute discovery call and we'll walk through your use case.