
SKU-Level Demand Forecasting for E-commerce
A category forecast says "pet toys sell 3,000 units a month." That is true and completely useless for placing a purchase order.
Which pet toys? The rope toy that sells 47 a day, or the squeaky bone that sells 3 a week? The plush hedgehog that spikes every December, or the chew ring with no discernible pattern at all?
Category averages bury the signal. Every reorder decision you make happens at the SKU level - one product, one supplier, one lead time, one purchase order line. Your forecast needs to match that resolution.
What SKU-Level Demand Forecasting Actually Is
SKU forecasting means each product variant gets its own demand model. Not an allocation from a top-down number. Not a percentage of a category total. Its own history, its own pattern classification, its own prediction.
The difference matters more than most sellers realize. I have seen catalogs where the top 5% of SKUs generate 60% of revenue, while the bottom 30% sell fewer than 10 units a month. Forecasting those two groups with the same model and the same parameters is like using the same wrench on every bolt in your house. Technically a wrench. Practically wrong.
| Forecast Level | What You Get | What You Miss |
|---|---|---|
| Category | Total units for a product group | Which specific SKUs need reordering |
| Brand | Aggregate demand per brand | Mix shifts between products |
| SKU | Per-product demand prediction | Nothing - this is the ordering unit |
The only level that maps directly to a purchase order line is the SKU.
Why Category Forecasts Break Down
Here is a real scenario. You sell kitchen gadgets across 200 SKUs. Your category forecast says 8,000 units next month. You have been selling about 8,000 a month for six months. Looks stable.
But inside that 8,000:
- Your garlic press (SKU-1042) sells 40/day and is accelerating
- Your avocado slicer (SKU-1087) sold 800 last month but dropped to 200 this month because the TikTok trend died
- Your silicone spatula set (SKU-1103) is seasonal and about to spike for holiday baking
- 47 SKUs sold zero units last month
The category total stayed at 8,000 because the garlic press growth offset the avocado slicer collapse. A category forecast sees stability. SKU-level forecasting sees four completely different demand patterns that need four different responses.
This is why I get twitchy when sellers tell me they forecast at the category level. You are averaging away the information you actually need.

