Retail Intelligence

Void & Out-of-Stock Reporting: What Distributors Miss

14 min read

Sit in a beverage-alcohol sales meeting and count how many different things the phrase “out of stock” gets used for. Somebody means a store that never carried the SKU. Somebody else means a store that carries it and ran dry. A third person means the account swears it has inventory and the shelf is empty anyway. A fourth means the buyer dropped the item in the spring reset and nobody wrote it down.

Four problems, one phrase. Four different owners and four different fixes. That’s the reason so many out-of-stock reports get opened once, argued about, and then quietly ignored: a single list that mixes all four states gives every reader a reason to say “that’s not mine.”

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, and the Out of Stock module is the one customers argue with us about most. Not because the detections are wrong. Because the four states need four different responses, and until a report separates them, it reads as noise. So this post is the taxonomy first, the detection second, and the arithmetic third.

StateWhat it is in one line
Distribution voidThe store never carried the SKU, so there’s nothing to replenish
Out of stockThe store does carry it and the shelf is empty right now
Phantom inventoryThe retailer’s system says in stock; the shelf says otherwise
DelistedThe item was deliberately dropped and the space reassigned

The four states, and why conflating them costs you a quarter

A void is an absence of placement. The SKU was never authorized for that account, or it was authorized and the first order never happened, which is more common than most brands expect. Authorization at chain level is a piece of paper. It becomes distribution only when an individual store’s order actually includes the item. The owner here is sales, or the distributor’s rep, and the fix is a placement conversation.

A true out of stock is an absence of execution. The item is authorized, the store stocks it in the normal course of business, and today there is a hole where it belongs. The cause is upstream in the replenishment chain: the account under-ordered, the distributor missed a delivery window, demand spiked, or nobody moved the case from the back room to the shelf. The owner is whoever controls reorder and delivery for that account.

Phantom inventory is an absence of data integrity. The retailer’s system carries a positive on-hand figure, so automatic replenishment sees no reason to order, while a shopper standing in the aisle sees nothing. This is the state that persists longest, because the mechanism designed to catch the gap is the mechanism reading the wrong number. It isn’t folklore. It’s a well-studied failure mode: DeHoratius and Raman examined nearly 370,000 inventory records across 37 stores of a single retailer and found 65% of them inaccurate (Management Science, 2008). More recent work commissioned by ECR Retail Loss, covering more than 1.3 million stock-audit events across six grocery retailers, put phantom inventory at between 8% and 24% of items at any given audit, rising from roughly 18% under monthly counting to over 27% when audits drop to twice a year. Both are grocery studies, not beverage-alcohol studies. Nobody publishes a bev-alc-specific equivalent that we’ve been able to find.

A delisting is an absence of commercial support. The buyer made a decision. The shelf tag is gone, the space belongs to something else now, and no amount of replenishment pressure brings it back. This is the state most often misread, because in week one a delisting and an out of stock look identical from the aisle.

You cannot replenish your way out of a void, because there’s no reorder point to trigger. You cannot sell your way out of a receiving error, because the buyer already thinks they own the product. And you cannot execute your way out of a delisting at all. Every hour a rep spends applying the wrong playbook to the wrong state is an hour that produces nothing, and a mixed report guarantees that misallocation at scale.

Why the distributor’s report can’t see most of this

Not because distributors are hiding anything. Because of where the measurement stops.

A depletion is a shipment from a distributor’s warehouse to an account, and the event is complete at the moment of delivery. We wrote the full version of that in our depletion data guide, so we won’t repeat it here. The part that matters for out-of-stock work is the boundary: product delivered to a store counts as a depletion whether it reached a facing, went to the back room, or is still shrink-wrapped on a pallet by the loading door. The report is telling the truth about a different question than the one you’re asking.

Then it gets worse by category:

  • Voids are invisible by construction. A store that never ordered the SKU produces no rows at all. It isn’t a zero in your report. It’s an absence from your report, and absence has no place to render.
  • Delistings look like out-of-stocks for weeks. Orders stop. That’s the only signal the shipment data carries, and it’s the same signal a temporary gap produces.
  • Phantom inventory lives entirely inside the retailer’s system, which the distributor doesn’t see either. From the shipment side, an account holding 40 phantom units and an account holding 40 real units are indistinguishable.

This is also why voids and out-of-stocks get so badly under-counted in independent trade specifically, where nobody is running a chain-level planogram you can diff against. Our post on independent liquor store data coverage covers that blind spot at length.

How each state is actually detected

The detection method follows from what makes each state visible. Three of the four require somebody or something looking at the shelf.

Void detection needs a denominator. You can’t identify stores that should carry a SKU but don’t unless you’ve defined the population that should carry it. In practice the denominator comes from some mix of the authorization list, the class of trade, and observed behavior of comparable stores in the same market. If 180 stores in a chain and format carry your SKU and 40 comparable ones don’t, those 40 are your void list. This is exactly what Shield Suite’s void reporting produces: stores that should carry a product but never started, named individually rather than rolled up to a region.

