Demand Forecasting Methods
for Ecommerce: A Practical Guide
How to forecast demand when you sell online: the four methods that matter — moving averages, exponential smoothing, seasonal indices, and stockout adjustment — explained with a worked per-SKU example and an honest note on what each gets wrong.
By Replenagise · Updated 18 July 2026 · 8 min read
What demand forecasting actually has to answer
A demand forecast answers one question per SKU: how many units will this product sell over the next buying period? Everything downstream — reorder points, safety stock, purchase orders, cash planning — inherits its accuracy from that number.
Ecommerce demand data is messy in specific ways: short histories for new products, seasonality that dwarfs the trend, marketing spikes that look like demand shifts, and stockout gaps that read as “no demand” when they were really “no stock”. The methods below are ordered from simplest to most robust against exactly those problems.
The four methods that matter
1. Simple moving average
Average the last N periods: sold 120, 140, 130 over three months → forecast 130. Easy and stable, but blind to trend and seasonality — it lags every turn in demand by design. Fine for flat, boring C-class SKUs.
2. Weighted / exponential smoothing
Weight recent periods more heavily so the forecast turns when demand turns: e.g. 50% last month, 30% the one before, 20% the one before that. Exponential smoothing does this continuously with one tunable parameter. Responsive, but can chase noise — a one-off promo spike becomes next month’s “demand”.
3. Seasonal indices
Compute how each month typically compares to the average (November = 1.8×, February = 0.6×), de-seasonalise the history, forecast the underlying level, then re-apply the index. This is the difference between buying for December in October — and discovering December in December.
4. Stockout adjustment
The step almost everyone skips: days you were out of stock are not days of zero demand. Sold 450 units over 90 days but stocked out for 15? True velocity is 450 ÷ 75 days in stock. Skip this and every stockout teaches your forecast to order less — the doom loop that turns one stockout into a chronic one.
Simple moving average, in depth
The moving average is the workhorse: take the last N periods and average them. Sold 120, 140 and 130 units over the last three months? Forecast 130 for next month. The only decision is the window length — shorter windows (3 periods) react faster but bounce around; longer windows (6–12 periods) are stable but slow to notice change.
Its two blind spots are structural. First, every period in the window counts equally, so a demand shift three months ago weighs the same as last week — the forecast lags every turn by roughly half the window length. Second, it has no concept of seasonality: average January–October and you will buy for November as if it were a normal month.
Use it for stable, low-value C-class SKUs where forecast error is cheap, and as the baseline other methods must beat. If a fancier method cannot outperform a 3-month moving average on your data, it is not earning its complexity.
Weighted averages and exponential smoothing, in depth
Weighted moving averages fix the equal-weight problem by favouring recent periods — say 50% on last month, 30% on the month before, 20% on the one before that. Using the same 120/140/130 history, the weighted forecast is (130 × 0.5) + (140 × 0.3) + (120 × 0.2) = 131, and if demand jumps next month the forecast follows at half the lag of the simple average.
Exponential smoothing is the continuous version: new forecast = α × latest actual + (1 − α) × previous forecast. One parameter, α between 0 and 1, sets the memory — α = 0.3 is a common ecommerce default; higher chases recent sales harder, lower smooths more. Under the hood it is an infinite weighted average with exponentially decaying weights, which is why it needs no window at all.
The failure mode is chasing noise: one viral spike or a flash-sale weekend becomes next month’s “demand” if α is aggressive. Pair recency weighting with a sense-check against events you know about (promotions, listings changes) — or use software that separates promo lift from baseline demand.
Seasonal indices, in depth
A seasonal index expresses how each month typically compares to an average month: November at 1.8 means November usually sells 80% above average; February at 0.6 means 40% below. Compute indices from at least a full year of history (two is better), by dividing each month’s sales by the year’s monthly average and averaging across years.
To forecast with them: de-seasonalise history (divide each month by its index), forecast the underlying level with a moving average or smoothing, then re-apply the target month’s index. Example: de-seasonalised level of 140 units and a December index of 1.7 gives a December forecast of 238 — while raw averaging of the preceding months would have suggested ~140 and left you six weeks short of stock.
The practical trap is data volume: per-SKU indices are noisy for products with thin history, so compute indices at category level and apply them to SKUs — which is exactly what Replenagise does automatically when a SKU’s own history is too short to trust.
Stockout adjustment, in depth
This is the step that separates honest forecasts from optimistic ones. Sales history records what you sold, not what you could have sold — and every out-of-stock day writes a zero into the record that the averages read as “no demand”. The correction is simple: velocity = units sold ÷ days actually in stock, not days elapsed.
Example: 450 units sold over 90 days looks like 5/day. But if the SKU was out of stock for 15 of those days, true velocity is 450 ÷ 75 = 6/day — 20% higher. Skip the adjustment and your next buy is 20% light, which produces the next stockout, which drags the average down further: the doom loop that turns one stockout into a chronic one.
The same logic extends to partial availability: days when only one variant or one channel was live under-count demand too. This is tedious to track by hand — and it is precisely the bookkeeping forecasting software should do for you on every SKU.
How to measure whether your forecast is any good
Two numbers tell you most of what you need. MAPE (mean absolute percentage error) — the average of |forecast − actual| ÷ actual — measures overall miss size; under 20% is solid for ecommerce SKU-level forecasts, and fast-moving SKUs should do better than the long tail. Bias — the average of (forecast − actual) — tells you the direction: persistent positive bias quietly builds overstock, persistent negative bias schedules stockouts.
Measure at the level you buy at. A portfolio-level MAPE of 10% can hide SKU-level chaos that nets out in the total; if you order per SKU, error per SKU is the number that costs money. And always compare against the naive baseline (last period = next period) — a method that cannot beat naive is decoration.
Finally, keep an error log: every big miss is either noise (accept it), a signal the method missed (fix the method), or an event nobody recorded (fix the process). Six months of that discipline improves forecasts more than any algorithm swap.
Which demand forecasting method should you use?
Layer them rather than choosing one: stockout-adjust the history first (always), apply seasonal indices where a year or more of history exists, and forecast the underlying level with recency weighting. That combination — not any single method — is what handles ecommerce data’s short histories, marketing spikes and seasonal swings.
Reserve heavier statistical models for where they pay: long, clean, high-volume histories. For a typical ecommerce catalogue, the layered approach above captures most of the achievable accuracy, and consistency across thousands of SKUs matters more than sophistication on ten of them.
That consistency is the real argument for software. Replenagise runs the full stack — stockout adjustment, seasonal indices, recency-weighted velocity — per SKU, channel and store, recalculated as every sale lands, and feeds the result straight into reorder points and purchase orders. See how it works on the demand forecasting software page.
A worked example — and what to automate
Take one SKU: 90-day history shows 450 units sold, 15 days out of stock, and a category seasonality index of 1.4 for the coming period. Stockout-adjusted velocity: 450 ÷ 75 = 6/day. Seasonal adjustment: 6 × 1.4 = 8.4/day expected. Over a 30-day buying period that is a forecast of ~252 units — versus the 150 a naive moving average of raw history would have produced. The gap between those two numbers is a stockout you did or did not have.
Doing this once is arithmetic; doing it weekly for two thousand SKUs across channels and stores is a job for software. Replenagise runs stockout-adjusted, seasonality-aware forecasts per SKU, per channel, and per store from live Shopify and Linnworks data — and feeds them straight into reorder points, safety stock, and purchase orders, which is the only reason to forecast in the first place.
The forecast feeds the buffer — see the safety stock formula — and the buy signal — see sell-through rate. Or skip the spreadsheets: demand forecasting software runs the full method stack for you, and inventory forecasting software turns it into stock requirements.
Demand Forecasting — FAQs
How do you forecast demand for ecommerce?
Start from per-SKU sales history, correct it for stockout periods (out-of-stock days are not zero-demand days), detect and apply seasonality, then project forward with a trend-aware average such as exponential smoothing. Turn the forecast into reorder points and order quantities — a forecast that never becomes a PO is just a chart.
What is the best demand forecasting method?
For most ecommerce catalogs: stockout-adjusted velocity with seasonal indices and a recency-weighted average — the combination Replenagise runs per SKU automatically. Simple moving averages suit stable low-value SKUs; heavier statistical models only pay off with long, clean histories, which ecommerce rarely has.
How do you forecast demand for new products with no history?
Borrow, then correct: seed the forecast from a comparable existing product or category curve, weight early sales heavily as real data arrives, and review after the first few weeks. Expect wider error bands — and size safety stock accordingly until the SKU earns its own history.
Why do forecasts under-order after a stockout?
Because raw history records a stockout as zero sales, the average drops, so the next order is smaller — making the next stockout more likely. Stockout-adjusted velocity (units sold ÷ days actually in stock) breaks that loop, and is built into every Replenagise forecast.
Forecasts That Become Purchase Orders
Stockout-adjusted, seasonality-aware forecasts on every SKU — flowing straight into reorder points and POs for Shopify and Linnworks.