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:

  1. What will run out before I can restock it?
  2. How much should I order, and when?
  3. 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 › Stock shows 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.

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).

Askshelfexample answer

What will run out in the next 3 weeks?

5 items will run out within 21 days at their last-30-day pace. The ceramic mug (white) goes first, in about 9 days (36 left, selling 4 a day). Next are the linen apron (sage) at 12 days and the canvas tote at 15.Stock runway, within 21 days, sales rate over the last 30 days
An example on a demo store. In your store, the numbers come from your own orders.

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:

  1. List what runs out within your longest lead time plus a week. Order anything that falls inside the line.
  2. Check your top sellers by variation. One size or color often runs out long before the product does.
  3. 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.
  4. Once a month, look for dead stock and decide what to discount, bundle or stop reordering.
  5. 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