Inventory

Inventory Forecasting for Shopify: Build a SKU Forecast You Can Check

Inventory forecasting answers one question for each SKU: will the stock you have plus the stock on its way cover what you expect to sell? The demand forecast is the first half of that answer. This guide builds it, checks it, and turns it into a week-by-week stock projection.

Ecommerce demand forecasting estimates how many units of one SKU you expect to sell in a defined future window. It does not decide the purchase order, the reorder point, or the safety buffer. Those are separate calculations that consume the forecast as an input.

The useful output is a number you can check: expected units for the next 4, 8, or 12 weeks, plus a short note on what you adjusted and why. If that number is wrong in a consistent direction, buying against it will stock you out or leave you with excess, no matter how carefully the purchase order is written.

What a SKU demand forecast predicts, and what it does not

A SKU demand forecast answers one question: how many net units of this variant will customers try to buy over the next planning period? It covers one product variant, one sales channel mix, and one horizon you can later compare to actuals.

It does not tell you when to place the next order, how much buffer to hold, or which supplier to use. Reorder timing lives in the Shopify reorder point formula. Buffer sizing lives in the safety stock calculation. The weekly buy list and purchase-order cadence live in inventory replenishment for Shopify.

  • Predicts: expected unit demand for a named SKU and a named period.
  • Does not predict: revenue, margin, ad performance, or whether a new product will become a bestseller.
  • Does not include: lead time, on-hand stock, or units already on a purchase order. Those belong in the buying step.
  • Should be checked: against later actual sales, not against whether the order arrived on time.

Retailers lose an estimated $1.77 trillion a year to inventory distortion, according to IHL Group's 2023 research, reported by Supply Chain Dive. That figure mixes stockouts and overstocks across global retail, so it is not a Shopify benchmark. It is a reminder that a bad demand number shows up twice: missed sales, then leftover units you have to discount.

Before the four steps below, you need a weekly net-unit series by variant and a way to mark weeks the SKU could not be purchased. The windows and review rhythm later in this guide are starting points to adjust to each SKU's sales pattern, not fixed rules.

  1. Gather sales history and mark stockout-distorted weeks.
  2. Adjust the rate only for seasonality, promotions, and launch changes you can name.
  3. Check forecast error against later unconstrained sales.
  4. Pass the checked forecast into reorder and replenishment. Do not turn it into an order quantity on this page.

Step 1: Gather sales history and mark stockout-distorted periods

Pull net units sold by variant, not storewide revenue and not gross orders. Returns and cancellations are demand that did not stick. Shopify's Sales by product report can be grouped by product or variant and filtered by date. Export a weekly series for the SKUs you actually reorder.

A trailing average is a starting rate, not a forecast. For a stable SKU, start with 8 to 12 recent weeks of net units and divide by the number of weeks the item was actually available to buy, then shorten or lengthen that window to fit how steadily the SKU sells. A single recent week is often too noisy to treat as the rate. A full year without any seasonal split hides the month you are about to enter.

Treat zero-sales weeks as missing data when the SKU was unavailable

A week at zero units is real demand only if the variant was available. If it was sold out, the zero is a stock constraint, not a customer preference. Averaging those weeks into the rate understates demand and then understates the next buy.

Shopify's inventory history and the product's availability over time are the practical way to spot those weeks. Flag any week where available quantity hit zero, or where you know a location was out even if another location still showed stock. Do not invent the lost sales. Exclude the constrained week from the average, or replace it with the median of nearby unconstrained weeks and label the replacement as an estimate.

  • Use net units, after returns and cancellations, from a product or variant sales export.
  • Prefer weekly buckets for irregular order patterns. A single day often overreacts to one wholesale or influencer order.
  • Drop or replace weeks when the SKU could not be purchased. Note the rule you used.
  • Separate a one-off bulk order from repeat retail demand before you annualize it.
  • For a recent launch, treat a short history as too thin for a seasonal forecast and use a short trailing rate plus a written assumption. Under 8 weeks of sales is a starting cutoff to adjust to the SKU, not a fixed rule.

