Manual replenishment means a person deciding what to reorder from a sales report, a spreadsheet or a feel for what usually moves. Alongside it sits a minimum and maximum threshold, set once at implementation, and left untouched until it is obviously wrong. Neither the spreadsheet or static min/max levels respond to what demand is actually doing this month. The failure is asymmetric and expensive in both directions. A product whose sales are accelerating blows past a stale minimum level before anyone notices and stocks out. Sales are lost because inventory is unavailable. A product whose sales are decelerating keeps getting reordered at the old max stock level and the cash sits on a shelf.
The damage is further compounded when cash is not available to buy high margin, fast selling items because that cash is tied up in this dead stock. Both look identical on a report that shows only units sold. Underneath that stock sitting idle on the shelf, a subtler and more damaging error lurks.
Most demand analysis treats a day with no sales as a day with no demand. It is not.
A product that sold out on day ten and then sat at zero stock for eighty days did not have low demand; it had unmet demand, and no stock to meet it. Every figure calculated downstream from an uncorrected sell-through rate on a spreadsheet or report inherits that error.
For a stable, non-seasonal product, a 30-day moving average of actual daily demand provides a genuinely effective forecast. It is a transparent calculation and does not require a buyer to trust a black box. It’s known weakness is that it responds slowly to a change in direction (acceleration or deceleration), which is exactly what the second model addresses – and why they are used in conjunction.
A demand trend ratio compares the mean of the last 30 days against the mean of the last 90. Above 1.0 and the product is accelerating; below 1.0 and it is slowing. That ratio is applied to the moving average as a multiplier, producing a trend-adjusted forecast that moves faster than a plain historical average can. A product selling 40% faster this month than its quarterly average has a forecast that reflects that, today, rather than in three weeks’ time.
Days on which a product had zero available stock are removed from the demand calculation entirely.
This is the single most consequential correction in the engine. Consider two products, 100 units purchased of each. One sells out in ten days. The other takes a hundred days to clear. A bestseller list shows both as having sold 100 units and treats them as equivalent. In reality, the first item would probably have sold several times over. Because this analysis on velocity is applied at source, in the nightly batch, every downstream number inherits the corrected figure rather than needing to be fixed later.
Every forecast carries the number of days of demand history that supports it. Five days of history still produces a forecast, but the AI states the limitation and hedges the recommendation accordingly.
A full year of history produces a confident recommendation, because there is a full year of evidence behind it. Confidence is stated explicitly as part of the answer rather than implied by the absence of a caveat.
Demand is recorded at the moment stock physically needs to leave a location, not when a sales order is logged. For a retail till, sale and demand occur at the same moment.
For a wholesale order taken today and dispatched in ten weeks, sale and demand do not occur at the same moment. In Stok.ly, the forecast is built around the dispatch date, because that is the date that determined whether stock needed to be on the shelf. Stock moving between your own locations is not counted as demand at the sending location. Raw material consumed into a manufacturing run is.
The result is that a business running retail, wholesale and ecommerce together gets one coherent demand signal instead of three signals that disagree because there are three models in operation.
Every rolling demand window carries statistical percentiles as well as a mean average. A product averaging seven units a day with a 90th percentile of twenty-five behaves nothing like a product averaging seven with a 90th percentile of nine, and stocking both to the average will leave you short on one of them when sales spike. This is covered in depth on the sales velocity analysis page.
What do you like best about Stok.ly – Inventory-Centric Cloud ERP?
“we have been a user for the last 4 years and we cannot think of life without it for our retail business. it makes listing to shopify and other marketplaces easy, keeps inventory accurate online and the POS is easy to use. accurate inventory across all sales channels is the big win for us.”
| Field | What it tells you | How it is calculated | How the buying team uses it |
|---|---|---|---|
| Moving average forecast | Expected daily demand for a stable product | Mean of actual daily demand over the trailing 30 days, excluding zero-stock days | The baseline expectation for a settled, non-seasonal line |
| Demand trend ratio | Whether demand is accelerating or slowing | 30-day mean demand ÷ 90-day mean demand | Above 1.0 buy more and protect cover; below 1.0 review open purchase orders |
| Trend-adjusted forecast | Expected daily demand corrected for direction of travel | Moving average forecast × demand trend ratio | The figure that feeds reorder point and days of cover |
| Demand standard deviation | How erratic demand is for this product | Standard deviation of daily demand across the trailing 90 days | Drives safety stock; high variability earns a larger buffer |
| Demand percentiles | What a bad day actually looks like, not just an average day | 30th, 60th and 90th percentile of daily demand across each rolling window | Reveals spikes a mean conceals |
| Days of demand history | How much evidence sits behind the forecast | Count of days the data lake holds for this SKU at this location | Calibrates how much weight to put on a new product’s forecast |
| Sales report and min/max | Stok.ly statistical forecasting | |
|---|---|---|
| Where the number comes from | A person, at implementation | Actual demand behaviour, recalculated nightly |
| Response to a demand spike | None, until someone notices | Trend ratio lifts the forecast automatically |
| Response to a slowdown | Continues ordering at the old rate | Forecast and safety stock both reduce, releasing capital |
| Treatment of stockout days | Counted as genuine low demand | Excluded from sell-through at source |
| Handling of erratic demand | Invisible; only the average is seen | Standard deviation and percentiles both held |
| New product handling | Treated identically to an established line | Confidence explicitly reduced and stated |
| Maintenance overhead | Periodic manual recalibration | None |
Positions below reflect vendor-documented capability as at 27 July 2026.
Use the same anonymised data set and the same questions with every vendor, and insist on a live workflow rather than slides.
Score on time taken, number of clicks, whether the answer is traceable to source records, and whether the insight becomes an editable draft without rekeying.
Two models working together. A 30-day moving average provides the baseline for stable, non-seasonal products. A trend-adjusted version compares 30-day mean demand against 90-day mean demand and applies the resulting ratio as a multiplier, so a product changing direction is caught early rather than after it has already stocked out.
Yes. Days on which a product had zero available stock are excluded from the sell-through calculation. Without that correction a product that sold out and then sat at zero looks like a slow mover, and every figure downstream of it — forecast, safety stock, reorder point, GMROII — inherits the error.
Every night, for every SKU at every location, as part of a batch process that also recalculates safety stock, reorder points, days of cover, stockout risk, margin and GMROII. Nothing needs to be requested or refreshed manually.
A forecast is produced as soon as any demand history exists, but the number of days of history is held alongside it and the AI states confidence accordingly. Five days produces a hedged recommendation; a full year produces a confident one.
The two models currently in production are a moving average and a trend-adjusted moving average. Neither is a seasonal decomposition model. The trend adjustment responds to a change in direction quickly, which covers a large proportion of real seasonal movement in practice, but a business with pronounced annual seasonality should test this specifically against its own history rather than assume it.
Demand is recorded on the date stock needs to leave the location, not the date the order was taken. For a wholesale order dispatched ten weeks after it is placed, the demand and the revenue are both recognised at dispatch, because that is the date that determined whether stock had to be available.
No. Moving stock from a warehouse to a store is not demand at the warehouse. Demand is recorded at the location that actually fulfils the customer order, which prevents internal movement from inflating the forecast at the sending location.
Yes. Inventory moving out of a location into a manufacturing run is a demand signal, recorded at the point the stock moves, so component forecasting reflects production as well as sales.
Yes. All forecasting and replenishment fields are available conversationally through the AI assistant and via API, including for Power BI, so a buying team can have a morning dashboard as well as a conversation. The numbers are identical because both read the same pre-computed fields.
All our sales, support and development team are located in Hereford and Cheltenham in the U.K. Please submit the contact form and we will contact you within the same business day.