guide

Shopify Inventory Not Updating? How to Find the Real Cause

Learn why Shopify inventory goes out of sync, how to diagnose the first bad event, and how to stop wrong stock counts from becoming cancelled orders.

Updated

A customer buys the last black hoodie in medium. Shopify says the order can be fulfilled. However, the warehouse shelf is empty.

If your Shopify store is at least moderately successful, you know this scenario a little too well. It always goes the same way: an apology email to the customer, order cancellation, and a scramble to figure out what went wrong.

If you’re in a hurry, here’s a TL;DR of this article:

  • When Shopify inventory doesn’t update as expected, it usually means one of three things: Shopify is showing the wrong state, the wrong location, or the count was overwritten after a valid update.
  • Shopify inventory is not one simple number. It can move between Available, Committed, Unavailable, On hand, and Incoming states, across multiple locations.
  • Orders, transfers, refunds, draft-order reservations, staff edits, bulk edits, third-party apps, and system processes can all change stock.
  • The safest fix is to find the first bad inventory event before you overwrite the count again.
  • If the same SKU keeps changing back, you probably have an event-chain problem, not a typing problem.

Shopify inventory may look like it is not updating when the number shown in Shopify does not match the number your operation can defend. The cause is often a location mismatch, an inventory state mismatch, a stale import, a third-party app overwrite, or a later adjustment that reverses an otherwise valid order or stock update. Shopify records adjustment history for tracked products, but the practical work is finding the first event where the Shopify count and physical reality diverged. (Shopify Help: Inventory adjustment history)

Got time to understand Shopify inventory quirks in depth? Continue reading.

What does it mean when Shopify inventory is not updating properly?

Sometimes the Shopify admin says 5 are available, but the storefront says sold out. Sometimes the product page says in stock, but the shelf is empty. Sometimes the number changes correctly after an order, then quietly changes back an hour later. Sometimes only one warehouse is wrong. Sometimes every location looks cursed.

From an operational perspective, all those look like the same problem. Unfortunately, they are not.

The useful question isn’t “Why is Shopify wrong?” It’s more specific:

Which count failed to update, where, and after which event?

Shopify inventory can be viewed and changed in the admin, tracked per product variant, and separated across locations. Shopify also has several inventory states:

  • Available,
  • Committed,
  • On hand,
  • Unavailable,
  • Incoming.

Available is the quantity for sale. Committed is reserved for orders. On hand is the physical total at a location. Unavailable is on hand but not sellable. Incoming is the amount of stock expected from transfers between locations or from purchase orders. (Shopify Help: Viewing inventory)

So when you notice that Shopify stock count seems wrong, you may be looking at:

  • the right SKU but the wrong state,
  • the right state but the wrong location,
  • the right location, briefly, before another system overwrote it.

Why Shopify inventory can look wrong even when it is updating

Think of Shopify inventory like a stockroom counter with several trays.

One tray says Available. One says Committed. One says Unavailable. One says Incoming. Each warehouse or retail store has its own set of trays.

Normally, an order moves units from Available to Committed. Meanwhile, a return from another customer may put a few units back. A transfer may move stock between places. A staff member may count the shelf and set a new number. An app may arrive later with its own opinion about the correct count and write it over.

The problem is that several people or workflows touched inventory in short sequence.

That is the rub: a current inventory number is not the same thing as the story behind it. Shopify can show you the current, point-in-time number, but e-commerce operators usually need the complete event chain.

How does Shopify update inventory after an order?

As we wrote above, Shopify can move inventory between states when someone places an order. In Shopify’s own example for its Inventory adjustment changes report, a new order for 3 units decreases Available by 3 and increases Committed by 3. (Shopify Help: Inventory reports)

The critically important distinction is that that is a state movement, not a subtraction.

A store owner may expect “12 in stock” to become “9 in stock.” Shopify may instead show a more precise picture:

StateBefore orderOrder for 3After order
Available12-39
Committed0+33
On hand12no physical change yet12

The warehouse shelf still has 12 until the order is picked. But only 9 are available for new buyers.

If your team is looking only at On hand, it may seem like the order did not update inventory. If your team is looking only at Available, it may seem like inventory disappeared before fulfillment. Neither view is “wrong.” They answer different questions.

Why does Shopify say a product is in stock when it isn’t?

This usually means Shopify’s Available count is higher than your physical count.

