Blog · Data quality and reconciliation · FMCG and CPG brands
How a CPG brand infers out-of-stocks per store per SKU from daily or weekly sell-out data without shelf audits: the SKU's own sales rate at the store, the gap that is too long to be chance, the lost sales valued at that rate, the stores and SKUs where gaps recur, and why the inferred figure is a list for the field team rather than a claim against the retailer.
A CPG brand's sell-out data shows a SKU that sold four units a day at a store for three months and then sold zero for nine days. The retailer's system said the store had stock. The shelf was empty. This guide sets out out-of-stock inference from sell-out gaps per store per SKU, the lost sales, the recurrence, and how the result is used.
Per store, per SKU:
Rate = mean daily or weekly units over the trailing window, excluding inferred stockout periods Run = consecutive periods with zero sales Inferred out-of-stock if the probability of a run that long at the rate is below the stated level Lost sales = run length × rate, valued at the retail price
Aggregated:
Recurrence = inferred stockouts per store-SKU over the trailing quarter Availability = 1 − periods inferred out of stock ÷ periods
Store and SKU identifiers only.
Σ stores' sell-out per SKU per period = retailer's total sell-out for the SKU
A period where a store is missing from the file fails it, and that store's runs are not inferred for that period, because a missing file looks like a zero run.
| Store | SKU | Rate/day | Zero run | Probability at rate | Inferred | Lost units | Lost sales |
|---|---|---|---|---|---|---|---|
| ST-2207 | K-104 | 4.1 | 9 days | under 0.1% | Yes | 37 | $148 |
| ST-2207 | K-109 | 0.3 | 6 days | 17% | No | ||
| ST-4471 | K-104 | 2.8 | 12 days | under 0.1% | Yes | 34 | $136 |
| ST-9034 | K-104 | 3.5 | 3 days | 3% | Borderline; shown, not counted |
One SKU, two stores, nine and twelve days of empty shelf that the retailer's system did not show.
| Retailer | DC | Stores with recurring stockouts on K-104 | Availability | Lost sales, quarter |
|---|---|---|---|---|
| Retailer A | DC-North | 41 of 180 | 91% | $38,000 |
| Retailer A | DC-South | 6 of 160 | 98% | $4,000 |
One distribution centre, one SKU, a quarter of its stores. That is a replenishment conversation with the buyer, with the method stated and the word inferred on the page.
One threshold for all SKUs. Slow sellers flagged constantly; fast sellers missed.
Missing files read as zero runs. The assertion catches them.
Presented as fact to the retailer. It is an inference; say so, and bring the pattern, not the accusation.
Rate includes stockout periods. The rate falls and the next stockout is missed. Exclude inferred periods from the rate.
Mapped once, the sell-out file, the store master and the price list produce the rates, the inferred stockouts, lost sales, recurrence and availability per store and per distribution centre every week. Covirage builds this from the exports as they are. The CPG brands page describes the setup, and the distribution voids guide covers the SKUs that were never on the shelf at all.
From the SKU's own rate at the store. A SKU selling five a day has almost no chance of a three-day zero run; one selling one a week has a good chance of a two-week zero run. The threshold is a run length whose probability under the SKU's own rate is below a stated level, per store per SKU, and it is on the report.
Because the brand does not see the shelf. The retailer's inventory system may show stock that is in the back room, mis-shelved or phantom. Sell-out is the only signal the brand holds, and a long zero run at a steady seller is the signature of an empty shelf. The report says inferred on every line.
Two things. The field team visits the recurring store and SKU pairs, ranked by lost sales. The account manager takes the aggregate by retailer and distribution centre to the buyer, as a pattern rather than an accusation, with the method stated.