> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Out-of-Stock Products, OpenCart

> Live count of enabled, storefront-visible OpenCart products sitting at zero stock. Tracked live in Vortex IQ Nerve Centre. How to read it, why it matters, and how to act on it.

**Card class:** [Hero](/nerve-centre/overview#card-classes-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

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

|                                  |                                                                                                                                                                                                                                           |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**               | The number of enabled, storefront-visible products whose stock quantity is currently zero.                                                                                                                                                |
| **Stock source**                 | Quantity is held in `oc_product` (the `quantity` column). Stores using a stock-sync extension or warehouse integration have this column written by that integration rather than by hand.                                                  |
| **Disabled products**            | Excluded. A zero on a disabled (hidden) product is not customer-facing and does not count here.                                                                                                                                           |
| **Subtract / out-of-stock flag** | OpenCart's global Subtract Stock setting and the per-product out-of-stock status govern whether a zero-quantity product still shows as buyable. This card counts the zero regardless of whether the storefront still accepts a backorder. |
| **Stock status label**           | OpenCart lets you attach a stock-status label (for example "Out Of Stock", "Pre-Order") to zero-quantity products. The label is cosmetic; the count keys off the quantity, not the label text.                                            |
| **Currency / refunds**           | Not applicable. This is a stock-level metric, not a money metric.                                                                                                                                                                         |
| **Multi-store**                  | Stock is shared across `store_id` storefronts by default (one product, one quantity), so a zero affects every store at once and is counted once.                                                                                          |
| **Time window**                  | RT (live snapshot)                                                                                                                                                                                                                        |
| **Alert trigger**                | `> 0 with active demand`                                                                                                                                                                                                                  |
| **Roles**                        | owner, operations, finance                                                                                                                                                                                                                |

## Calculation

```
COUNT(products)
  WHERE quantity = 0
    AND status = enabled
```

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

| Segment                                | Products at zero | Notes                                       |
| -------------------------------------- | ---------------- | ------------------------------------------- |
| Enabled, with recent views/sales       | 22               | Counted, these are the painful ones         |
| Enabled, no demand in 90 days          | 14               | Counted, but low priority to reorder        |
| Disabled (hidden)                      | 63               | Excluded, not customer-facing               |
| Backorder-allowed (Subtract Stock off) | 9                | Counted, still buyable but flagged          |
| **Out-of-Stock Products (this card)**  | **45**           | enabled + at-zero, regardless of buyability |

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

| Card                                                                                                                      | Why pair it with Out-of-Stock Products                                                                       |
| ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| [Stock-Out Burst](/nerve-centre/kpi-cards/opencart/stock-out-burst)                                                       | The rate-of-change alarm. This card is the level; the burst tells you when the level just jumped.            |
| [Revenue at Risk (live)](/nerve-centre/kpi-cards/opencart/revenue-at-risk-live)                                           | Quantifies the sales exposure tied to products that are currently unbuyable.                                 |
| [Low-Stock SKUs](/nerve-centre/kpi-cards/opencart/low-stock-skus)                                                         | The leading indicator. Low-stock SKUs are the ones about to join this count.                                 |
| [Top-Velocity SKUs vs Ad Spend](/nerve-centre/kpi-cards/opencart/top-velocity-skus-vs-ad-spend)                           | If a zero-stock SKU is one you are actively advertising, you are paying to send traffic to a dead product.   |
| [Disabled Products](/nerve-centre/kpi-cards/opencart/disabled-products)                                                   | Some merchants disable zero-stock SKUs to hide them. The two counts move in opposite directions when you do. |
| [OpenCart Inventory vs Marketplace Listings](/nerve-centre/kpi-cards/opencart/opencart-inventory-vs-marketplace-listings) | If OpenCart is at zero but the marketplace still shows stock, the marketplace is about to oversell.          |

## 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:**

| Reason                                                                                                                                                               | Direction of divergence                       |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| **Timezone.** Vortex IQ reads on a UTC cadence; OpenCart timestamps follow the store timezone. A snapshot taken near a feed run can differ by a sync interval.       | Cosmetic timing shift                         |
| **Multi-store.** Stock is shared across `store_id`, so the card counts the product once even though it affects every storefront.                                     | Card counts products, not store-product pairs |
| **Disabled products.** The card excludes disabled products; an unfiltered admin "out of stock" view may include them.                                                | Card lower than an unfiltered admin count     |
| **Stock-status label vs quantity.** Admin filters on the label; the card filters on the quantity column. The two diverge when a label is set independently of stock. | Either direction                              |
| **API / DB sync lag.** A quantity that hit zero in the last minute may not yet be reflected.                                                                         | Self-resolves at next sync                    |

**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](/nerve-centre/kpi-cards/opencart/opencart-inventory-vs-marketplace-listings). That is the moment a marketplace can oversell stock OpenCart already knows is gone.

<details>
  <summary><em>Same-metric documentation cross-reference (for agencies running multiple platforms)</em></summary>

  The same idea of a live out-of-stock product count exists on other commerce platforms. This is **not a reconciliation**, your OpenCart store has no parallel store elsewhere to compare against. These links help agencies running multi-platform client books navigate between equivalent metrics.

  * [`shopify.products_with_zero_negative_stock`](/nerve-centre/kpi-cards/shopify/products-with-zero-negative-stock)
  * [`bigcommerce.products_with_zero_negative_stock`](/nerve-centre/kpi-cards/bigcommerce/products-with-zero-negative-stock)
</details>

## 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](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