SKU Forecasting Analysis: Matching Models to Patterns
Not every SKU behaves the same way, which means not every SKU should get the same forecast model. This is the part that spreadsheets make painful and most tools get wrong. Dedicated SKU-level demand forecasting software automates the routing, but the logic below is the same whether a tool runs it or you do it by hand.
The four demand patterns
Steady demand. Consistent daily volume with low variance. Your best-sellers, your staples. A weighted moving average or exponential smoothing handles these well. Think: 42 units/day, standard deviation of 8.
Seasonal demand. Predictable spikes tied to calendar events. Holiday products, back-to-school items, summer gear. These need time-series decomposition that separates the seasonal component from the trend. A moving average will always lag behind the ramp-up and overreact to the cooldown.
Intermittent demand. Long gaps between sales, then a burst. Specialty parts, high-ticket items, niche accessories. Standard models fail here because they treat zero-sale days as "low demand" instead of "no demand event occurred." Croston's method or SBA (Syntetos-Boylan Approximation) splits the problem into two questions: how often does this sell, and how much when it does?
Variable demand. Unpredictable swings without a seasonal pattern. Trending products, items sensitive to external events. These are the hardest to forecast. Higher safety stock compensates for what the model cannot predict.
| Pattern | % of Typical Catalog | Best Model | Expected MAPE |
|---|---|---|---|
| Steady | 30-40% | Exponential smoothing (ETS) | 10-20% |
| Seasonal | 10-20% | Time-series decomposition | 15-30% |
| Intermittent | 20-35% | Croston's / SBA | 35-50% |
| Variable | 15-25% | ETS with higher damping | 25-40% |
That MAPE column matters. If you are beating yourself up over 40% accuracy on intermittent SKUs, stop. Sparse demand is inherently noisy. The goal is not perfection - it is being close enough that your reorder point keeps you in stock without drowning in excess.
Forecasting Methods Side by Side
There are roughly four method families worth knowing about. Each one suits different demand patterns, different catalog sizes, and different levels of effort you want to spend tuning models.
| Method | How it works | Best for | Data needed | Watch out for |
|---|---|---|---|---|
| Moving average (simple or weighted) | Averages the last N weeks of sales. Weighted versions give more weight to recent weeks | Steady SKUs, small catalogs, sellers learning the basics | 8-13 weeks | Lags on trend changes. Reacts slowly to ramps and dips. Useless on seasonal or intermittent SKUs |
| Exponential smoothing (ETS / Holt-Winters) | Smooths sales history with weights that decay exponentially toward older periods. Holt-Winters adds trend and seasonal components | Steady and seasonal SKUs. Most workhorse e-commerce catalogs | 13-52+ weeks | Sensitive to outliers. Needs damping parameters tuned. Breaks on intermittent demand |
| Croston's method / SBA | Splits intermittent demand into two streams: inter-demand interval and demand size. Forecasts each separately | Specialty parts, slow movers, high-ticket low-frequency items | 26+ weeks of sparse data | Biased upward in original Croston's. Use SBA (Syntetos-Boylan Approximation) for the bias correction |
| Machine learning (gradient boosting, neural nets) | Trains a model on sales history plus external features: price, promotion, weather, day-of-week, competitor presence | Large catalogs with rich feature data and engineering resources | 52+ weeks, multiple features per SKU | Overkill for most sellers. Black-box risk. Cross-validation and feature engineering are real work. Often loses to ETS on steady SKUs |
The honest answer to "which method should I use?" is "the one that fits the SKU." A catalog of 500 active SKUs probably needs three of these running at the same time, with each SKU routed to the right one based on its demand pattern.
The trap most sellers fall into is picking one method (usually a weighted moving average, because it is the easiest) and applying it everywhere. The steady sellers do fine. The seasonal SKUs miss every ramp. The intermittent SKUs get chronically overstocked. The aggregate forecast still looks reasonable because the errors offset each other in totals. Per-SKU, the damage is real and ongoing.
ML deserves its own caveat. I get asked about it constantly because it sounds modern, and yes, it can outperform ETS on certain SKUs given enough data and features. But on a steady-demand bamboo cutting board, a well-tuned exponential smoothing model is going to match or beat a gradient-boosting model nine times out of ten, with a hundredth of the maintenance burden. ML pays off when you have promotional calendars, price elasticity data, and external signals worth feeding the model. Without those, you are training a neural network to approximate exponential smoothing the hard way.
The Minimum Data Problem
Every forecast model needs history. How much depends on the pattern.
Steady SKUs work with 13 weeks. That is enough data points to establish a reliable average and measure variance. Less than 8 weeks and you are basically guessing.
Seasonal SKUs need 52 weeks minimum. Without a full annual cycle, the model cannot separate "this product is growing" from "this product is seasonal and you are looking at the up-ramp." I have watched sellers double-order a product in October based on 6 months of accelerating sales, only to discover it was a Christmas item and January brought returns, not reorders.
New products are the hardest case. Under 8 weeks of data, I would not trust any forecast model. Use a category proxy instead - find a similar product that has been selling for a year and borrow its demand curve. Scale it by initial velocity. It is imprecise, but it beats ordering blind.
| SKU Age | Data Available | Recommended Approach |
|---|---|---|
| 0-4 weeks | Nearly none | Category proxy + manual judgment |
| 4-8 weeks | Sparse | Simple moving average, wide safety stock |
| 8-13 weeks | Minimal viable | Weighted moving average |
| 13-26 weeks | Solid | Pattern classification + model selection |
| 26-52 weeks | Good | Full model suite minus seasonal detection |
| 52+ weeks | Complete | Full model suite including seasonal |
A Worked Example: Forecasting Three SKUs
Let me walk through what SKU-level forecasting looks like for three products in the same category.
SKU A - Bamboo Cutting Board (steady)
- Last 12 weeks: 38, 41, 36, 40, 39, 42, 37, 41, 38, 40, 43, 39
- Average: 39.5/week. Standard deviation: 2.0
- ETS forecast next 4 weeks: 40, 40, 40, 40
- Safety stock (95% service level): 1.65 × 2.0 × √(3 week lead time) = 5.7 ≈ 6 units
Boring. Predictable. Exactly what you want.
SKU B - Pumpkin Carving Kit (seasonal)
- Sells 5/week Jan-Aug, then ramps: 15, 45, 180, 220, 30, 5...
- A moving average in August would forecast ~7/week. The actual October demand is 180.
- Seasonal decomposition sees the pattern and forecasts the October spike
- Miss this and you leave $3,600 on the table (180 units × $20 margin)
SKU C - Left-Handed Peeler (intermittent)
- Last 12 weeks: 0, 0, 3, 0, 0, 0, 0, 5, 0, 0, 0, 2
- Total: 10 units in 12 weeks. But a moving average says 0.83/week.
- Croston's approach: average inter-demand interval = 4 weeks, average demand size = 3.3 units
- Forecast: expect a sale event every ~4 weeks, size ~3 units
- Reorder point: higher relative to average demand because you need stock on hand when the burst happens
Three products, same category, three completely different forecasting problems. A single model applied to all three would nail SKU A, miss SKU B by 25x in October, and chronically overstock SKU C.
A Deeper Worked Example: One SKU, Twelve Weeks of Math
Let's pick the bamboo cutting board from above (SKU A) and walk all the way through it. I want to show what the math actually looks like week by week, including how forecast error feeds back into the next prediction.
Starting data: 12 weeks of sales. We will use weighted exponential smoothing with alpha = 0.3 (a common starting point, where recent weeks get weight 0.3 and older weeks decay exponentially).
Week 1-4: Baseline period. Sales come in at 38, 41, 36, 40. We don't forecast during this window. We're collecting data.
Week 5: First forecast. Take the simple average of weeks 1-4 as the initial level: (38+41+36+40)/4 = 38.75. Forecast for week 5 = 38.75. Actual = 39. Error = -0.25 (forecast was a hair low).
Week 6: Update the level, then forecast. New level = (0.3 × 39) + (0.7 × 38.75) = 38.83. Forecast for week 6 = 38.83. Actual = 42. Error = -3.17. The model nudges upward.
Week 7. Level = (0.3 × 42) + (0.7 × 38.83) = 39.78. Forecast = 39.78. Actual = 37. Error = +2.78. Model corrects downward slightly.
Week 8. Level = (0.3 × 37) + (0.7 × 39.78) = 38.95. Forecast = 38.95. Actual = 41. Error = -2.05.
Week 9. Level = (0.3 × 41) + (0.7 × 38.95) = 39.57. Forecast = 39.57. Actual = 38. Error = +1.57.
Week 10. Level = (0.3 × 38) + (0.7 × 39.57) = 39.10. Forecast = 39.10. Actual = 40. Error = -0.90.
Week 11. Level = (0.3 × 40) + (0.7 × 39.10) = 39.37. Forecast = 39.37. Actual = 43. Error = -3.63. Bigger miss; week 11 was hotter than expected.
Week 12. Level = (0.3 × 43) + (0.7 × 39.37) = 40.46. Forecast = 40.46. Actual = 39. Error = +1.46.
Now compute MAPE across weeks 5-12:
| Week | Forecast | Actual | Abs Error | Abs % Error |
|---|---|---|---|---|
| 5 | 38.75 | 39 | 0.25 | 0.6% |
| 6 | 38.83 | 42 | 3.17 | 7.5% |
| 7 | 39.78 | 37 | 2.78 | 7.5% |
| 8 | 38.95 | 41 | 2.05 | 5.0% |
| 9 | 39.57 | 38 | 1.57 | 4.1% |
| 10 | 39.10 | 40 | 0.90 | 2.3% |
| 11 | 39.37 | 43 | 3.63 | 8.4% |
| 12 | 40.46 | 39 | 1.46 | 3.7% |
MAPE = average of the percentage errors = 4.9%. That puts this SKU squarely in the "high confidence" tier from the accuracy table above. A 4.9% MAPE means the forecast is reliable enough to drive a reorder point calculation directly.
Now translate the forecast into ordering math. Lead time is 3 weeks. Forecast for the lead-time window is 3 × 40.46 = 121.4 units. Standard deviation of actual sales over the 12 weeks = 2.04. Safety stock at 95% service level = 1.65 × 2.04 × √3 = 5.83 ≈ 6 units. Reorder point = 121 + 6 = 127 units.
That's it. One SKU, 12 weeks of data, a single forecast model, all the math visible. Multiply this by 500 SKUs with three different model types and live accuracy tracking, and you can see why people stop doing it in spreadsheets and reach for per-SKU forecasting that runs the tuning loop for them.
What this exercise hides is the work of model selection. Picking alpha = 0.3 was a guess that happened to fit. In practice, you tune alpha against historical accuracy: try 0.1, 0.2, 0.3, 0.4, 0.5 and pick the value with the lowest MAPE. For Holt-Winters with trend and seasonal components, you tune three parameters (alpha, beta, gamma) and you do it per SKU. That tuning loop is where automation earns its keep.
Measuring Per-SKU Forecast Accuracy
You cannot improve what you do not measure. Per-SKU accuracy tracking is where most sellers fall short - they look at aggregate accuracy (which hides problems) or do not measure at all.
The standard metric is MAPE - Mean Absolute Percentage Error. For each period:
MAPE = |Actual - Forecast| / Actual × 100
A 12-week rolling MAPE per SKU tells you which products your forecast handles well and which ones need attention. But MAPE has a known flaw: it explodes when actuals are near zero (dividing by a small number). For intermittent SKUs, use MAD (Mean Absolute Deviation) instead.
What matters is not the absolute number. It is the trend. A SKU whose MAPE jumped from 15% to 35% has a signal change that your model has not caught. Maybe a competitor launched. Maybe a supplier changed packaging. Maybe a promotion ended and you forgot to exclude it from the baseline.

