How to Forecast Seasonal Inventory for Shopify
How to forecast inventory for products with a real seasonal pattern — building a seasonal index from past years and adjusting for growth and trend.
Cedar & Fig, 250g sells at its usual five units a day for most of the year, then climbs hard every November and drops back in January. A reorder point built from a rolling ninety-day average never sees this coming: the average doesn't rise until November's spike is already inside the window, by which point the shelf has already been thin for weeks — and it stays elevated well into the new year because December's rush is still sitting inside the same average.
That's not a data problem, it's a method problem. A moving average treats every observation the same regardless of the calendar; a genuinely seasonal product needs a forecast that knows what month it is. This is different from the one-off spike a promotion creates (see how promotions affect inventory forecasting), because a seasonal pattern repeats on its own, year after year, without you doing anything to trigger it. See our complete guide to Shopify inventory forecasting for the full process this fits into.
What Makes Demand Seasonal
Standard time-series decomposition splits demand into a trend, a cyclical component, a seasonal component, and irregular noise, treating the seasonal piece as a repeating factor tied to the calendar rather than the underlying growth or the random ups and downs. Two versions of the model exist: additive, where the swings around the trend stay roughly constant regardless of how big the trend has grown, and multiplicative, where the swings scale with the current level of sales — the more common shape for retail sales measured in units, since a bigger store usually has a bigger November too, not just the same fixed extra amount.
The harder part in practice is telling a genuine seasonal pattern from a fluke. One unusually strong November could be a real, recurring pattern, or it could be a single viral moment or an early cold snap that happened to land that year. A single year can't tell the two apart, which is why building an index properly needs more than one year of data, covered below.
Building a Seasonal Index
A seasonal index expresses how much a given period typically runs above or below the deseasonalized average — a factor, not a percentage-point offset. An index of 1.20 means that period typically runs 20% above baseline; an index of 0.5 means it typically runs at half the baseline rate.
Seasonal index for a period = Average demand in that period across past years ÷ Average demand in a normal period in those same years
The full statistical version, the ratio-to-moving-average method, first strips out any underlying trend with a centered moving average before computing the ratio, which matters more the faster a store is growing (more below). Without much of a growth trend, comparing straight to your normal-period average is close enough to work with.
Cedar & Fig, 250g holds close to 150 units a month outside its season — the same five-a-day velocity behind its 90-unit reorder point, over a 30-day month. Averaged across your last two Novembers, it sold 375 units. Seasonal index for November = 375 ÷ 150 = 2.5.
units/month, normal season
units/month, average November
November seasonal index
Multiply your current baseline forecast by the index to get a seasonally-adjusted number: at 150 units a month normal velocity, November's forecast becomes 150 × 2.5 = 375 units — not the plain average a flat moving average would otherwise hand you.
Minimum Data Needed
You need at least one full year of history before a seasonal index means anything — you can't know how November behaves until you've observed one. A single year gives you one data point per period, which can't tell a genuine recurring pattern from a one-off cause: an early cold snap, a single viral post, a stockout that happened to depress the following month. Averaging two or more years, as in the worked example above, is what the standard technique for building an index is built to do — cancel out that one-year noise by averaging each period's ratio across multiple years.
No source we could find puts a firm number on exactly how many years is "enough," and any specific rule you see elsewhere isn't backed by a primary source either. More history generally means more confidence; there's no threshold where an index suddenly becomes reliable.
Adjusting for Growth
A seasonal index calculated as a straight ratio has a blind spot: it assumes the baseline it was measured against hasn't moved. If your store has grown since those past Novembers, applying the old index to the old baseline understates this year's peak — the multiplicative model behind seasonal indices treats seasonality as proportional to the current level of the series, not a fixed number of extra units.
The fix is applying the index to your current baseline, not the historical one it was derived from. If Cedar & Fig's non-seasonal velocity has grown from 150 units a month to 180 since those two Novembers, this year's forecast is 180 × 2.5 = 450, not the stale 375 the historical average alone would suggest.
Be careful projecting growth forward in a straight line, too. A trend fitted to a few months of ramp-up keeps extrapolating that same rate even after it naturally levels off — check your recent velocity is still actually climbing before you assume it is.
Doing this by hand means pulling multiple years of monthly sales per SKU, computing a ratio for every period, and rebasing every index against current velocity each time it changes — not a spreadsheet most people keep current past the first year, across a catalog with more than a couple of seasonal lines. StockCue derives a seasonal index from a store's own order history automatically once a SKU has twelve months behind it, and applies it to whichever month you're buying for — damped and capped, so one unusually strong December doesn't triple January's order, on every plan including Free.
Without 12 Months Yet
If you don't have a full year of history on a SKU, nothing above works yet — you can't index a period you've never observed. That's a narrower, different problem: see forecasting inventory for new products with limited sales history for how to estimate demand until you have enough for a real index.
In the meantime, the closest workaround is comparing the new product to an older seasonal item in the same category and assuming a similar shape, scaled to size — the same analogous-product reasoning new-product forecasting relies on generally, not a seasonal index in its own right.
STOCKCUE
StockCue builds a seasonal index from your store's own order history once a SKU has twelve months behind it, and reapplies it automatically as your baseline velocity changes. Free for your first 50 SKUs.
Install StockCue on Shopify →Frequently Asked Questions
What is a seasonal index in inventory forecasting?
A seasonal index is a factor showing how much a given period typically runs above or below your normal, deseasonalized demand. An index of 1.5 means that period usually sells 50% above baseline; an index of 0.5 means it usually sells at half the baseline rate. Multiplying your current baseline forecast by the index for that period gives a seasonally-adjusted forecast.
How much sales history do you need to forecast seasonal demand?
At minimum, one full year, since you can't build an index for a period you've never observed. Beyond that, no universally agreed number of years exists: two or more lets you average out one-off spikes and dips, and more history generally means more confidence, but there's no fixed cutoff where an index suddenly becomes reliable.
How do you forecast seasonal demand for a fast-growing store?
Apply the seasonal index to your current baseline velocity, not the older baseline it was originally calculated against. A straight ratio calculated against past years' sales will understate this year's peak if the store has grown since then, because it's still measuring the old level rather than the current one.
What should you do if you don't have a full year of sales history yet?
Treat it as a different problem than seasonal forecasting rather than trying to force an index onto data that doesn't exist yet. Compare the product to an older, similar item in your catalog as a rough guide, and switch to a real seasonal index once you have a full year of the new product's own history.