Sales velocity forecasting for Shopify, explained with real math
Every inventory decision you make rests on one question: how fast is this product selling? Answer it well and reorder points, purchase quantities, and cash planning all fall into place. Answer it badly and every downstream number is confidently wrong.
The frustrating thing about most forecasting tools is that they treat the answer as a secret. A dashboard says "order 84 units" and offers no way to see why. This guide walks through the actual math of sales velocity forecasting, the kind you can reproduce in a spreadsheet, because for a small merchant the ability to check the number is worth more than a fancier model you have to take on faith.
The base number: units per day
Sales velocity is units sold divided by days:
Velocity = units sold ÷ days in window
Pull units sold per SKU from Shopify's Analytics reports. The only decision is the window, and that decision matters more than it looks.
Take a SKU with this history:
- Last 30 days: 120 units sold, so 4.0 per day
- Last 60 days: 210 units sold, so 3.5 per day
- Last 90 days: 270 units sold, so 3.0 per day
All three numbers are true, and they disagree. The 30 day figure says demand is picking up. The 90 day figure smooths out a possible blip. If you forecast from the 90 day number alone you will under-order into a rising trend; from the 30 day number alone, one good week can send you over-ordering.
Blending windows: the weighted average
The standard fix is to use all three windows and weight the recent ones more heavily. For example, with weights of 50 percent, 30 percent, and 20 percent:
(4.0 × 0.5) + (3.5 × 0.3) + (3.0 × 0.2) = 2.0 + 1.05 + 0.6 = 3.65 units per day
The blended figure leans toward the recent trend without letting it dominate. The exact weights are a judgment call: heavier on the 30 day window for fast-moving trendy products, heavier on the 90 day window for steady staples. What matters is that the weights are visible and fixed, so the same inputs always produce the same output and you can recompute it yourself.
The stockout-days correction
Here is the error that quietly ruins more forecasts than anything else: counting days when the product could not be sold.
Suppose that same SKU was out of stock for 6 of the last 30 days. You sold 120 units, but you only had 24 days in which selling was possible:
120 units ÷ 24 in-stock days = 5.0 per day, versus the naive 4.0
The naive number understates true demand by 20 percent. And the error compounds: a stockout lowers your measured velocity, which lowers your reorder point, which makes the next stockout more likely. The correction is conceptually simple, divide by in-stock days instead of calendar days, but it requires knowing which days each SKU was unsellable, which Shopify's standard sales reports do not tell you. In a spreadsheet you end up tracking it by hand; this is one of the places where software that watches your inventory levels daily has a genuine edge.
Seasonality: the same-month-last-year adjustment
A velocity blended from the last 90 days still assumes the next month will look like the recent past. For seasonal products, it will not. Candle sales in October say little about December.
The most checkable seasonal method is the same-month-last-year ratio. Take the month you are forecasting into, look at what the SKU (or its category) sold in that month last year, and compare it to last year's average month:
- December last year: 130 units
- Average month last year: 100 units
- Seasonal factor: 130 ÷ 100 = 1.3
Then apply it to the blended velocity. Forecasting December demand for our example SKU:
3.65 per day × 30 days × 1.3 = 142 units
Without the adjustment the forecast would be 110 units, and the missing 32 units would have been your December stockout. The method has honest limits: it needs at least a year of history, and it assumes this year's season resembles last year's. But when it is wrong, you can see exactly why, look at both inputs, and override with judgment.
Why checkable math beats black boxes for small merchants
There are more sophisticated forecasting methods than this: exponential smoothing, regression models, machine learning demand prediction. For a large retailer with a data team, they earn their complexity. For a small store, a transparent model has three practical advantages.
You can audit it. When a suggestion looks strange, you trace the inputs in minutes. Bad data (a wholesale order polluting the velocity, a mislabeled stockout) jumps out. With a black box, a strange suggestion leaves you choosing between blind trust and ignoring the tool entirely, and either choice makes the tool pointless.
You can override it intelligently. You know things no model does: the influencer post going live Tuesday, the supplier price rise pushing a pre-buy. Adjusting a formula you understand is straightforward. Second-guessing an opaque prediction is gambling.
You stay in control of the consequences. A forecast is a bet with your working capital. Small stores cannot absorb a bad automated bet the way large ones can, so the human placing the bet needs to see the reasoning.
This philosophy is built into Restockly, which we build: it forecasts velocity over 30, 60, and 90 day windows as a transparent weighted average with the same-month-last-year seasonal adjustment described above, and every suggested number can be checked by hand against the sales data it shows you. It is launching soon for Shopify stores, free under 50 SKUs, and you can read more at useadvira.com/restockly.
From velocity to action
A good velocity number is the input; the output is a reorder trigger. The formula is velocity times lead time plus safety stock, and we walk through it with a full worked example in our guide to setting reorder points for your Shopify store.
Start simple. Compute the three-window blend for your top ten SKUs, correct for any stockout days you know about, and note which products are seasonal. That single spreadsheet hour will make your next purchase order measurably more accurate, and every number in it will be one you can defend.