Product
6-Stage PipelineInventory ManagementBill of MaterialsSupplier ManagementReports & AnalyticsAI CopilotShopify Integration
Industries
ApparelBeauty & Personal CareJewelleryFootwearHome & LifestyleFood & Beverage
Company
Pricing Blog About Log in Start free trial →
Shopify

Shopify Inventory Not Syncing? The 7 Real Causes and How to Fix Each

Your admin says 14 in stock. The shelf has three. A customer just bought unit number five and you are drafting an apology email. When Shopify inventory is not syncing, the instinct is to blame the integration — but usually the integration is doing exactly what it was told. The wrong quantity comes from upstream: a location nobody stocks, an app pushing absolute counts on a timer, a bundle decrementing the wrong component, or a shelf nobody has counted since March. Here are the seven causes behind almost every case, how to confirm each, and the fix. Three of the seven are process, not software.

Key takeaways

  • Shopify holds several numbers per SKU per location — available, committed, on hand, incoming. Many "wrong quantity" reports are the wrong one being read.
  • Start at the variant's adjustment history. It names the app, person or import behind every change, with a timestamp.
  • Exactly one system should own the stock number for a location. Two apps with write access will overwrite each other forever.
  • Inventory CSVs set absolute quantities. An import built from yesterday's export silently rolls back everything you sold today.
  • If the audit trail is clean and the count is still wrong, the problem is physical. No integration fixes an uncounted shelf.

Shopify inventory not syncing? Read the audit trail first

Skip the support tickets for ten minutes. Open the product, click the variant, and read its inventory history — Shopify logs every adjustment with a timestamp, the resulting quantity, and who or what made it: a staff name, an app, an order, or an import. Two questions end most investigations. Did the last change come from a human, an order, or an app? And is there a change nobody can explain — a jump back to a round number, or a correction posted at 2 a.m.? Then open Settings → Apps and sales channels and list every app that can write inventory. Most stores are surprised by how long that list is.

Wrong quantity? Symptom, cause, and where to look

SymptomMost likely causeWhere to check in Shopify admin
Storefront says sold out, but you have units on the shelfStock sits at a location the sales channel doesn't sell fromSettings → Locations, then the variant's per-location quantities
Available looks too low during a busy weekUnfulfilled orders holding units in committedVariant inventory card: available vs committed vs on hand
Quantity resets overnight to an older numberScheduled app push or CSV import writing absolute valuesInventory adjustment history — app name and timestamp
Two systems disagree and the winner keeps changingTwo apps with inventory write access on one locationSettings → Apps and sales channels; adjustment history
Component stock never moves when kits sellBundle app not decrementing componentsBundle app's component mapping; component variant history
Returned goods never reappear as sellableRefund processed without a restockOrder timeline — look for the restock line
Audit trail is clean, count is still wrongPhysical drift — nobody counted the shelfNowhere in admin. Go count it.

Cause 1: Several channels and locations writing to the same SKU

Shopify tracks inventory per location, and each sales channel sells only from the locations you allow. Add a 3PL warehouse, a pop-up, a POS drawer or a second studio and one SKU carries several independent counts. Oversells appear when two channels draw on the same physical pile through different location records; phantom stockouts appear when the stock is real but sitting where that channel cannot sell it.

How to confirm: read the variant's per-location breakdown, not the roll-up total. If the total looks right but one location shows zero and another everything, you have a routing problem, not a sync problem. Check location priority in Settings → Locations, and whether the product is published to the misbehaving channel.

The fix: keep stocked locations as few as your operation allows — each is another count to keep honest. Deactivate locations you no longer ship from rather than leaving them at zero, and decide explicitly which location each channel sells from.

Cause 2: You are reading available and thinking on hand

The cheapest fix here, because nothing is broken. Shopify splits inventory into states, and the storefront sells against available — not against what sits on the shelf.

StateWhat it meansCan you sell it?
On handEvery unit physically at that locationNot directly — it is the sum of the states below
CommittedSold on orders not yet fulfilledNo, it belongs to a customer already
UnavailableSet aside as damaged, quality control or reserveNo, until you move it back
AvailableOn hand minus committed minus unavailableYes — this is what the storefront uses
IncomingOn a purchase order or transfer, not yet receivedNo, and it is not on your shelf either

