Sync Master
Blog

Available vs On Hand: The Shopify Inventory States That Decide Whether Your Sync Is Right

Shopify InventorySync Basics

Summary

Shopify does not store your stock as a single number. It splits it into on hand, available, committed, unavailable and incoming. Build a sync without knowing the difference and you get a system that works correctly while looking broken. Here is what each state means and which number belongs in your spreadsheet.

There is one question that comes up more than any other from people who have just set up an inventory sync. The sheet says 10, Shopify shows 8. The sync reported success, no errors anywhere, and yet the numbers disagree. Faced with that, most people start by suspecting the sync itself. In nearly every case, that is the wrong place to look.

To Shopify, stock is not a single number. For one product at one location, Shopify keeps several numbers at once. In this article we will walk through each of them carefully. Once you can see them, the mystery of 10 becoming 8 stops being a mystery and starts looking like exactly the correct behaviour.

Stock is not one number

Start with how we normally think about stock. In most operations, stock is the number of units on the shelf. Ten units means ten. Sell one and you have nine. It is beautifully simple, and there is nothing wrong with that instinct. The complication is that Shopify lives in a slightly more granular world.

One column in your sheet, five numbers in Shopify

When you manage stock in a spreadsheet, you usually have one quantity column per SKU. That column is what stock means to you. Shopify, meanwhile, holds on hand, available, committed, unavailable and incoming for that same SKU at that same location, all at the same time. There is no one-to-one mapping.

Most discrepancies are born in that asymmetry. Start syncing before you have decided which of Shopify's numbers your one column corresponds to, and you will inevitably hit moments where what you wrote and what you see do not match. Decide the mapping, though, and the very same behaviour becomes something you expected. Shopify inventory basics covers locations and tracking first.

Which number your customers are actually seeing

If your goal is to avoid overselling, the question that matters is which number decides whether a customer can buy. The answer is available. Shopify's Help Center defines available as inventory you can sell. Whether the add-to-cart button works, whether the page shows sold out, all of it hangs on that one figure.

In other words, how many units sit on the shelf is not directly relevant to the customer experience. Ten on the shelf with three already ordered and awaiting shipment means seven are sellable right now. That sellable count is available, and it is the number your sync ultimately exists to protect. Hold that thought and later decisions get much easier.

This is where most sync discrepancies come from

Back to 10 becoming 8. Say you wrote 10 in the sheet and it landed as on hand. If two orders are placed but unfulfilled at that moment, available reads 8. On hand is 10, available is 8, both numbers are correct, and the sync did its job. You were simply looking at a screen showing a different figure.

Without that picture, people conclude the sync is broken and start editing the sheet by hand. The edit gets overwritten on the next run, the number comes back, and after a few days of that nobody trusts any of it. Understanding the states is not trivia — it is the foundation that keeps your team's trust in the numbers intact.

Shopify's inventory states, one at a time

Now let us go through the states in order. The vocabulary sounds technical, but there is only one relationship to memorise: on hand equals available plus committed plus unavailable. With that sum in your head, everything else is just a matter of what each term covers.

On hand — everything physically there

On hand is every unit that actually exists at that location, regardless of whether it can be sold. Units awaiting shipment count. Units too damaged to sell count. This is the number your physical stock count should be compared against, and the only one that maps cleanly to what a person can see on a shelf.

One behaviour worth knowing: editing the available quantity directly in the Shopify admin moves on hand by the same amount. Increase available by five and on hand goes up by five too. The misconception that you can quietly nudge available without touching shelf counts starts right here.

Available — what can be sold right now

Available is inventory you can sell: not committed to any order, not reserved for any draft order. As we saw above, this is the number that drives storefront display and purchasability. Whenever anyone talks about overselling protection, they are almost always talking about this figure whether they name it or not.

In sync design, the fork in the road is whether you write available directly or write on hand and let Shopify derive available for you. Neither is inherently right. The correct choice is whichever matches what the number in your sheet actually means to the people entering it.

Committed — sold but not yet shipped

Committed is the number of units that are part of a placed order but not yet fulfilled. The moment a customer buys, those units move out of available and into committed. They are still physically on the shelf, so on hand does not change. Once the order ships, they leave both committed and on hand together.

Draft orders, notably, do not count as committed — an order has to be placed for that. According to the Help Center, units held back for a draft order are treated as unavailable instead. If you run B2B quoting through draft orders, knowing that distinction makes your numbers considerably easier to read. How to handle that on the sheet side is deducting unfulfilled orders.

Unavailable and incoming

Unavailable is stock you have but cannot sell: damaged units, units awaiting quality control, safety stock deliberately held back, and reservations for draft orders. The fact that safety stock can be expressed on Shopify's side as unavailable is worth remembering — it widens your options when designing how buffers work.