That can happen for plain reasons:

  1. A physical count was entered incorrectly.
  2. A CSV import or bulk edit set the quantity back to an older number.
  3. A third-party inventory app synced stale stock into Shopify.
  4. A return was restocked even though the item was damaged or missing.
  5. Stock exists at one location, but not at the location fulfilling online orders.
  6. “Continue selling when out of stock” is enabled.
  7. An order, transfer, reservation, or manual adjustment moved the count in a way the team did not notice.

Shopify’s default behavior is that customers cannot purchase a tracked item when inventory is at zero or below. However, sellers often choose to continue selling when out of stock, which is useful for preorders or incoming stock but inherently dangerous. Shopify also notes that multi-location inventory affects overselling behavior because inventory availability depends on location fulfillment settings. (Shopify Help: Selling when out of stock)

So the storefront can look wrong for two very different reasons:

  • One is intentional: you allowed overselling.
  • The other is accidental: Shopify believes stock exists because some earlier event made it exist on paper.

Why does Shopify inventory keep changing after I fix it?

This is the classic “I fixed it but it changed back” problem. That usually points to an overwrite.

A manual count is a fact about the shelf at one moment. But your store might have another system that believes something else: an ERP, WMS, 3PL portal, bundle app, preorder app, marketplace connector, POS workflow, or an automated recurring import.

If any of those systems syncs later, it may write its version of the truth back into Shopify. Based on my experience working with sellers running high-volume Shopify stores with complex operations that include multiple systems, online fulfillment locations in different regions, reverse logistics setups, and retail locations, this happens painfully often.

Shopify’s adjustment history can show inventory changes for tracked products, including who made the change, when it happened, and how it affected quantities. Shopify says third-party apps can automatically adjust inventory, and system processes can create adjustment activities such as reservations, transfers, and other inventory movements. (Shopify Help: Inventory adjustment history)

There is one important wrinkle: Shopify’s bulk editor can still be used to set available quantities directly, and Shopify says that when using the bulk editor for inventory managed in external systems, a record of inventory movements is not tracked. (Shopify Help: Adjusting inventory quantities)

While that doesn’t mean the change is invisible, it still makes the stock movement audit much harder in such situations. For operators, this is where “inventory not updating” becomes “inventory updated, then got overwritten.”

How multiple locations create Shopify inventory mismatches

A location in Shopify can be a warehouse, retail store, pop-up, dropshipping app, or third-party logistics service. Locations let merchants track inventory separately, fulfill orders from different places, run POS, and integrate fulfillment apps. (Shopify Help: Locations)

That functionality is incredibly powerful, but it’s also a rich source of confusion.

A SKU might have:

  • 0 available at the warehouse that fulfills online orders
  • 4 on hand at a retail store that does not fulfill online orders
  • 3 incoming from a transfer
  • 2 committed to existing orders
  • 1 unavailable in quality control

An Shopify seller looks at “total stock” and sees 10, while a customer sees Sold Out. Both can be explained.

Shopify’s official documentation also notes that a variant can have stock at a location even when that location doesn’t fulfill new orders. In those cases, On hand can still show stock, while Available may show a dash because that location isn’t used for new orders. (Shopify Help: Viewing inventory)

That’s by design, and it’s how location-specific inventory availability rules work in Shopify.

The operational failure happens when the team interprets “stock exists somewhere” as “stock is available for this order.”

A realistic teardown: the oversell that started before checkout

Here is a small incident that feels familiar because nothing in it is dramatic.

The store sells a hoodie variant:

  • SKU: HD-BLK-M
  • Product: Heavyweight Hoodie / Black / Medium
  • Locations: Toronto Warehouse, Queen West Retail
  • Fulfillment: Online orders route from Toronto Warehouse first
  • Starting physical shelf count at Toronto Warehouse: 12
TimeEventShopify viewPhysical / operational reality
08:55Warehouse team counts the bin12 Available at Toronto Warehouse12 on shelf
09:14Order #3184 sells 2 unitsAvailable -2, Committed +212 still on shelf, 2 need picking
09:21Warehouse Ops uploads a CSV based on the 08:55 countAvailable set back to 12Actual sellable stock is now 10
09:27Pick team fulfills Order #3184Committed units are pickedShelf drops to 10
09:40A returned hoodie is restocked at Queen West RetailQueen West gets +1Toronto Warehouse still has 10
10:03Online store still shows the variant availableShopify believes Toronto has 12 AvailableToronto has 10
10:11Two online orders sell 11 units totalOrders are acceptedOne unit cannot be fulfilled