Worked example, labeled as hypothetical. A serum sold 40, 36, 0, 0, 44, and 38 net units over six weeks. The two zeros were full stockouts. The unconstrained average is (40 + 36 + 44 + 38) / 4 = 39.5 units per week, not 158 / 6 = 26.3. Using 26.3 as the base rate would understate the next month by roughly a third before any promo adjustment.

Step 2: Adjust for seasonality, promotions, and launch changes

Apply adjustments only for events you can name. A flat uplift because Q4 is busy is not a forecast adjustment. Write the base weekly rate, the factor, the weeks it applies to, and the source of the factor.

Base weekly rate times seasonal index times promo factor equals adjusted weekly demand. Sum the adjusted weeks inside your horizon to get the forecast. Keep the factors visible so the next review can tell a bad base rate from a bad promo guess.

Seasonal index from the same SKU, or a close substitute

If you have at least one full prior year, divide that SKU's units in the upcoming month by its average monthly units last year. A December that was 2.4 times the monthly average gets an index of 2.4 for those weeks, not a copy of last December's raw units. Raw units mix last year's ad spend and last year's stockouts into this year's plan.

If the SKU is new, borrow the index from the closest product that shares season, price band, and use case. Mark it as borrowed. An imperfect, labeled index is easier to correct than a silent flat forecast on a product that triples in December.

Promotions, bundles, and demand shifts

  • A planned discount or sitewide sale: use the lift from the last comparable promo on this SKU, or on a similar SKU, and limit it to the promo dates.
  • A bundle or gift-with-purchase: add the component units the offer will pull, on top of standalone sales. Do not let the bundle hide inside the average.
  • A new ad push or creator post: raise the rate only for the flight length, and set a review date the week after it ends so the spike does not become the new baseline.
  • A price increase or a product-page change: do not assume last year's seasonal index still holds. Shorten the horizon until you have a few clean weeks.

Continue the serum example as a hypothetical, not a measured store result. Base rate 39.5 units per week. Next 8 weeks include 6 normal weeks (index 1.0) and 2 promo weeks. In this example, the last comparable promo lifted the product by 40%, so the promo factor is 1.4. Forecast = (6 x 39.5 x 1.0) + (2 x 39.5 x 1.4) = 237 + 110.6 = 348 units over 8 weeks, about 43.5 units per week. That 348 is the example demand estimate. It is not an order quantity.

Step 3: Check forecast error before anyone buys against it

A forecast you have never compared to later sales is a guess with a spreadsheet around it. Before a number drives cash, check the last completed period: what you predicted versus what actually sold while the SKU was available.

The calculations for percent error and directional bias live in the forecast accuracy formula. Run that check on the SKU, or on a small group of similar SKUs, and read the result before you hand the new estimate to purchasing.

Use this operating rule, not a promise of a specific error rate. If recent error is small and bias flips sign from period to period, the method is usable for that SKU. If you have been consistently low, fix the base rate or the stockout exclusion before you buy the next cover, and mark the handoff directionally low. If you have been consistently high, cut the promo factor or stop treating a launch spike as steady demand, and mark the handoff directionally high. If you have no completed forecast to compare, label the number as untested and use a shorter horizon.

  • Store the forecast you issued, the date, the horizon, and the adjustments. Do not overwrite it when actuals arrive.
  • Compare only unconstrained actuals. A stockout in the test period makes the forecast look high when demand was never observed.
  • Start with a weekly review for fast movers and a monthly review for slower SKUs, then change that cadence to match how quickly each SKU's rate moves. A monthly rebuild on a product that sells out in ten days is already late.
  • Do not chase one bad week. Change the method when the same miss repeats for two review cycles.

