Skip to main content
Metrics type: Key MetricsCategory: Ecommerce Platform
The standing count of products that are enabled and visible on the storefront but currently sitting at quantity zero, the level reading behind every stock-out alert.

At a glance

A product at zero stock is either a fast-mover you forgot to reorder or a SKU a bad feed silently zeroed. This card is the level: how many enabled, customer-facing products are at quantity zero right now. Unlike a one-off alert, it tells you the size of the hole at any moment. When the number is above zero and those products still have demand, every visit to one of them is a missed sale on something you may well have in the warehouse.

Calculation

Worked example

A UK garden-supplies store on OpenCart 4.x with around 3,100 active SKUs. Stock comes in via a nightly warehouse import. The snapshot is taken on 18 Mar 26. What’s interesting here:
  1. The count is 45, but only 22 of those actually matter today. The card gives the level; demand context (which of those 45 have recent views or sales) is what turns a number into a reorder list. The 22 with active demand are where lost revenue is accumulating right now.
  2. 63 disabled zero-stock products are correctly ignored. A retired or seasonal SKU sitting at zero is not a customer-facing problem, so excluding disabled products keeps the number honest. If those were counted, the merchant would chase ghosts.
  3. Nine backorder-allowed SKUs still count. With Subtract Stock off, those products can still be ordered, but a zero quantity is still a signal worth seeing. The merchant treats these differently: they are not “lost sales”, they are “fulfilment promises to keep”.
  4. One number, every storefront. Because OpenCart shares stock across store_id, the 45 figure is the same whether the merchant runs one storefront or five. A single warehouse import drives the whole estate.

Sibling cards merchants should reference together

Reconciling against OpenCart

Where to look in the OpenCart admin: Catalog → Products shows each product’s Quantity and Status columns; sort by quantity ascending to bring zero-stock items to the top, and add the Status column to separate enabled from disabled. Reports → Products Viewed and Reports → Products Purchased tell you which of the zero-stock items still have demand. If you use a stock-sync or import extension, its own log (often under Extensions or System → Maintenance) records what each run wrote into the quantity column. OpenCart admin views that look like the same number but aren’t:
  • Catalog → Products filtered to “Out of Stock” may include disabled products and any item carrying an out-of-stock stock-status label regardless of its actual quantity. This card keys off quantity = 0 on enabled products only.
  • The Dashboard shows no stock detail and will not reflect this number.
  • A stock-status label of “Out Of Stock” is cosmetic text; a product can carry that label while still holding quantity, or hold zero quantity with a different label. The card trusts the quantity.
Why our number may legitimately differ from the OpenCart admin: Cross-connector note: if you also list on a marketplace, a zero in OpenCart that is not mirrored on the marketplace shows up as a divergence on OpenCart Inventory vs Marketplace Listings. That is the moment a marketplace can oversell stock OpenCart already knows is gone.

Known limitations / merchant FAQs

Does this count disabled products? No. Only enabled, storefront-visible products are counted. A zero on a hidden product is not a customer-facing problem, so including it would only inflate the number and bury the SKUs that actually matter. A product shows zero but customers can still order it, is that a bug? No. With the global Subtract Stock setting off, or with a per-product out-of-stock behaviour that allows ordering, OpenCart accepts orders on zero-quantity items (backorder behaviour). The card still counts the zero because it is a signal worth seeing; you decide whether that SKU is “lost sales” or “a promise to fulfil”. Why does my admin “Out of Stock” filter show a different total? The admin filter often keys off the stock-status label and may include disabled products. This card keys off the actual quantity column on enabled products only. Set the admin filter to enabled products at quantity zero and the two will line up. Does a stock-status label of “Out Of Stock” change the count? No. The label is cosmetic text you can set independently of the real quantity. The card trusts oc_product.quantity, not the label. A product labelled in stock but holding zero quantity still counts. Why is the number the same across all my storefronts? OpenCart shares stock across store_id storefronts by default: one product, one quantity. A zero therefore affects every store at once and is counted a single time. How is this different from the Stock-Out Burst alert? This card is the level (how many are at zero right now); the burst is the rate of change (how many just dropped to zero in the last hour). Use the burst to catch a bad feed fast, and this card to see how deep the resulting hole is. The count won’t go down even after I reordered, why? Reordering does not change OpenCart stock until the quantity is actually written back, either by hand in Catalog → Products or by your next stock-sync run. The card reflects the quantity column; until that column moves above zero, the SKU stays counted.

Tracked live in Vortex IQ Nerve Centre

Out-of-Stock Products is one of hundreds of KPI pulses Vortex IQ tracks across OpenCart and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.