The oversell did not start at 10:11. It started at 09:21, when an old count was written over a real order movement.

This is why “just fix the count” is sometimes too shallow. If the team changes Toronto Warehouse back to 10 without finding the CSV import or app job that wrote 12, the same thing can happen again tomorrow.

The first bad event matters, because it allows to diagnose the operational pattern which caused it.

Root Cause Analysis: known, likely, and unknown in an inventory mismatch

When a SKU goes wrong, and you’re looking to investigate the cause, it’s best to separate facts from guesses.

Known

Known facts are things the system or operation can prove:

  • Shopify’s current Available, On hand, Committed, Unavailable, and Incoming quantities.
  • The physical count from a recent stocktake.
  • Orders, refunds, transfers, and fulfillments touching the SKU.
  • Adjustment history visible for the product or variant.
  • The location selected in the inventory view.
  • Whether inventory tracking and “continue selling when out of stock” are enabled.

Shopify says adjustment history is available for tracked products and variants, but the product/variant page shows only the last 180 days. For history beyond that, Shopify points merchants to the Inventory adjustment changes report. (Shopify Help: Inventory adjustment history)

Likely

Likely causes are probable explanations of patterns that fit the evidence:

  • An app synced stale inventory.
  • A staff member used “Set to” after reading an old stock sheet.
  • A return was restocked when it should have gone to damaged or quality control.
  • A transfer was received at the wrong location.
  • A non-fulfilling location had stock, but the online fulfillment location did not.
  • A bulk edit corrected the number but did not preserve the full movement story.

Public Shopify forums, Reddit, and X offer plentiful anecdotal examples of such situations. Store owners often describe the pain as “inventory is always off,” “I can’t find a pattern,” “the website showed this as available,” or “stock changed and nobody knows why.” If any of those phrases instinctively come to mind when you’re struggling to audit a sequence of events which cause wrong stock level, you can use possible explanations above as the starting point.

Unknown

Unknowns, or unidentified causes, are where teams really get into trouble:

  • Which app or staff user caused a change, if the platform did not provide trustworthy attribution?
  • Why did a staff member make a manual adjustment if no reason was recorded?
  • Did a physical event happen but was never logged in Shopify?
  • What happened before the visible history window?
  • Was a storefront mismatch caused by inventory, publication, theme logic, cache behavior, or sales-channel configuration?

The best way to approach the unknowns is by conducting a thorough operational investigation, and to resist the urge to find something or someone to blame.

What should you check when Shopify inventory is not updating?

In the early stages of investigation, it’s best to start with one SKU. Don’t try to audit the whole product catalog, because that will only add to confusion.

By focusing on a single SKU, you will gain enough information to start seeing the patterns in the trail.

1. Check whether Shopify is tracking the product’s inventory

Shopify needs inventory tracking enabled before it can track and show inventory history for a product. The same setting area also contains the option to continue selling when out of stock. (Shopify Help: Set up inventory tracking)

For the problem variant, check:

  • Is inventory tracking enabled?
  • Is “Continue selling when out of stock” enabled?
  • Is the issue on every variant or only one variant?
  • Is the product managed by Shopify or by an app location?

If inventory is not tracked, Shopify is not trying to defend a precise count.

2. Check the location picker before checking the number

Many inventory mysteries are actually location issues in disguise.

Look at the exact location used for online fulfillment. Then look at retail stores, 3PL locations, app locations, and non-fulfilling locations separately.

If Toronto Warehouse has 0 Available and Queen West Retail has 4 On hand, the product might still be unavailable online depending on fulfillment settings. Shopify’s docs call out that inventory quantity at each location and location fulfillment settings can affect which items are considered out of stock. (Shopify Help: Selling when out of stock)

3. Compare Available, Committed, Unavailable, On hand, and Incoming

Do not compare the shelf only to “total stock.” Ask instead:

  • Did Available go down after the order?
  • Did Committed go up?
  • Is stock sitting in Unavailable because of safety stock, quality control, a draft-order reservation, or an app?
  • Is stock Incoming but not yet received?
  • Does On hand match the shelf after committed orders are picked?

Shopify defines these columns separately in the inventory view and adjustment history. Available is sellable. Committed is part of orders. Unavailable is on hand but not sellable. On hand is the total physical quantity at that location. Incoming is stock expected from transfers or purchase orders. (Shopify Help: Inventory adjustment history)

4. Review adjustment history for the product or variant