Out-of-stock detection needs repeat observation of an authorized SKU. One observation gives you a snapshot, which is nearly useless because a facing can be empty for an hour on a Saturday afternoon and fully recovered by Monday. What makes an out of stock actionable is the same store, the same SKU, absent across consecutive observation cycles. Duration is the signal, not the single instance.

Phantom inventory needs both the record and the shelf, which means the cleanest detection sits with the retailer, who owns the record. From the brand side you get a strong proxy instead: the account’s recent order pattern says it should have product, and the shelf says it doesn’t. That combination is nearly always either a phantom record or a back-room problem, and both route to the same conversation with store management.

Delisting detection needs the shelf tag and the neighbors. A hole with your tag still on the rail is an out of stock. A hole where the tag is gone and the adjacent SKUs have grown wider is a delisting. Facing-level observation catches the difference; order data never will.

The silent zero

The failure mode we run into most often isn’t a data problem at all. It’s a reporting design problem.

Bad numbers get noticed. A store whose weekly volume drops from 14 cases to 4 sets off alarms, gets talked about on the Monday call, and gets worked. A store that quietly stops ordering entirely doesn’t produce a bad number. It produces no number, drops out of the report, and stops appearing on any list. We call it the silent zero. Absence is dramatically harder to notice than a bad value, because every dashboard on earth is built to display rows that exist.

The fix is structural. Your reporting needs a persistent store universe, not a list assembled from whatever transacted this period. Every store that should be selling the SKU stays in the report with an explicit zero and a days-since-last-signal counter, so a store going quiet is a visible event rather than a gap in a list. If you’re rebuilding account-level reporting anyway, this belongs in the same pass as the coverage metrics in our distributor scorecard guide.

Putting a number on it without borrowing someone else’s

You’ll see lost-sales percentages quoted constantly in this category, usually without a source attached to them. So let’s be careful about the one number that is real.

The most-cited real measurement is still Retail Out-of-Stocks: A Worldwide Examination of Extent, Causes and Consumer Responses by Gruen, Corsten and Bharadwaj, published for the Grocery Manufacturers of America in 2002. It put the worldwide average out-of-stock rate at 8.3% and attributed causes as 47% store ordering and forecasting, 25% product in the store but not on the shelf, and 28% upstream. That study is worth reading. It is also worldwide grocery, from 2002, across eight non-alcohol categories, so please don’t let anyone present it to you as your out-of-stock rate. Use it for the shape of the problem, not the size of yours.

For the size of yours, compute it. The method takes four inputs and one honest discount.

  1. Baseline velocity for that store and that SKU, taken from the period before the gap opened. Store-level, never an average across the chain, because a hole in a high-velocity door costs many times what the same hole costs in a slow one.
  2. Days absent, from your observation data. This is why duration matters more than instance count.
  3. Your margin per unit, not the retail price. You lose your margin, not the shopper’s spend.
  4. A substitution discount, because not every missed unit is a lost unit.

That fourth input is where most estimates quietly inflate. The same 2002 study surveyed more than 71,000 consumers on what they actually do at an empty shelf, and the answers split roughly as follows.

Read that split from a brand’s chair and it reorganizes itself. The 31% who go to another store and the 19% who take a different size of yours are volume you keep. The 26% who switch brands and the 9% who buy nothing are volume you lose. So on those categories, something in the range of a third of the missed units is genuinely gone, and the rest reallocates. Treat that as directional arithmetic from a 2002 grocery table, not as your coefficient.

Now the worked example, with every input labelled as an assumption because that’s exactly what they are:

  • Assume 240 stores flagged with a true out of stock in a quarter.
  • Assume an average gap duration of two weeks per store.
  • Assume baseline velocity of 6 bottles per week in an affected store.
  • Assume your margin is $11 per bottle.

That’s 240 × 12 bottles × $11, or $31,680 of gross missed volume. Apply a one-third brand-loss share and you’re looking at roughly $10,500 of genuinely lost margin for the quarter, from one SKU, on made-up but plausible inputs. Swap in your real velocity and margin and the number becomes yours.

Two caveats we won’t quantify because we can’t honestly. Repeat absence does more damage than the arithmetic shows, since a shopper who finds your bottle missing three visits running stops looking for it. And the void list, which this calculation doesn’t touch at all, is usually the larger number, because a store that never started has been missing every unit for its entire history rather than for two weeks.

Turning detection into recovery

Detection is the cheap half. A report that lands in an inbox and dies there has cost you money rather than saved it. What separates brands that recover shelf presence from brands that just measure their losses is an operating rhythm with named owners and an escalation path.

Two details in that rhythm do most of the work.

