WooCommerce stock goes negative when an order takes away more units than the product has. If the product allows backorders, that is by design: -3 means you owe three units. If backorders are off, something sold stock that wasn’t there, usually two buyers taking the last unit at the same time, a sync with another system that overwrites the count, or an order that stopped halfway.

Why it happens

  • Backorders are allowed. “Allow backorders?” is set per product, and per variation on variable products. With “Allow” or “Allow, but notify customer”, WooCommerce keeps selling at zero and the quantity drops below it. A bulk change on the parent does not always reach every variation.
  • Two buyers check out the last unit together. WooCommerce checks that a unit is available and takes it off in two separate steps. Since WooCommerce 4.3 it reserves stock during checkout to close that gap, but support threads from 2019, 2020 and 2023 still report stock at -1 with backorders off.
  • Hold stock is blank. The reservation above uses the Hold stock (minutes) setting (60 by default). If someone cleared the field to stop unpaid orders from being cancelled, reservations are off too.
  • Another system writes the quantity. An ERP, a POS, a marketplace connector or an inventory plugin sends its own count. If it sends a number that doesn’t account for orders WooCommerce already took, or sends it late, the two counts drift apart.
  • An order stopped halfway. In an August 2026 thread (WooCommerce 11.1), one order reduced stock on its items but never marked itself as “stock reduced”. When it was cancelled, the stock didn’t come back. The likely cause was a PHP process killed in the middle (timeout, memory or a server restart).
  • Manual corrections at the wrong moment. You count the shelf and type the number while paid orders are still waiting to ship, or you cancel an oversold order after fixing the count, and WooCommerce adds the units back on top.
  • A plugin or theme conflict. In a 2023 thread the volunteer pointed at outdated theme templates. It was never confirmed, but testing with a default theme on a staging copy is the usual way to rule it out.

There is a second, related mismatch: a product that says “In stock” with 0 units and backorders off. Shoppers can buy something you don’t have. It almost always comes from a tool that writes the quantity straight into the database without recalculating the stock status.

How to check it yourself

  1. Find the negatives. Go to Analytics > Stock and sort by the Stock column. Negative quantities go to the top, and the report lists variations too. In Products > All Products the Stock column shows them as “In stock (-2)” or “On backorder (-2)”.
  2. Check the product settings. Open each one, go to Product data > Inventory and look at “Manage stock?” and “Allow backorders?”. On variable products, open each variation: they have their own settings.
  3. Read the order notes. Open the last orders for that product. Each one has a note like “Stock levels reduced: Blue mug (MUG-01) 1→0”. Two orders that both start from 1, minutes apart, are a race between buyers. A note that starts from a number you never had points to a sync or a manual edit.
  4. Look for orders that stopped halfway. If an order is in Processing but has no “Stock levels reduced” note, check WooCommerce > Status > Logs with the source fatal-errors, and ask your host for PHP-FPM logs for that time.
  5. Check Hold stock. Go to WooCommerce > Settings > Products > Inventory and make sure Hold stock (minutes) has a number.
  6. Find “In stock” at zero. In Analytics > Stock, choose Show: In stock and sort by Stock. Any product with stock management on and a quantity of 0 or less is in the wrong status.

How to fix it

  1. Pause the sync from your ERP, POS or marketplace while you fix the numbers, or it will overwrite your work.
  2. Count what you really have on the shelf, minus what is already paid and waiting to ship.
  3. Deal with the oversold orders first. Decide with each customer: ship late, offer a swap, or refund. Do it before you fix the count, because cancelling an order that reduced stock puts those units back. If you refund, untick Restock refunded items when you already corrected the quantity by hand.
  4. Set the real quantity. Open the product, go to Inventory > Stock quantity, type the number and click Update. For many products use Products > All Products > Bulk actions > Edit, or export to CSV, fix the Stock column and import with “Update existing products”.
  5. Turn off backorders where you don’t want them. Set “Allow backorders?” to “Do not allow” on the product and on each variation.
  6. Fix “In stock” at zero. Open the product and click Update: with stock management on, WooCommerce recalculates the status from the quantity when it saves. If it goes back to “In stock” after the next sync, the sync tool is the cause; set it to write the stock status as well as the quantity.
  7. Fix an order that stopped halfway by correcting the stock of its items by hand before you cancel or change it. Otherwise the stock is counted twice.
  8. Put a number back in Hold stock. The default of 60 minutes is fine for most stores.

How to stop it from happening again

Negative stock rarely shows up on its own: you find out when a customer asks where their order is. Our tool Melopo Radar checks your catalog each time it syncs and lists two things: products with a quantity below zero, and published products that say “In stock” with stock management on, 0 units and backorders off. Spotting them is included in the free plan (1 store), with a link to edit each product. With Pro (19 USD a month, 14-day trial without a card) you can also set negative quantities to 0 with one click, one by one or in bulk, with undo. What it doesn’t do: it checks products, not individual variations; it lists products with backorders allowed too, so you decide which negatives are expected; and it doesn’t tell you which order caused the gap or stop two buyers from taking the last unit. For that, the order notes in step 3 are still the tool.

FAQ

Is negative stock ever normal in WooCommerce? Yes, when the product allows backorders. Then -3 means three units are sold and still to be ordered from your supplier.

Why did my stock go negative with backorders turned off? Usually two buyers checked out the last unit at the same time, another system overwrote the count, or an order stopped halfway. The order notes tell you which.

When does WooCommerce reduce stock? When the order is paid or put on hold (Processing or On hold), not when the product is added to the cart. During checkout it only reserves the units for the Hold stock minutes.

Does WooCommerce put stock back when an order is cancelled? Yes, when the order goes to Cancelled or back to Pending payment. Since WooCommerce 11.0 it also does it when an order that had reduced stock moves to Failed.

Can I make WooCommerce stop selling at zero? Set “Allow backorders?” to “Do not allow” on every product and variation, keep Hold stock on, and let only one system be in charge of the quantity.