Track accuracy in tiers:
| Tier | MAPE Range | Action |
|---|---|---|
| High confidence | Under 15% | Trust the forecast, use standard safety stock |
| Moderate | 15-30% | Forecast is directionally right, pad safety stock 20% |
| Low confidence | 30-50% | Review the SKU - model may be wrong or demand shifted |
| Unreliable | Over 50% | Switch models, check data quality, or use manual override |
If more than 30% of your SKUs sit in the "low confidence" or "unreliable" tiers, the problem is usually not the model. It is the data. Duplicate SKUs splitting demand history, missing sales from stockout periods counted as zero demand, or promotions distorting the baseline. Fix the data first.
Where Spreadsheets Break
I built per-SKU forecasts in Google Sheets for two years. It worked until it didn't.
At 50 SKUs, a spreadsheet forecast takes about 4 hours a month to maintain. You can classify patterns by eye, run the formulas, update your reorder points manually. Tedious but manageable.
At 200 SKUs, you are spending a full day. You start cutting corners - applying the same model to everything, skipping accuracy checks, not reclassifying SKUs whose patterns changed. The forecast degrades quietly.
At 500+ SKUs, the spreadsheet approach is broken. You cannot visually classify 500 demand patterns. You cannot run 500 individual forecast models in a sheet without it crawling. You cannot track accuracy for 500 SKUs monthly. And when you miss a reclassification - when your steady seller goes seasonal and you do not notice for three months - the stockout costs more than a year of software.
The math does not change at scale. The human bandwidth does. This is the actual inflection point, and it hits most sellers somewhere between 100 and 500 SKUs.
What ReplenishRadar Does With This
We built our SKU-level demand forecasting software around this exact problem. When you connect your Shopify or Amazon store, ReplenishRadar classifies every SKU's demand pattern automatically and routes it to the right model. Steady sellers get exponential smoothing. Seasonal products get decomposition. Intermittent SKUs get Croston's. Each one tracks its own rolling accuracy score so you can see which forecasts to trust and which ones need a manual look.
You do not configure any of it. The classification updates as new data comes in - a SKU that was steady but starts showing seasonal behavior gets reclassified and re-forecast. The accuracy score is right there on the SKU detail page, no spreadsheet required.
If you run a high-SKU Shopify catalog specifically, the same engine is wired into our Shopify inventory forecasting workflow with per-supplier lead times and Shopify Flow alerts on top.

