Inventory and stock

How to find dead stock in WooCommerce

WooCommerce has no dead stock report. To find dead stock, export your products from Products › All Products › Export to get current stock, then download Analytics › Products for the last 90 days. Any product with stock above zero that's missing from the sales list hasn't sold in 90 days. That's your dead stock.

The catch is that Analytics only lists products that sold, so you're looking for what's absent. Below: the spreadsheet method, how to choose the cut-off, how to catch slow sellers as well as dead ones, a SQL query, and what to do with the list.

What counts as dead stock?

Dead stock is inventory that hasn't sold in a set period and isn't likely to soon. It costs you in three ways: cash spent on it that you can't use elsewhere, storage space, and the risk it goes out of date or out of fashion.

The period is your call. A useful guide is to pick something several times longer than the product's normal gap between sales:

Store type Typical cut-off
Fast-moving consumables 60 days
Most general stores 90 days
Seasonal or gift products 12 months (so a product that only sells in December isn't flagged in March)

The free way: compare stock with recent sales

  1. Export your products. Go to Products › All Products, click Export, keep the default columns, and click Generate CSV. Each simple product and each variation is a row, with its Stock and Regular price.
  2. Download recent sales. Go to Analytics › Products, set the date range to the last 90 days, and click Download. For variable products, also download Analytics › Variations for the same dates.
  3. Remove what sold. In a spreadsheet, match the two lists by SKU or name. Any product in the export with stock above zero and no row in the sales download is dead stock for that period.
  4. Sort by value. Multiply stock by your unit cost (or regular price if you don't have costs) and sort largest first. That's the order to deal with it in.

Step 4 matters. Ten dead units of a $4 keyring is a rounding error. Ten dead units of a $180 lamp is real money. The guide on working out the value of your WooCommerce inventory covers costs in more detail.

Products that don't manage stock

If a product doesn't have stock management turned on, the export has no quantity for it. You can still see it hasn't sold, but you can't tell how many are sitting on the shelf. Turn on stock management for anything you physically hold, so it can be counted.

Slow stock: the list before dead stock

A product that sold twice in 90 days won't appear as dead, but it may be nearly as much of a problem. Catch it by calculating days of stock left:

Days left = stock ÷ (units sold in 90 days ÷ 90)

Say a wall print has 30 in stock and sold 3 in 90 days. That's 0.033 a day, so 30 units will last about 900 days. That's two and a half years of stock. It isn't dead, but you shouldn't reorder it.

A related number is sell-through rate: the share of available stock you sold in a period. A very low rate on a product you bought in bulk is the same warning in a different form. See how to calculate sell-through rate for WooCommerce products.

Why a product might look dead when it isn't

Before you discount anything, check these:

  • It's new. A product added last month hasn't had 90 days to sell. Check its publish date.
  • It's seasonal. Compare with the same period last year using the date picker's Compare to › Previous year.
  • It's hidden. A product set to private, draft or hidden from the catalog can't sell. Check its visibility and status.
  • Its orders are excluded. Analytics leaves out orders with statuses listed under Analytics › Settings › Excluded statuses. If you use a custom order status, sales may not be counted.
  • Analytics is missing older orders. If your store never ran Import historical data under Analytics › Settings, older sales may be absent from the reports.

For developers: dead stock in SQL

Current stock is in wc_product_meta_lookup (one row per product and variation). Sales are in the Analytics table wc_order_product_lookup, where variation sales carry a variation_id. This lists items with stock and no sales in the last 90 days:

SELECT p.post_title AS product,
       m.sku,
       m.stock_quantity
FROM wp_wc_product_meta_lookup m
JOIN wp_posts p ON p.ID = m.product_id
WHERE m.stock_quantity > 0
  AND m.product_id NOT IN (
    SELECT IF(variation_id > 0, variation_id, product_id)
    FROM wp_wc_order_product_lookup
    WHERE date_created >= NOW() - INTERVAL 90 DAY
      AND product_qty > 0
  )
ORDER BY m.stock_quantity DESC;

Change wp_ if your table prefix differs. If you manage stock on a variable product's parent rather than on each variation, the parent row will appear here even when its variations sold, because the sales are recorded against the variations. Check those rows by hand.

What Askshelf can and can't tell you

Askshelf's dead stock lookup does the job above for you. It lists products that manage stock, have units on hand and haven't sold in a number of days you choose (14 to 365, 60 by default), with the money tied up in each at cost or at price, and when each last sold.

Askshelfexample answer

Which products haven't sold in 90 days, and how much money is tied up in them?

14 products with stock haven't sold in 90 days, with $3,860 tied up at cost. The biggest are the stoneware bowl set (60 units, $720 at cost, last sold 4 July) and the wool throw (grey) (22 units, $616, last sold 19 June).Dead stock, no sales in 90 days
An example on a demo store. In your store, the numbers come from your own orders.

Cost figures need WooCommerce's Cost of Goods Sold feature turned on and a cost on each product. Without it you still get the list and the value at selling price. It only sees products that manage stock, and it has no stock history or seasonality, so a product that sells only at Christmas will look dead in July. Check the list against what you know before you discount anything. For planning stock overall, see the WooCommerce inventory forecasting guide.

What to do with dead stock

  1. Stop reordering it. Check that it isn't on a standing order with your supplier.
  2. Bundle it with a related best seller at a small discount.
  3. Discount it in steps, for example 20% off for two weeks, then 40%. Use a coupon so you can measure whether the coupon paid off.
  4. Move it to a clearance category, a marketplace, or a wholesale buyer.
  5. Write it off if nothing works, and donate or recycle it. Ask your accountant how to record it.

Do this check monthly. Dead stock is cheaper to clear at 90 days than at 300.

Common questions

Does WooCommerce have a dead stock report?

No. Analytics › Products only lists products that sold in the selected period, so products with no sales don't appear at all. You find dead stock by comparing your full product list with recent sales.

How long without a sale counts as dead stock?

There's no fixed rule. Many stores use 90 days, but a store with seasonal products might use a full year, and a fast-moving store might flag anything unsold for 60 days. Pick a period that's long compared with how often the product normally sells.

What should I do with dead stock?

Stop reordering it first. Then try bundling it with a best seller, discounting it, moving it to a clearance category, or selling it through another channel. Writing it off is the last step.

See how Askshelf handles this: Stock forecasting for WooCommerce