---
title: A product shows 0 online, but you have stock
summary: >
  A product shows 0 on your storefront while you still hold stock for one
  of three reasons: it was never linked to that store, the stock sits at a
  location that store cannot sell from, or the last update is still sitting
  in the queue. Check them in that order — the first one accounts for most
  cases.
type: troubleshooting
group: sync
step: 7
permission: channels.manage
prerequisites:
  - /help/fulfil/when-stock-actually-moves
related:
  - /help/receive/receive-a-delivery
last_updated: 2026-08-07
---

**The stock number in Mossery is the original. The number on your storefront is a copy.**

Your storefront does not count anything. It displays the last number pushed to it.
So when the two disagree, this app is right and the copy is behind.

A product can read 0 online while you still hold units, for three reasons:

- [Check 1: is it linked to that store?](#check-1-is-it-linked-to-that-store)
- [Check 2: can that store sell from that location?](#check-2-can-that-store-sell-from-that-location)
- [Check 3: is the update still queued?](#check-3-is-the-update-still-queued)

Work through them in that order. The first one explains most cases.

## Check 1: is it linked to that store?

A product page can say **Syncing** and still have nothing behind it.

The badge means a link exists. The update that actually goes out reads a second,
separate record. When one is present and the other is missing, every push quietly
does nothing. You see no error, because nothing was ever attempted.

### Fix it

1. Open the product and find the **Sales channels** card.
2. Find the store showing 0. If it says **Syncing** but **Last sent** is blank, the push record is missing.
3. Click **Re-link**. The next update picks the product up.
4. Wait one sync cycle, then reload the storefront listing.

Re-linking never changes your stock. It repairs the pointer, then the normal
update carries the real number out.

## Check 2: can that store sell from that location?

Stock is real where it sits, and invisible to a store that cannot ship from there.

Every location is mapped to the stores it fulfils for. A warehouse normally maps to
your online stores. Retail counters and event stalls normally sell in person only,
so their units are deliberately excluded from the online number.

| Location | Type | Sells on Store A | Units |
| --- | --- | --- | --- |
| Warehouse A | Warehouse | Yes | 120 |
| Retail 1 | Retail | No | 34 |
| Pop-up event | Event | No | 12 |

Here the product holds 166 units in total and Store A correctly offers 120. That is
the design, not a fault. If Store A should be able to sell those retail units, either
map that location to the store, or transfer the stock to a location already mapped.

One more trap lives here. A location holding a negative number drags the total down.
If a count or a return was booked to the wrong place, the sum can fall to 0 or below
even though every shelf has stock on it.

## Check 3: is the update still queued?

Updates travel in a queue. They are not instant.

Each change joins an outgoing queue and is sent in the background. A send that fails
stays in the queue and retries. Until it succeeds, the storefront keeps showing the
number it was last given.

1. Open **Sync errors**.
2. Filter by the product code, for example `SKU-001`.
3. Read the store column. A failure is always recorded against one store, never all of them.
4. Fix the cause the error names, then retry that item.

A queue that is long but moving is healthy. A queue where the oldest item has not
changed in days is stuck, and that is worth escalating rather than retrying.

## Still wrong after all three?

Compare the number the app holds against a physical count at one location.

If the shelf and the app disagree, this is a stock accuracy problem, not a sync
problem, and the fix is a stock count rather than a re-link. If the shelf and the
app agree but the storefront still lags, note the product code and the store name,
and pass both to whoever administers your sales channels.

## Explore

**How stock actually leaves inventory.** Deduction happens at fulfilment and nowhere
else, which is why a picked order does not change the online number.
[Learn more →](/help/fulfil/when-stock-actually-moves)

**Recording a delivery.** New stock only reaches a storefront after the delivery is
recorded against a location.
[Learn more →](/help/receive/receive-a-delivery)
