How the measurement works, what it needs from your warehouse, where the limits are, and what the AI is and isn't allowed to do.
Replenishment systems compute how fast a product sells as units sold ÷ days elapsed. That quietly assumes the product was on the shelf the whole time. The moment something runs out, its own sales figure starts arguing against restocking it — so it stays out of stock, and the next cycle confirms the mistake.
Stockmind measures how many days each product was actually available and calculates velocity against that instead.
The days a product was genuinely in stock during the measurement window. Ninety days on the shelf is 90 ShelfDays. Sold out on day 14 is 14. Velocity is units sold ÷ ShelfDays.
The same twenty units of sales can mean 0.22/day or 1.43/day depending entirely on which denominator is honest.
A fast-selling product that reads as sluggish because it spent most of the period empty. Conventional velocity under-orders it, which keeps it empty, which produces another quarter of evidence that it's slow.
These are usually your best products. The bias isn't random — it's worst precisely where products sell out fastest.
Yes. Censored demand is the statistical name: when a product is unavailable you don't observe zero demand, you observe nothing, and those are different things. The literature goes back to the 1970s.
We claim no theoretical novelty. What's unusual is that so little commercial software acts on it. The paper covers the history properly, with references.
Your warehouse system is asked what every article's stock balance was on a series of past dates across the window. For each SKU, Stockmind counts how many of those snapshots showed stock:
ShelfDays = window × (snapshots with stock ÷ total snapshots)
By default it samples daily — 90 snapshots over 90 days, resolving availability to about half a day.
Stockmind did exactly that before measurement was available, and it's better than nothing. But inference can only detect products that are empty right now.
It misses the ones that sold out on day ten, were restocked on day fifty and are in stock today — which are, by definition, your fastest movers. Those are the products worth getting right.
It would, so there's a floor of fourteen ShelfDays. A product available for two days that sold one unit would otherwise imply 45 units a quarter — an artefact of arithmetic, not a demand signal.
Confidence should scale with evidence, not with luck.
Anything that exposes current stock, order history and — for the measurement — historical stock balances. Stockmind is in production against Ongoing WMS.
The historical balances endpoint is the one to check. Many systems have it; some call it a stock snapshot, inventory history or balance-on-date report. Without it Stockmind still runs, using inference rather than measurement.
A calculation over a few hundred thousand SKUs takes roughly fifteen minutes. The availability measurement at daily resolution takes around thirty.
After that it's much quicker: every snapshot is cached permanently, because a past date's stock balances cannot change. Re-measuring a week later reuses almost every date it already holds.
Because the cost is paid once. Coarser sampling is faster on the first run but leaves a resolution error — thirteen samples resolve availability to roughly ±3.5 days, which for a product with two weeks of stock is a large share of its denominator.
Daily sampling resolves to about half a day, and every snapshot it extracts is reused by every later run.
No. Stockmind reads. It produces reorder suggestions, reports and exports; placing orders remains yours.
On your own hosting. Stockmind is a self-contained application that talks to your warehouse system directly, and warehouse credentials are stored outside the web-served directory rather than in the application files.
The Briefing. It ranks everything that changed by what it's costing — products selling with nothing on order, ranges with no colour left in stock, generations rising and fading — and ends in a list of specific SKUs to order first.
Dead stock is a year with no sales at all. Overstock is stock that does sell, but nowhere near fast enough for the quantity held — "sells two a year, holds three hundred". The second never appears in a dead stock report, and it's the same frozen capital.
In the dead devices view, it means no SKU fitting that device sells any more. Scattered dead SKUs across a live device are a pruning job; a device where nothing moves is a generation to exit entirely, and the stock on it is exit stock.
In a SKU-level list those two situations look identical. At device level the decision makes itself.
Because they answer different questions. Measured against all SKUs, a device carrying eighty delisted lines looks unproductive — which is true if you're asking whether the range carries dead weight. Measured against stocked SKUs only, the same device may be perfectly healthy — which is true if you're asking whether what you actually buy earns its place.
Use the first for a catalogue cull, the second for a buying decision.
Lead times and review periods both, per supplier. A container ordered quarterly and a local supplier restocked weekly need very different order sizes even at identical demand, because the review period drives quantity.
Stockmind can also measure real lead times from your purchase order history and fill them in for you.
Two ways. Each run records what it flagged, and a later run reports how many of those were actually restocked, and of those, how many then sold.
That second figure is the honest test. If restocked suggestions consistently sell, the correction is earning its keep. If they don't, you should know that too.
Separately, the Progress report tracks ten measures over time — best sellers in stock, products selling while empty, demand missed, dead stock, surplus units — with charts and the change since you started.
Yes — that is what the Progress report is for. It saves as a clean A4 PDF, or opens as full-screen slides for a meeting, which also print one slide per page as a handout.
Each measure states which direction counts as an improvement, and the verdict follows that rather than the direction of travel. The report is capable of showing that something got worse, which is what makes the improvements credible to a sceptical reader.
Yes. An excluded supplier's products disappear from every report, total, export and briefing figure at once, so the numbers describe the business you are actually running rather than stock you are only storing.
The chooser shows what each supplier holds — SKUs, how many still sell, units on the shelf — so the decision is made against its real size. Nothing is deleted, and a supplier can be included again at any time.
Yes. Accounts are individual and come in two kinds: administrators, who can change settings and start calculations, and read-only accounts, which see every report but cannot alter a setting, trigger a run or manage users.
Sessions expire on their own, repeated failed sign-ins lock an account for an escalating delay, and changing someone's password ends their other sessions immediately.
From your warehouse system's own product class — the field your catalogue already uses to record compatibility. That is more reliable than reading the SKU, and it groups correctly across categories: a phone's cases, screen protectors and chargers share a class but not a product code.
Where a product has no class, Stockmind falls back to the SKU pattern rather than dropping it, and says how many products that applied to.
Common in accessories — a strap that fits four watch models, a sleeve that fits two laptops. Such a product counts toward every device it fits, and you choose how: split evenly between them, which keeps device totals reconciling with the catalogue, or counted in full against each, which shows the whole demand a device can draw on.
A "Shared" column shows how many of a device's products also fit others, so a range propped up by shared stock looks different from one with an exclusive line-up.
From your own catalogue. A range is worth expanding if it sits in the top quarter for demand per SKU with most of the range actually selling; it is over-extended if it sits in the bottom quarter while carrying a lot of products.
Quartiles rather than fixed numbers, so the verdicts stay meaningful as the catalogue changes rather than needing to be retuned.
No. Every reorder point, quantity, velocity and score is arithmetic. The same inputs always produce the same output, and no language model touches any of it.
Two things. It writes the weekly briefing as prose — what to restock, which ranges to widen with new products, what to stop buying. And it reads device names out of product names, so a list shows "Garmin Fenix 8 47mm" rather than an internal code.
The first is prioritisation and explanation. The second is text extraction. Neither involves calculation.
Five sections: the single most important thing this week; the specific products to restock first with quantities and what each is costing; named device ranges worth expanding and what to add to them; ranges to stop buying before their stock turns dead; and finished device generations grouped by supplier, since that is one return conversation rather than fifty.
It is stored, so it survives a reload, and it tells you when it was written from figures that have since changed.
Because every number it writes is checked against the source data before you see it. The model receives only pre-computed figures and is instructed not to calculate, estimate or infer anything.
Anything that doesn't match is flagged in red with the specific figures named, rather than presented as fact.
Yes. Leave the API key blank and everything else works unchanged. The AI layer is genuinely optional — it sits on top of the numbers rather than inside them.
No, and neither can anything else honestly. Every method estimates from a product's own history, and a product launched three weeks ago hasn't got one.
What Stockmind does is measure from launch rather than from an arbitrary window start, so a short history isn't mistaken for weak demand. For a genuinely new product it offers context instead: how the same variant mix split across colourways historically, and how the equivalent range performed for the previous device generation. That's a starting point for a buying decision, not a forecast.
Not as a modelled annual cycle. It extrapolates recent, availability-corrected behaviour, so it will not anticipate a Christmas peak from a summer measurement. A seasonal decomposition would be a real addition and isn't there yet.
Velocity is computed from units shipped. Where return rates are material, demand is correspondingly overstated. Worth knowing if you sell categories with heavy returns.
Substitution is real and only partly handled. Stockmind reports whether sibling variants held stock during a stockout, which separates a soft loss from a total one, but it doesn't model the transfer quantitatively.
One shorter than the gap between snapshots, yes. At daily sampling that's under a day. The uncertainty is stated rather than hidden, and the sampling interval is configurable.
It runs in production on roughly 226,000 SKUs, and reports answer in about a second because they stream the data rather than loading it. Memory use is flat regardless of catalogue size, so growth costs time on the first run, not stability.
Honestly, the advantage narrows. If you carry a few hundred products with deep stock, a buyer who knows them can catch what a conventional system misses.
The case gets stronger the longer your tail, the thinner your stock and the more SKUs one person is expected to watch — because that's exactly where manual override stops being feasible.
Run the measurement and look at one number: what share of your selling products currently have understated velocity. On one live catalogue it was 82%, with the worst corrections concentrated in the best sellers.
Whatever your number is, it's the size of the problem you're currently solving by hand — or not solving at all.
If something here didn't answer it, ask directly — technical questions are welcome and get a technical answer.
Get in touch →