Open the variant and look for the moment the count split. Useful rows include:

  • Manual adjustments
  • Inventory corrections
  • Counts
  • Transfer receipts
  • Reservations created, updated, or deleted
  • App-created adjustments
  • Location removals
  • Data corrections

Shopify’s adjustment history includes an Activity column, a Created by column, state changes, and timestamps. It can show whether an adjustment was manual, app-driven, or caused by a system process when that information is available. (Shopify Help: Inventory adjustment history)

This is often where the story starts to appear. While it may not be enough to piece together the root case, it might be enough of a clue to stop guessing and start building an informed view of what actually happened.

5. Look for “Set to” events after valid movements

A dangerous pattern looks like this:

  1. Order reduces Available.
  2. Return, transfer, or fulfillment changes another state.
  3. Manual count or app sync uses “Set to.”
  4. The count jumps back to a round number.
  5. Everyone assumes Shopify failed to deduct the order.

“Set to” isn’t inherently bad. It’s correct immediately after a physical count. Shopify’s docs explicitly describe using Set to when you know the exact quantity, such as after a physical inventory count. (Shopify Help: Adjusting inventory quantities)

The risk is using “Set to” from stale information, and depending on the order volume that your store processes daily, the physical count might get stale in minutes, just like in our scenario.

If the count sheet is from 8:55 and orders keep coming in until 9:21, the sheet is no longer a source of truth.

6. Check apps that write inventory back to Shopify

Pay special attention to apps that touch:

  • Bundles
  • Preorders
  • Subscriptions
  • Dropshipping
  • 3PL or WMS sync
  • ERP sync
  • Marketplace listings
  • Returns and exchanges
  • POS workflows
  • Low-stock automation
  • CSV import/export

The key question is not “Which app is installed?” It is: Which app can write inventory quantities?

Some apps only observe. Some apps update stock levels. The second group belongs in your incident review.

7. Check transfers and receiving events

Transfers often create confusion.

Stock can be in transit, incoming, partially received, received at the wrong destination, or present at a location that does not fulfill online orders. Shopify redesigned inventory transfers in 2026 so merchants can create a transfer, move it to in transit, and receive it at the destination, with quantity changes visible at origin and destination during the process. (Shopify Changelog: Simpler inventory transfers)

While that workflow is better, it still needs good operational discipline.

If the transfer is not received, it is not the same as sellable stock. If it’s received at the wrong location, Shopify may be accurate while the storefront still cannot sell it.

When should you fix the count, and when should you investigate?

Fix the count when you have a clear one-off discrepancy.

For example: a staff member finds two damaged units, records the reason, and moves them out of Available. Shopify enables this by supporting unavailable states such as damaged, quality control, safety stock, and other. (Shopify Help: Adjusting inventory quantities)

Investigate before fixing when:

  • The same SKU changes back after correction.
  • The mismatch appears across many SKUs at the same timestamp.
  • The issue started after installing or changing an inventory app.
  • Orders show normal deductions, but available stock later increases.
  • Physical stock exists, but not at the location fulfilling online orders.
  • The adjustment history has app, bulk edit, reservation, or transfer events the team can’t explain.
  • The product says “in stock” online, but cancellations keep happening.

A one-off mismatch is likely a count problem. A recurring mismatch, on the other hand, is likely a systemic issue.

How do you stop Shopify inventory sync issues from recurring?

Unfortunately, you do not stop them with a spreadsheet. You stop them by reducing silent writes and making the event chain visible and easier to review.

A practical operating pattern:

  1. Name the source of truth for each SKU family. Shopify, ERP, WMS, 3PL, or POS. Not “whichever tab is open.”
  2. Limit write access. Apps that only need to read inventory should not write inventory.
  3. Use adjustment reasons. “Correction” is better than a mystery row. “Count,” “Damaged,” “Theft or loss,” and “Return restock” are better still when they match the event.
  4. Avoid stale bulk edits. If the stocktake file is old, subtract known orders before importing.
  5. Audit one SKU after fixing it. Watch whether it changes again, when, and from what kind of event.
  6. Separate reconciliation from investigation. Reconciliation corrects the count. Investigation explains why it became wrong in the first place.
  7. Document location rules. Especially for retail stores, 3PLs, pickup, and online fulfillment priority.

This is the part generic troubleshooting guides tend to skip. “Update your inventory settings” is not enough when the wrong number is being reintroduced by a later process.

Where Shopify’s native history helps

