Guides

Your sales history lies after a stockout

A day with no stock records the same zero as a day with no interest — and the forecast fitted to that history can't tell which one it read.

A zero-sales day has two very different meanings

Your sales table records transactions, not intentions. That is a much narrower thing than it looks. When a product sells nothing on a given day, the row that lands in your history is identical in both of the cases that could have produced it: customers arrived, considered it, and moved on — or customers arrived, found a greyed-out Add to cart, and bought from someone else. Same date, same SKU, same quantity: zero.

This is what statisticians call censored demand. Sales are not demand; they are a lower bound on demand, clipped wherever supply ran out. On days you had stock, the two numbers agree. On days you didn't, sales stop at your shelf and demand keeps going, unmeasured. The gap between them never gets written anywhere, which is precisely why it survives — nothing in the data flags itself as missing.

A forecasting model doesn't get to know the difference either. It sees a series of daily quantities and fits a level and a trend to them. Feed it a stretch of clipped days and it faithfully learns the clipped shape. The output isn't wrong given the input; the input was already a distorted picture of the thing you actually wanted to predict.

What you recordedReading A: no demandReading B: no stock
Zero units sold on the dayInterest faded — the product is driftingInterest was there — you had nothing to sell
What it says about the futureDemand is genuinely lowerDemand is unknown, and at least this high
Correct responseBuy less; consider discontinuingBuy more, and buy sooner
Can raw sales data tell them apart?No — both produce the identical row

The half-day stockout is the one you never catch

Full-day stockouts are at least conspicuous. A run of zeros in a product that normally moves every day looks strange enough that someone eventually asks about it. The dangerous case is the stockout that doesn't produce a zero at all.

Most stockouts don't start at midnight. Inventory hits zero partway through a day — mid-morning, mid-afternoon — and the day still closes with sales on the books. What gets recorded is a low day. Not an empty one, not an anomaly, just a number toward the bottom of the normal range. It has no signature. It doesn't trip anyone's eyebrow, because low days are a real and ordinary thing that happens to every product.

Those partial days blend into the variation the model is trying to estimate, and they do two kinds of damage at once. They pull the average down, and they widen the apparent variability of the product — which, in most safety-stock math, is the very quantity you're trying to measure. A product that stocks out in fragments looks both slower and noisier than it really is, and the second distortion partly hides the first.

Every average downstream inherits the lie

The distortion doesn't stay in the sales report. Almost every operational number you rely on is a rate, and a rate is a division — units over some span of days. The convention is to divide by elapsed calendar days, because that's the span you have on hand. But calendar days include the days you had nothing to sell, and those days contribute a numerator of zero while still adding to the denominator.

avg daily demand = units sold ÷ days in stock (not ÷ days in period)

Swapping the denominator is the smallest correction that removes the bias, and it doesn't require you to estimate a single unit you didn't sell — it only requires you to stop counting days on which selling was impossible. Everything built on top of that rate moves with it: days of cover, reorder point, safety stock, and the suggested order quantity that comes out the far end. They aren't independent errors. They are one error, propagated four times, and the average sits at the root of all of them.

Understate the demand, under-buy, stock out again

What makes this worth fixing rather than tolerating is that the error feeds itself. An understated average produces a smaller order. A smaller order runs out sooner. Running out sooner adds more clipped days to the history, which lowers the average further, which shrinks the next order again. Each cycle is defensible on its own evidence, and each one makes the evidence worse — the spiral-down effect, which ends with a genuinely popular product quietly demoted to a slow mover in your own reporting.

Breaking the loop means repairing the input before you fit anything to it. In Assisty, days you were out of stock can be excluded, so the forecast reflects real demand — not the days you couldn't sell. And because the exclusion is a scenario rather than a data migration, you can test it: ask "what if I exclude the weeks we were out of stock?" and the forecast and the reorder needs update in place, no spreadsheet copies.

StepWhat Assisty does
See the gapAsk in plain English for stock-availability or lost-revenue-from-stockouts reports — by product, variant, vendor, or location, and over time — built live from your synced store data
Clean the inputExclude the days you were out of stock, so the forecast reflects real demand
Test it"What if I exclude the weeks we were out of stock?" — the scenario applies instantly and recomputes the forecast and the reorder needs
Check the storyAsk why demand is changing and Atlas explains the drivers — distinguishing fading demand from a stock gap, and can cite your in-stock days over the period
Act on itThe forecast marks which items run out before the period ends; at-risk items carry straight into the Smart Buying Table

Forecasts run per product and per variant over the period you pick, so the correction lands at the grain you actually buy at rather than being averaged away across a product family. One caution worth keeping: excluding a window trades sample size for freedom from bias. If the history is short and the gap was long, widen the lookback before you narrow the days — otherwise you have swapped a biased estimate for an unstable one. And if the pattern is recurring, save the availability report to My Reports and schedule it for email delivery daily, weekly, or monthly, so the next gap surfaces while it's still a gap and not yet a trend.

Forecast the demand you had, not the demand you could fill

Install Assisty and exclude your stockout days from the history your next order is built on.

Install on Shopify