MHelp
← Ops
Browse all topics
Step 7 of 7 — Sync · storefronts get the new number

A product shows 0 online, but you have stock

Troubleshooting3 min read

Short answer

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.

Last checked 7 Aug 2026Step 7 — SyncView as Markdown

Before this makes sense: When stock actually moves

The fix described here needs the Manage channel sync permission.

What is this?

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:

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.

LocationTypeSells on Store AUnits
Warehouse AWarehouseYes120
Retail 1RetailNo34
Pop-up eventEventNo12

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 →

Recording a delivery. New stock only reaches a storefront after the delivery is recorded against a location. Learn more →

Read next