Shopify’s native inventory capabilities have improved over the past several years.

You can view product or variant adjustment history. Shopify inventory changes are automatically recorded for tracked products so merchants can see who made the change, when it happened, and how it affected quantities. The product/variant adjustment history covers the last 180 days. (Shopify Help: Inventory adjustment history)

Shopify also has Inventory adjustment changes and Inventory adjustments by count reports. These reports can show adjustments from manual admin changes, inventory apps, inventory transfers, and order fulfillments, and help store operators analyze patterns by dimensions such as staff members, locations, and apps. (Shopify Help: Inventory reports)

In May 2026, Shopify also announced fuller change tracking in the inventory adjustment workflow, recording source, destination, who made the change, and when if adjustments were made in the Shopify Store Admin. (Shopify Changelog: Inventory adjustment workflow now with full change tracking)

Where native Shopify history can still fall short

Native history in Shopify is strongest when you know where to look. Sadly, inventory messes rarely arrive neatly labeled and ready for audit.

You may have to start with a cancelled order, not a SKU timeline. You may know “black hoodie medium is wrong,” but not whether the first bad event was an order, app sync, return, transfer, staff edit, or bulk import. You may need to compare Shopify’s current number against a ledger of tracked changes over time. You may need to keep watching after the first correction.

That is where an observability layer like Retrace helps.

Retrace is not another inventory system. It is designed to sit beside Shopify and make stock changes easier to see. Retrace shows that Shopify stock changed, shows how the count changed over time, and compares Shopify’s current count with a tracked ledger. When attribution is available, Retrace shows who or what caused the change. When exact attribution is unavailable, the change is still surfaced instead of hidden.

What Retrace aims to bring to the table is clarity.

What to do next time Shopify inventory looks wrong

When the next mismatch appears, resist the first instinct to immediately correct every affected SKU.

Pick one high-value SKU and reconstruct the trail:

  1. Write down the SKU, variant, and location.
  2. Record Shopify’s Available, Committed, Unavailable, On hand, and Incoming quantities.
  3. Count the physical shelf.
  4. Check whether inventory tracking and continue-selling settings match your intent.
  5. Review adjustment history for the variant.
  6. Look for the first event where the count diverged.
  7. Check apps, bulk imports, transfers, returns, and reservations around that timestamp.
  8. Fix the count only after you understand whether the event was one-off or repeatable.
  9. Watch the SKU after correction.

The goal is a defensible inventory count that explains why Shopify and physical counts diverge.

FAQ

Why is my Shopify inventory not updating after an order?

It may be updating, but not in the column you are checking. A new order can decrease Available inventory and increase Committed inventory, while On hand may not change until the item is physically picked or fulfilled. Shopify’s inventory reports show this kind of Available-to-Committed state movement for orders. (Shopify Help: Inventory reports)

Why does my Shopify product say in stock but it isn’t?

The most common operational reason is that Shopify’s Available count is higher than the actual sellable stock. That can come from stale manual counts, app overwrites, incorrect return restocks, wrong-location inventory, or settings that allow overselling. Shopify lets merchants choose to continue selling when out of stock, and multi-location fulfillment settings can affect whether stock is considered available online. (Shopify Help: Selling when out of stock)

Can Shopify show who changed inventory?

Often, yes. Shopify’s adjustment history includes a Created by column, and its Inventory adjustment changes report can help analyze adjustments by dimensions such as staff member, app, location, and reason. But exact attribution still depends on what Shopify records and what surface you are reviewing. (Shopify Help: Inventory adjustment history)

Why does my Shopify inventory change back after I correct it?

That usually means another process wrote inventory after your correction. Check apps, ERP/WMS/3PL sync, marketplace connectors, scheduled imports, bulk edits, and returns workflows. The count may have been correct for a moment, then overwritten by a later event.

Should I reconcile inventory immediately?

Reconcile immediately when you have a simple physical-count correction and understand the cause. Investigate first when the same SKU keeps drifting, multiple SKUs change at once, or the adjustment history shows unexplained app, transfer, bulk edit, or reservation activity. Otherwise, you may correct the symptom and preserve the mechanism that caused it.

Consider Retrace

Still fixing the same SKU twice?

Retrace helps Shopify merchants see how stock counts changed over time, compare Shopify’s current count with a tracked ledger, and spot where the count stopped adding up. When attribution is available, Retrace shows who or what caused the change. When it is not, Retrace still surfaces the change.

Join the Retrace beta before your next cancelled order.