Getting Started Without Software
If you are not ready for dedicated forecasting software, here is the minimum viable version:
- Export 52 weeks of per-SKU sales data from Shopify or Amazon
- Sort by coefficient of variation (standard deviation / mean). High CV = variable or intermittent. Low CV = steady
- Apply weighted moving averages to your top 20% by revenue (these are your steady sellers)
- Flag anything seasonal by eye - look for the same spike in the same month year-over-year
- Track MAPE monthly for at least your top 50 SKUs. If accuracy drops, investigate
This will get you 80% of the benefit for your highest-impact SKUs. The long tail of slow movers can wait until you have tooling.
Related Reading:
- Inventory Forecasting 101: A Beginner's Guide
- How to Measure Forecast Accuracy
- How Much Safety Stock Do You Need?
- Stockout Cost Calculator - what running out actually costs per SKU
- Safety Stock Calculator - run the numbers for your service level target
Frequently Asked Questions
Get notified when it matters
Amazon and Shopify change the rules constantly. We'll email you when something affects your business.
See what your inventory is really doing
Doing $5M+ in revenue? Talk to our team
Related Posts

Amazon Lost Inventory: How to Get Reimbursed
How to find lost or damaged FBA inventory, file reimbursement claims with Amazon, and stop leaving 1-3% of your FBA revenue on the table.

Amazon Low-Inventory-Level Fee Explained
How Amazon's low-inventory-level fee works, which products are exempt, fee amounts by days of supply, and how to avoid it without triggering storage fees.

Cash Conversion Cycle for E-commerce Sellers
The CCC formula (DIO + DSO - DPO) explained with real e-commerce numbers. Learn what good looks like and how to shorten yours.