Inventory and stock · complete guide
WooCommerce inventory forecasting: a practical guide
WooCommerce doesn't forecast stock on its own. It shows current stock in Analytics › Stock and flags products as low or out of stock against thresholds you set. To forecast, divide each product's stock by its average daily sales (from Analytics › Products or Analytics › Variations) to get days left, then compare that with your supplier's lead time.
This guide covers the whole job for a small store: what WooCommerce gives you, the handful of numbers that matter, a simple method you can run in a spreadsheet, the traps that throw a forecast off, and how to turn it into a weekly habit. Each section links to a more detailed guide.
What inventory forecasting means for a small store
For a store with a few hundred products, forecasting isn't a statistical model. It's answering three questions every week:
- What will run out before I can restock it?
- How much should I order, and when?
- What's sitting on the shelf not selling?
The first two keep you from losing sales. The third keeps cash from getting stuck in boxes. A forecast that answers those three questions reliably is good enough for most WooCommerce stores, and it only needs two inputs per product: how many you have and how fast they sell.
What WooCommerce gives you out of the box
Core WooCommerce has solid stock tracking but no forecasting. Here's what's there.
| Feature | Where | What it does |
|---|---|---|
| Stock management | Product edit screen › Inventory tab | Tracks a quantity per product or per variation and reduces it as orders come in |
| Store-wide thresholds | WooCommerce › Settings › Products › Inventory |
Sets the low stock threshold and the out of stock threshold for every product |
| Per-product threshold | Product edit screen › Inventory tab | Overrides the store-wide low stock threshold for one product or variation |
| Stock emails | WooCommerce › Settings › Products › Inventory |
Emails the notification recipients when stock hits the low or out of stock threshold |
| Stock report | Analytics › Stock |
Lists products and variations with SKU, status and current stock, filterable by out of stock, low stock, in stock and on backorder |
| Sales by product | Analytics › Products and Analytics › Variations |
Units sold and net sales for any date range |
The low stock threshold is the closest WooCommerce gets to a warning system. It's a fixed number, though, and that's its weakness: 5 units left is plenty for a product that sells once a month and a stock-out tomorrow for one that sells ten a day. The guide on getting a low-stock report in WooCommerce shows how to set thresholds that reflect each product's pace.
What WooCommerce doesn't do
Core WooCommerce does not:
- predict when a product will sell out;
- calculate reorder points, safety stock or order quantities;
- calculate sell-through rate;
- list products that haven't sold in a while;
- value your stock at cost;
- keep a dated history of stock levels you can report on (
Analytics › Stockshows current levels only).
All of these can be worked out from data WooCommerce does hold. The rest of this guide shows how.
The numbers that matter
You don't need many. These six cover almost every stock decision a small store makes.
| Number | What it tells you | How to get it | Guide |
|---|---|---|---|
| Stock runway (days of cover) | How many days until a product runs out at its current pace | Stock ÷ average daily sales | Products about to sell out |
| Reorder point | The stock level at which you should place an order | Daily sales × lead time + safety stock | Setting reorder points |
| Safety stock | The buffer that covers slow deliveries and busy weeks | Extra days of sales held back | Setting reorder points |
| Sell-through rate | What share of the stock you had actually sold | Units sold ÷ units available | Sell-through rate |
| Dead stock | Products with stock but no recent sales | Stock list minus recent sellers | Finding dead stock |
| Inventory value | Cash tied up in stock | Stock × unit cost | Inventory value |
Stock runway is the one to start with. It turns two numbers you already have into a date, and a date is what you need to act.
A simple forecasting method you can run in a spreadsheet
This takes about twenty minutes the first time and five after that.
Step 1: get current stock
Go to Products › All Products, click Export, and generate a CSV. Keep the ID, Type, SKU, Name, Parent and Stock columns. Variations come out as their own rows with Type set to variation, so you get stock per size and color too. If you only need a quick look, Analytics › Stock shows the same current levels on screen.
Step 2: get recent sales
Go to Analytics › Products, set the date range to the last 30 days, and click Download to export a CSV with Items sold per product. For variable products, do the same in Analytics › Variations, which gives units per variation.
Step 3: calculate daily sales and days left
Match the two lists by product (SKU is easiest). Then add two columns:
- Daily sales = items sold ÷ 30
- Days left = stock ÷ daily sales
Sort by days left, smallest first. That's your forecast.
Step 4: compare with lead time
For each product near the top, compare days left with your supplier's lead time (the days between placing an order and having stock ready to sell). If days left is shorter than lead time plus a few days' buffer, order now.
A worked example
Say you sell a ceramic mug. You have 84 in stock and sold 120 in the last 30 days.
- Daily sales = 120 ÷ 30 = 4 a day
- Days left = 84 ÷ 4 = 21 days
- Your supplier takes 14 days, and you like a 7-day buffer, so you'd want 14 + 7 = 21 days of cover at the moment you order.
The mug is right at its line. Order today. In units, the line is 4 × 21 = 84, which is the mug's reorder point. The free reorder point calculator does this arithmetic for you.
Why forecasts go wrong (and how to correct for it)
A 30-day average is a good default, but it assumes next month looks like last month. These are the common ways it doesn't.
Promotions and one-off spikes
A sale, a newsletter feature or a single wholesale order can double a product's 30-day total. If that spike won't repeat, your forecast will tell you to over-order. Check the Orders column in Analytics › Products: high items sold with few orders usually means a bulk buyer. Exclude the spike, or use a longer window.
Seasonality
Gift products sell faster in November and December, garden products in spring. Before a season, compare the same weeks last year using the date picker's Compare to › Previous year option. If last December sold twice the November rate, plan for that.
Stock-outs hide demand
If a product was out of stock for ten of the last 30 days, its sales are artificially low, and the forecast will under-order it again. Divide units sold by the days it was actually in stock instead of 30. The guide on what running out of stock costs a WooCommerce store shows how to estimate those missed sales.
Variations behave differently
A t-shirt might have plenty of stock overall while the medium in black is nearly gone. If you forecast at the parent product level, you'll miss it. Forecast each variation that manages its own stock. The guide on tracking stock for variations covers how WooCommerce stores variation stock and how to report on it.
Analytics is a little behind
Analytics fills its tables in the background, so the last few hours of orders may not be counted yet. For weekly forecasting that doesn't matter. For a same-day decision on a fast seller, check the product's live stock on its edit screen.
Choosing the right sales window
| Window | Use it for | Watch out for |
|---|---|---|
| 7–14 days | Fast movers, new products, products just promoted | One busy weekend swings the result |
| 30 days | Most products, most of the year | Misses seasonal turns until they're underway |
| 60–90 days | Slow sellers, steady staples | Reacts slowly when demand changes |
If you're unsure, run 30 days for everything and 14 days for your top 20 sellers. When the two disagree sharply, demand is changing and the shorter window is usually closer to the truth.
Dead stock, sell-through and inventory value
Forecasting isn't only about running out. The other side is stock that doesn't move.
- Dead stock is stock that hasn't sold in a set period, often 90 days or more. It ties up cash and shelf space. WooCommerce has no dead stock list, but you can build one by comparing your product export with recent sales. See how to find dead stock in WooCommerce and the dead stock definition.
- Sell-through rate tells you how much of a batch you sold in a period. It's the standard way to judge a new product or a seasonal buy. See how to calculate sell-through rate.
- Inventory value is what your stock is worth, at cost or at retail. You need it for accounts and for knowing how much cash is on the shelves. See how to work out the value of your WooCommerce inventory.
For developers: days of stock left in SQL
If you'd rather query the database, this lists the 20 products and variations with the fewest days of stock left, based on the last 30 days of sales. It reads current stock from wc_product_meta_lookup and sales from the Analytics table wc_order_product_lookup, both of which work the same with HPOS or posts storage.
SELECT p.post_title AS product,
m.sku,
m.stock_quantity,
s.units AS sold_30d,
ROUND(m.stock_quantity / (s.units / 30), 1) AS days_left
FROM wp_wc_product_meta_lookup m
JOIN wp_posts p ON p.ID = m.product_id
JOIN (
SELECT IF(variation_id > 0, variation_id, product_id) AS item_id,
SUM(product_qty) AS units
FROM wp_wc_order_product_lookup
WHERE date_created >= NOW() - INTERVAL 30 DAY
AND product_qty > 0
GROUP BY item_id
) s ON s.item_id = m.product_id
WHERE m.stock_quantity > 0
ORDER BY days_left ASC
LIMIT 20;
Change wp_ if your table prefix differs. Variations are matched on variation_id, so each size or color gets its own row. The query doesn't apply your Analytics excluded statuses, and NOW() uses the database server's clock, so results can differ slightly from the reports.
The quick way: ask Askshelf
Askshelf adds Analytics › Askshelf to WordPress admin. Its stock runway lookup does the forecast above for you: it takes each product's and variation's current stock, works out the sales rate over the last 7 to 90 days (30 by default), and lists what will run out within the number of days you ask about (1 to 120, 14 by default).
What will run out in the next 3 weeks?
You can change the window ("based on the last 14 days"), ask about one product, or widen the horizon to cover a long supplier lead time. It's read-only, so it can't change stock or place orders. Askshelf doesn't calculate reorder points, safety stock or sell-through, so use the methods in the linked guides for those. It does have a separate dead stock lookup that lists products with no recent sales and values the stock you hold, covered in the dead stock and inventory value guides. More on how it fits a stock routine is on the stock forecasting page.
A weekly stock routine
Forecasting pays off when it's a habit, not a project. A 15-minute Monday routine:
- List what runs out within your longest lead time plus a week. Order anything that falls inside the line.
- Check your top sellers by variation. One size or color often runs out long before the product does.
- Check what went out of stock last week in
Analytics › Stock(filter Out of stock) and note how many days each was gone. Adjust its reorder point up. - Once a month, look for dead stock and decide what to discount, bundle or stop reordering.
- Once a quarter, review sell-through on new and seasonal products before you reorder them.
If you only do step 1, you'll avoid most stock-outs. Start there, then add the rest as the store grows.
Common questions
Does WooCommerce have inventory forecasting built in?
No. Core WooCommerce tracks current stock, marks products low or out of stock against thresholds you set, and can email you when that happens. It doesn't predict when a product will run out or how much to reorder.
What's the simplest way to forecast stock for a small store?
Divide each product's current stock by its average daily sales over the last 30 days. The result is days of stock left. Anything with fewer days left than your supplier's lead time needs reordering now.
How far back should I look when calculating sales rate?
30 days suits most stores. Use 14 days for fast movers or products whose demand has just changed, and 60 to 90 days for slow sellers so a single big order doesn't skew the average.
Can I forecast stock for each size and color separately?
Yes, if each variation manages its own stock. WooCommerce then holds a separate quantity for every variation, and Analytics › Variations shows how many of each sold, so you can work out days left per variation.
See how Askshelf handles this: Stock forecasting for WooCommerce