Close every item with an outcome, not a visit. “Rep visited” tells you nothing. “Product was in the back room,” “buyer confirmed delisted,” “distributor missed two deliveries” turns your out-of-stock report into a diagnosis of your own supply chain within a quarter, because the outcome codes accumulate into a pattern.

Separate the one-off from the systemic on frequency, not severity. A large single gap at a good account is usually a one-off and it’s tempting to treat it as the emergency. A small gap that reappears every six weeks at the same twelve stores is the expensive one, and it will never look urgent on any individual week’s list. Rank by recurrence at least as often as you rank by size. The same logic applies to display and feature compliance, which we get into in the retail execution tracking guide.

What a report still can’t fix

Some voids are simply the retailer’s decision. A buyer who has looked at your item and said no is not a data problem, and detection changes nothing about that on its own. What better data buys you there is a different conversation: instead of asking for a placement on brand merit, you show the buyer their own comparable stores where the SKU performs, which is an argument made of their numbers rather than your enthusiasm. That works more often. It doesn’t always work.

Shelf observation also can’t see the back room, can’t read the retailer’s inventory record, and can’t tell you why a hole exists. It tells you where and for how long, precisely enough to send someone. The why still comes from a human at the store, which is why the outcome codes above matter so much.

And below a certain scale, none of this is worth systematizing. If your distribution is 300 accounts across two markets and your reps genuinely walk them, you’ll learn about empty shelves faster from your own team than from any report. The tooling starts paying when your footprint has outgrown what anyone can personally see.

What we’d recommend

Start with the taxonomy, before you buy anything. Take last quarter’s out-of-stock report, if you have one, and sort every line into void, out of stock, phantom or delisted. Most brands find the mix nothing like what they assumed, and the biggest single bucket is usually voids, which no replenishment effort would ever have touched. That exercise alone reorders the next quarter’s priorities.

Then fix the report structure before you chase detection frequency. A persistent store universe with explicit zeros catches the silent zeros, and it costs a schema change rather than a subscription. Only after those two things should you spend money on wider shelf coverage, because coverage feeding an unstructured worklist just produces more noise faster.

When you do get to coverage, what you want is store-level detail rather than a regional rollup: a location, a SKU and a date that a rep can actually work. That’s what our Out of Stock module is built to produce across 60,000+ storefronts, alongside the void list of stores that should carry a product and never started. The reporting plumbing behind it, the store universe and the account and product masters, is ordinary data analytics and business intelligence work, and if you’d rather own it yourself we’ll happily tell you that.

Send us what your current out-of-stock reporting looks like, including how it handles a store that stopped ordering, and we’ll give you a straight answer on whether it needs more data or better structure. We do this work with beverage-alcohol brands and distributors every week, and about half the time the honest answer is structure.

  • out of stock reporting
  • distribution voids
  • phantom inventory
  • on-shelf availability
FAQ

Common questions, answered

What is the difference between a distribution void and an out of stock?
A distribution void means the store never carried the SKU in the first place, either because it was never authorized or because authorization never turned into a first order. An out of stock means the store does normally carry it and the shelf is empty right now. The void is a sales and distribution problem you solve by getting the placement. The out of stock is an execution problem you solve by getting the account reordered and the shelf refilled. Chasing one with the other's playbook wastes a rep's week.
What is phantom inventory in retail?
Phantom inventory is stock a retailer's system records as on hand when it isn't actually available to a shopper. It comes from receiving errors, misplaced cases, unrecorded shrink, or product sitting in the back room. It matters because automatic replenishment reads the record, not the shelf, so the store never reorders and the gap can persist for weeks. ECR Retail Loss research across six grocery retailers found phantom inventory affecting between 8% and 24% of items at any given audit.
Why doesn't my distributor's report show out-of-stocks?
Because a depletion report measures shipments out of the distributor's warehouse, and that measurement is complete the moment product is delivered to the account. Whether the cases reached a facing, went to the back room, or sat on a pallet is outside the report's field of view. A quiet account also looks like nothing rather than like a problem, since an order that never happens produces no row. Detecting an empty shelf requires observing the shelf.
How do I calculate lost sales from an out of stock?
Take that specific store's baseline velocity for the SKU before the gap opened, multiply by the number of days it was absent, and multiply by your own margin per unit. Then discount it, because not every missed unit is a lost unit. Some shoppers buy the same brand in a different size, some drive to another store and still buy you, some switch brands, and some buy nothing. Only the last two are genuinely yours to lose. Build the estimate from your own velocity data rather than a borrowed industry percentage.
How can you tell an out of stock from a delisting?
Duration and the shelf itself. A true out of stock is temporary and the facing usually survives it, with a shelf tag still in place and a hole where product should be. A delisting is permanent and the space gets reassigned, so the tag disappears and a competitor or another of your own SKUs grows into the gap. If a store shows an empty facing for several consecutive observation cycles and the tag is gone, treat it as a commercial decision and route it to whoever owns that retailer relationship.

See it on your own data.

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