Worked example — a jewellery brand's hoop earring at the studio location, the Monday after a campaign weekend:

On hand = 140 units Committed = 26 units (placed, not yet shipped) Unavailable = 6 units (plating defects, held for QC) Available = 140 − 26 − 6 = 108 units

The founder sees 108, counts 140 on the shelf, files a ticket saying Shopify inventory levels are incorrect. Nothing is wrong. Before debugging an integration, confirm which of these five numbers each side of your stack is comparing — a 3PL reporting on hand against a screen showing available will disagree every day, correctly.

Cause 3: Two apps with write access fighting over the same number

The most common genuine sync failure. A 3PL app pushes warehouse counts hourly, a POS syncs in real time, a subscription app decrements on renewal, a bundle app writes component counts. Each believes it holds the truth, and most write absolute quantities rather than deltas. When two writers overlap, the count you see is whichever ran last — which is why the number looks right in the morning and wrong by lunch.

How to confirm: look for alternating entries from two app names in the adjustment history within a short window, often oscillating between the same two values. That oscillation is the signature.

The fix: pick one owner per location; everything else reads. Write it down — "the 3PL owns Warehouse quantities; nothing else writes there" — because in six months someone will install another app and the question returns. A system that holds one authoritative stock count per variant and location makes that rule enforceable; four apps each nominating themselves makes it impossible.

Cause 4: Bundles and kits decrementing the wrong thing

Bundles break inventory in two directions. If the bundle is its own tracked SKU, selling it decrements the bundle and leaves components untouched — component stock stays optimistic until you run out mid-pack. If it does decrement components but the mapping is wrong, or one component sits in three bundles at different quantities, you get silent double-counting.

How to confirm: sell one bundle, then open each component's history. Each should show an adjustment for exactly the quantity in the kit. If nothing moved, or the number is off, you have found it.

The fix: track components, not kits, wherever a component is also sold alone. The bundle should hold no stock of its own — it is a recipe that draws down real inventory. That recipe is a bill of materials in all but name, and the same logic governs goods you manufacture.

Cause 5: A CSV import quietly overwrote live counts

Someone exports inventory on Tuesday morning, edits 40 rows, imports the file Wednesday afternoon. The import sets absolute quantities, so everything sold in between is erased — the file carries Tuesday's numbers and Shopify obediently applies them.

Tuesday 9am export : 220 units Sold Tue-Wed : 35 units True count at import : 185 units CSV imported Wed 4pm : 220 units (row unchanged) Overstated by : 35 units → oversells begin

How to confirm: the history shows a batch of changes sharing one timestamp across many variants. That is a bulk write; no order caused it.

The fix: re-export immediately before you edit, edit fast, import while nothing is selling — or leave the quantity column out entirely when you are only changing titles, prices or tags. Better: stop routing stock changes through spreadsheets. Every export-edit-import cycle is a window where two versions of the truth exist at once, one of the clearest signals in the spreadsheets versus inventory software decision.

Cause 6: Returns and restocks that never post back

A customer returns two units. Support refunds the order to close the ticket, the parcel arrives, someone puts the items back on the shelf, and nobody ticks the restock box. Shopify's count stays two low, permanently — repeat across a season and you are reordering against a number that has understated your stock for months. The opposite error is just as common: restocking a return that arrived damaged and will never sell.

How to confirm: open a handful of recent refunded orders and read the timeline — a restock is logged there. Frequent refunds and rare restock lines is your answer.

The fix: process, not software. Refund when the goods are inspected, not when the email arrives. One person decides sellable or write-off and records it then — restock to the sellable location, or mark it damaged so it leaves available stock honestly. A return sitting undecided in a bin for three weeks is worse than either outcome, because your data says one thing and your shelf another.

Cause 7: The count is right in Shopify and wrong in reality

Nobody wants this one to be true, and in brands that manufacture it is the most common of all. Every system agrees, the integration is clean, and the shelf still has three when the software says fourteen. Units get miscounted at receiving, broken in the stockroom, given away as samples, or picked against the wrong barcode. None of that generates a webhook.

The only fix is counting, and the practical version is cycle counting: count a slice of the catalogue continuously instead of shutting down twice a year. Rank SKUs by revenue, then count A items monthly, B quarterly, C twice a year — ten minutes a day covers a small catalogue. Score it, or it will not stick:

Count accuracy = 1 − (Total absolute variance ÷ Total units counted) October cycle count, 12 A-grade SKUs: System says : 1,840 units Physically counted : 1,796 units Absolute variance : 96 units (some over, some under) Count accuracy = 1 − (96 ÷ 1,840) = 94.8%

The net gap is only 44 units but the absolute variance is 96 — errors in both directions cancel out, which is why a net figure flatters you. Target 98% or better on A items. Below that, your demand forecast and reorder points inherit the error. Log a reason code for every correction — damage, miscount, sample, receiving error — because after two months the reasons tell you which part of the process to fix.

Why one-way sync tools cause drift

Most cheap connectors are one-way: System A pushes quantities to Shopify on a schedule, nothing flows back. Three failure modes follow, and all three look like an integration bug from outside.

  • Stale windows. Between pushes, Shopify sells units System A does not know about. The next push overwrites Shopify's correct, order-adjusted number with an older one.
  • Silent failures. A push dies on a rate limit or timeout and nobody watches the log. Yesterday's numbers stay live for days.
  • No feedback. Corrections, restocks and POS sales made in Shopify never travel upstream, so the systems diverge a little more each day until someone reconciles by hand.

Two-way sync means each side owns something specific and both stay current. Orders and sales history flow from Shopify into the inventory system; authoritative stock counts flow back out. Because the directions carry different data, updates never collide — the store owns what sold, the inventory system owns what exists. That is how Honey Shelf's two-way Shopify sync works: sales in, finished goods out, per variant, with a sync log you can read when a number looks odd.

Be clear-eyed about what that buys you. Two-way sync eliminates causes 1, 3 and 5 almost entirely and makes 4 and 6 visible fast. It does nothing for cause 7 — no connector knows six units were dropped in the stockroom.

A 30-minute reconciliation you can run this week

Take your ten highest-revenue SKUs. For each: count the physical units, record Shopify's on-hand number for that location, read 30 days of adjustment history. Classify every gap — order-related, app-related, import-related, return-related, or unexplained. The distribution tells you where to spend effort: mostly app-related means fix ownership today; mostly unexplained means the integration was never your problem and counting is the whole answer. If you manufacture, run the same check on materials and part-finished goods — finished-goods accuracy sitting on top of untracked work in progress only looks solid.

Then write the rules down. Which system owns each location's count. Who may import a CSV. When refunds get restocked, and by whom. How often each ABC class gets counted. Integrations break loudly and get fixed in an afternoon; undocumented conventions break silently and cost you a season.

Honey Shelf Team

We build manufacturing intelligence for modern product brands.

Frequently asked questions

Either a system wrote a number that does not match reality, or reality moved without anyone telling the system. Open the variant's inventory adjustment history first: if an app or a CSV import made the last change, you have a sync conflict. If the history is quiet and the count is still wrong, the gap is physical — miscounted receipts, unrecorded damages or shrinkage — and only a cycle count will close it.

On hand is every unit physically at the location. Committed is the units already sold on unfulfilled orders. Available is what Shopify will still sell — on hand minus committed minus anything marked unavailable, such as damaged or quality-control stock. Incoming sits outside all three: it is on its way and cannot be sold until you receive it. Storefront listings run on available, so a store that looks understocked during a busy week is often just carrying a large committed number.

Decide which single system owns the stock number for each location, then remove inventory write access from everything else in Settings, Apps and sales channels. Two apps that both push absolute quantities on their own schedules will overwrite each other indefinitely, and the count you see depends only on which one ran last. One writer per location is the rule; the rest can read.

No. Two-way sync keeps two systems agreeing with each other, which removes the drift caused by scheduled one-way pushes and stale exports. It cannot tell you that six units were damaged in the stockroom and never recorded. Software fixes the causes that are digital; returns discipline, receipt discipline and cycle counting fix the ones that are physical.

One stock number. Both systems agree.

Honey Shelf syncs two ways with Shopify — sales history in, finished goods out, per variant — so your store and your floor stop telling different stories.

Start your free 30-day trial

No credit card required · Cancel anytime · Get set up in under 10 minutes