Incoming is stock on its way to the location, arriving via transfers, purchase orders or apps. The important part is that incoming is not sellable until it has been received, and it does not count toward on hand. Selling stock that has not landed yet is what happens when that boundary gets blurry.

  • On hand — every unit at the location; the sum of available, committed and unavailable
  • Available — sellable right now; drives storefront stock display and purchasability
  • Committed — ordered but not yet fulfilled; leaves on hand once the order ships
  • Unavailable — damaged, in quality control, held as safety stock, or reserved for draft orders
  • Incoming — in transit via transfers or purchase orders; not sellable and not counted in on hand until received

Designing a sync around the states

With the states clear, let us turn them into design decisions. There are three: which number goes into the sheet, whether you write absolute values or deltas, and how you handle the timing where unfulfilled orders come into play. We will take them in order.

Which number belongs in the sheet

For most stores, on hand is the natural answer. The reasoning is simple: what warehouse and shop staff can actually count is units on a shelf. Expecting a person to work out the sellable figure is unrealistic — committed changes minute by minute, and Shopify already knows it perfectly well.

In a setup like Sync Master, where the spreadsheet is treated as the single source of truth for stock, this division works especially cleanly. People write only what they can count, and the subtraction is left to Shopify. When responsibilities are that clearly split, the process survives staff changes.

Overwriting versus adjusting

Stock can be applied either as an absolute overwrite or as a delta adjustment. If your sheet is the single source of truth, overwriting is the default. Whatever the sheet says becomes the truth, so no matter what happens along the way, the numbers converge back on the sheet. That predictability makes recovery far easier to reason about.

Overwriting does come with a caveat. You need to decide in advance how SKUs missing from the sheet and accidentally blank cells are handled, or you risk writing zeros you never intended. Agree with your team before go-live whether a blank cell means skip this row or means zero. It takes one conversation and saves a bad afternoon. Full sync or incremental sync? compares overwriting everything with sending only changes.

The timing trap around unfulfilled orders

The other thing worth knowing is what happens when a stock count and incoming orders overlap. If orders arrive while somebody is counting the shelf, the figure they finish with does not yet reflect those orders. Push that number in as on hand and Shopify ends up with more stock than genuinely exists.

The fix is not complicated: shorten the gap between counting and syncing, and apply changes when order volume is low. If you can set up a scheduled sync, simply running it before opening or overnight removes a good share of this class of drift. Choosing a better hour is about the cheapest accuracy improvement available.

Checks that actually work day to day

Finally, a few habits for ongoing operation. However well the mechanism is built, drift stays invisible without someone looking. Nothing elaborate is required — a handful of checks that each take a few minutes is genuinely enough.

A three-minute reconciliation

Pick five fast-moving SKUs and put the sheet figure next to Shopify's on hand. The key is comparing against on hand, not available. Available is smaller by whatever is committed, so comparing to it makes every check look like a discrepancy. Simply comparing against the right number removes a lot of needless worry.

When you first set up a sync, or after changing the layout of your sheet, run a connection test before pushing everything through. Confirming that a few SKUs land as expected before committing to a full run is a habit that all but eliminates large, painful do-overs.

How to read a mismatch

  1. 01Open the SKU in Shopify's inventory view and read on hand, available, committed and unavailable side by side
  2. 02If on hand matches the sheet, the sync is fine — the difference should be fully explained by committed or unavailable
  3. 03If on hand does not match the sheet, check that the SKU exists in the sheet and that no rows or columns have shifted
  4. 04If it still does not add up, look at recent human activity: stock counts, returns, transfers received

Working through it in that order separates a genuine sync problem from a misread state from a manual edit. In practice, a large share of cases resolve at step one or two. Not jumping straight to the settings is the single biggest time-saver here.

Getting your team to use the same words

Something that helps more than you would expect: agreeing on vocabulary. When warehouse staff say stock, they usually mean on hand. When customer support says stock, they usually mean available. Two people using one word for two different numbers will talk past each other indefinitely.

No formal rules needed. Consciously saying units on the shelf and units we can sell in internal conversation visibly reduces misunderstandings. Naming the sheet column on hand quantity helps too — when the meaning is written into the header, new joiners never have to guess.

Shopify's inventory states look fussy at first, but what they actually encode is the distinction every operation already makes in its head: what is on the shelf, what we can sell, what is sold but not gone yet, and what is here but not sellable. Only the vocabulary is unfamiliar.

Once that distinction is second nature, designing an inventory sync gets markedly easier. Put countable numbers in the sheet and let Shopify do the subtraction. When something looks off, compare against on hand first. Those two principles protect most of the trust your team places in the numbers. Next time the figures seem wrong, check which state you are looking at before you go anywhere near the settings.

Related reading

Other articles you might like

Stop pasting stock numbers by hand.

Install Sync Master on Shopify and run your first sync in under five minutes.