On the serum, still as a hypothetical, suppose the prior 8-week forecast was 300 units and unconstrained actuals were 360. The forecast was low by 60 units, about 17% of actual. That is a bias signal in the example, not a reason to add a random pad. Look first at whether two stockout weeks were still inside the old average. If they were, rebuild the base rate the way the example above does, then re-issue the forecast.

Forecast low-volume SKUs at the product level

A weekly rate breaks down on a SKU that sells a few units a month. One order moves the average, and most weeks show zero. Many Shopify catalogs are full of these variants, so the method above needs an adjustment for them.

Forecast the product, then split it across variants. Suppose a hypothetical hoodie sold 60 units over 12 weeks, or 5 a week, and its sizes made up 10%, 40%, 30%, and 20% of sales. An 8-week product forecast of 40 units becomes 4 small, 16 medium, 12 large, and 8 extra large. The product total is steadier than any single size, and the split keeps your size curve visible.

For a SKU that sells in bursts, track the size of each sale and the gap between sales. If a SKU sells about 4 units roughly every 4 weeks, its rate is about 1 unit a week, even though most weeks read zero. That is the idea behind Croston's method, which treats order size and the time between orders as two separate series. Use longer buckets for these items, such as months, and review them less often.

Turn the demand forecast into an inventory forecast

Inventory forecasting takes the demand number one step further. Start with stock on hand, add confirmed inbound units, and subtract forecast demand week by week. The result shows the first week that stock falls too low.

Continuing the serum example, still hypothetical: 200 units on hand, 150 units confirmed to arrive in week 5, and the same 8-week forecast with the two promo weeks in weeks 5 and 6.

WeekForecast demandInboundEnding stock
139.50160.5
239.50121
339.5081.5
439.5042
555.3150136.7
655.3081.4
739.5041.9
839.502.4

The table tells you two things. Week 4 ends with about a week of stock, so a late shipment would hit you right before the promo. Week 8 ends almost empty, so the next delivery has to land before then. If a SKU's projection stays high for the whole horizon, you may be holding excess inventory and should hold back the next buy.

This projection is a check on timing. The order quantity still comes from the reorder and replenishment steps below.

Step 4: Pass a checked forecast into reorder and replenishment

Once the demand estimate is checked, stop. Do not rebuild reorder math on this page. Hand purchasing three things: expected units over the planning horizon, the weekly rate behind that total, and a confidence note (tested, directionally low, directionally high, or untested).

The reorder workflow multiplies a demand rate by the supplier's lead time to estimate lead-time demand, then adds safety stock. That arithmetic, and the Shopify fields it uses, is owned by the reorder point guide. How often you review the catalog, which SKUs get cash first, and how you cut a purchase order is owned by inventory replenishment.

Per-SKU sales velocity, on-hand stock, and projected cover are the live checks that the forecast is drifting. Seasonality and supplier lead time still need a merchant note, because the store does not know that a creator post starts Thursday or that the factory closes for two weeks. Stock intelligence keeps velocity and cover current so you can see when the issued forecast and the latest sales rate have split. It does not replace the adjustment log or the accuracy check.

Mistakes that make the demand number unusable

  • Averaging stockout weeks into the sales rate, then treating the low rate as weak demand.
  • Forecasting revenue or orders instead of net units by variant.
  • Copying last year's units instead of last year's seasonal shape.
  • Letting a promo or creator spike reset the baseline with no end date.
  • Changing the forecast after the period starts and then scoring accuracy against the revised number.
  • Turning this page's demand estimate into a reorder quantity without the separate lead-time and buffer steps.

How to tell the forecast step worked

You are done with demand forecasting for a SKU when three artifacts exist. A weekly net-unit series with stockout weeks marked. An adjusted unit total for a named horizon, with each factor written down. A comparison of the previous forecast to later unconstrained sales, using the accuracy and bias method linked above.

If any of those three is missing, do not treat the number as ready for a purchase order. Fix the missing piece, then pass the rate and its confidence note to the replenishment workflow.