Shopify Available vs On Hand explained: formulas, UI mapping, and fixes

If you’re reconciling inventory, “Shopify available vs on hand” comes up fast. Here’s the quick answer: Available is what you can sell now. On hand is what you physically have at a location, including items tied up in orders or unavailable.

Available vs On Hand: the quick answer

Plain-language definitions

  • Available: Sellable now. What the online store and POS can reserve for new orders.

  • On hand: Physical stock at a location. It includes anything in the building, even if not currently sellable.

  • Big idea: Available can be lower than on hand because some units are committed to open orders or marked unavailable.

Formulas and what they imply

  • On hand = Available + Committed + Unavailable

  • Available = On hand − Committed − Unavailable

  • Committed = units reserved by open, unfulfilled orders.

  • Unavailable = units you’ve flagged as not sellable (damaged, QC hold, etc.).

Visual flow:

  • You receive stock → On hand increases → Available increases (unless you mark some Unavailable).

  • Customer orders → Committed increases → Available decreases (On hand stays the same).

  • You fulfill → On hand decreases → Committed decreases.

  • You cancel/restock → Committed decreases → Available or Unavailable increases.

When each number matters (selling vs physical stock)

  • Selling decisions: Use Available to prevent overselling and power sales channels.

  • Physical counts and valuation: Use On hand to match what’s in the building and value inventory.

  • Capacity planning: Watch Committed and Incoming to anticipate gaps.

All inventory states and how they relate

Available

  • What can be sold right now across enabled channels for that location.

  • Goes down when orders are created, up when orders are canceled/restocked or when stock is received.

On hand

  • What is physically in the location, regardless of sellability.

  • Only changes with receipts, fulfillments, returns, and adjustments.

Committed (open orders)

  • Units reserved by unfulfilled order line items.

  • Drops as items are fulfilled or orders are canceled.

Unavailable (damaged/held)

  • Units physically present but not sellable (damage, quarantine, hold).

  • Reduces Available but remains part of On hand.

Incoming (transfers and POs)

  • Units on the way via transfers or purchase orders.

  • Not part of On hand until received; doesn’t affect Available until received.

Formula cheat sheet

  • On hand = Available + Committed + Unavailable

  • Available = On hand − Committed − Unavailable

  • Committed = On hand − Available − Unavailable

More time, More Sales

AI Forecasting For Shopify Merchants

AI Forecasting For Shopify Merchants

Sign Up

Where to see these numbers in Shopify

Inventory page and product detail

  • Products > Inventory shows per-variant quantities by location: On hand, Committed, Available, and Incoming.

  • On a product variant page, open “Inventory at locations” to see the same breakdown.

Locations view

  • Settings > Locations lists locations and lets you enable inventory tracking per location.

  • Each location holds its own On hand, Committed, Available, and Incoming.

Transfers and incoming

  • Products > Transfers shows Incoming by transfer and variant.

  • When you mark items as received on a transfer, Incoming drops and On hand increases.

CSV export fields

  • Products > Inventory > Export includes per-location Available columns.

  • On hand, Committed, and Unavailable typically do not export in the Inventory CSV; use reports or the admin UI for those.

  • Product CSV exports include inventory policy and SKU data but not the full per-location on-hand breakdown.

Reports and analytics notes

  • Use Inventory reports for On-hand quantity, Committed inventory, Available, and aging.

  • Many reports snapshot at day boundaries; reconcile using the same time window to avoid timing mismatches.

How quantities change through the order lifecycle

Order created (Available vs Committed)

  • Creating an order reserves stock:

    • Available decreases.

    • Committed increases.

    • On hand does not change.

Worked example 1 (order creation):

  • Starting: On hand 50, Available 50, Committed 0, Unavailable 0.

  • Order for 3 created: Available 47, Committed 3, On hand 50.

Fulfillment (On hand vs Committed)

  • Fulfilling removes physical stock:

    • On hand decreases by the fulfilled quantity.

    • Committed decreases by the fulfilled quantity.

    • Available does not change at fulfillment.

Worked example 2 (fulfillment):

  • Before fulfillment: On hand 50, Available 47, Committed 3.

  • Fulfill the 3: On hand 47, Committed 0, Available 47.

Cancellation and refund

  • Canceling an unfulfilled item:

    • Committed decreases.

    • Available increases (if restocking to sellable).

    • On hand unchanged.

  • Refunding after fulfillment doesn’t change quantities unless items are returned and restocked.

Worked example 3 (cancellation before fulfillment):

  • Before cancel: On hand 20, Available 15, Committed 5.

  • Cancel 2 unfulfilled items: Committed 3, Available 17, On hand 20.

Return and restock options

  • Return with restock to Available:

    • On hand increases, Available increases.

  • Return with restock to Unavailable (QC/damage hold):

    • On hand increases, Unavailable increases (Available unchanged).

  • No restock:

    • No inventory change; treat as write-off if later deemed unsellable.

Worked example 4 (return with QC hold):

  • Before return: On hand 40, Available 40, Committed 0, Unavailable 0.

  • Customer returns 2 damaged, restock as Unavailable:

    • On hand 42, Unavailable 2, Available 40.

Partial fulfillments

  • Splitting an order:

    • Fulfilled part reduces On hand and Committed accordingly.

    • Remaining unfulfilled stays Committed.

  • Available remains unaffected until cancel/restock or new receipts.

Worked example 5 (partial fulfillment):

  • Before: On hand 100, Available 90, Committed 10.

  • Fulfill 4 of the 10:

    • On hand 96, Committed 6, Available 90.

Transfers, receiving, and adjustments

Incoming vs On hand on arrival

  • Creating a transfer increases Incoming only.

  • Marking items as received moves them from Incoming to On hand.

  • Available increases as received units become sellable.

Worked example 6 (transfer received):

  • Before: On hand 10, Available 8, Committed 2, Incoming 30.

  • Receive 30 all sellable:

    • On hand 40, Available 38, Committed 2, Incoming 0.

Receiving into Available vs Unavailable

  • Receive sellable goods to Available.

  • Receive questionable goods to Unavailable to avoid overselling.

Worked example 7 (mixed receipt):

  • Receive 10 total; 8 sellable, 2 damaged:

    • On hand +10, Available +8, Unavailable +2.

Damage/quality holds

  • Move units from Available to Unavailable when issues arise.

  • This lowers Available but keeps On hand constant.

Manual adjustments and audit trail

  • Products > Inventory > Adjust stock lets you add or remove On hand.

  • Use reason notes (cycle count, damage, shrink) to maintain an audit trail and explain variances.

Daily cutoff timing considerations

  • Reports may snapshot at local midnight.

  • If you reconcile mid-day, compare against live admin values, not previous-day snapshots.

Multi-location and sales channels

Per-location states

  • Each location tracks its own On hand, Available, Committed, Unavailable, and Incoming.

  • Orders reserve and ship from a single location unless split by custom flows or apps.

Aggregated availability for online store

  • Online storefront availability is the sum of Available across locations assigned to the Online Store channel for that product.

  • If a location is not enabled for a channel, its Available does not count toward that channel.

Order routing implications

  • Shopify order routing reserves from the chosen location.

  • If routing chooses a location with low Available, it can block selling even if other locations have stock not enabled for that channel.

Local pickup and POS notes

  • Local pickup typically reserves stock from the pickup location.

  • POS draws from the POS location’s Available; ensure POS-enabled locations have accurate counts.

Preventing oversell across locations

  • Keep correct channel assignments and routing rules.

  • Avoid hidden oversell by ensuring all sellable locations are assigned to the online channel.

Preorders, overselling, and negative inventory

Continue selling when out of stock

  • If a variant’s inventory policy is set to “continue selling,” Available can go to zero and negative.

  • Orders will still create Committed quantities; On hand may become negative if you fulfill without stock.

How Available can go negative

  • When “continue selling” is on, each new order reduces Available below zero.

  • Use with care and clear lead times.

Operational safeguards

  • Set alerts when Available hits thresholds.

  • Limit “continue selling” to SKUs with reliable inbound dates and suppliers.

Reconciling after receiving stock

  • New receipts raise On hand and Available, moving negative Available back toward zero.

  • If Available is negative when you receive, some inbound quantity will first offset the deficit.

Reporting and API mapping

UI vs CSV field mapping

  • Admin UI shows On hand, Committed, Available, Incoming.

  • Inventory CSV export lists Available by location columns.

  • Use inventory reports to see On-hand and Committed by date and location.

REST Admin API Available field

  • The REST InventoryLevel resource exposes available and incoming per location.

  • Committed and Unavailable are not returned directly in REST; derive from orders and adjustments or use reports.

Deriving On hand programmatically

  • Use the formula: On hand = Available + Committed + Unavailable.

  • If you do not have Unavailable by API, track it via adjustment events or constrain your calculation window to times when Unavailable is known to be zero.

  • For accurate Committed, sum unfulfilled quantities on open orders per location for the SKU.

Common integration pitfalls

  • Treating Available as physical stock leads to undercounting during open order spikes.

  • Ignoring channel/location assignment causes mismatched storefront availability.

  • Not accounting for Unavailable inflates sellable stock.

  • Mixing report snapshots with live API reads creates timing discrepancies.

Troubleshooting: quick fixes

Available is 0 but On hand > 0

  • Check Committed. If Committed > 0, Available may be correctly zero.

  • Check Unavailable. Move units back to Available if they are sellable.

  • Verify channel assignment. The location might not be assigned to the online store.

  • Reconciliation quick check:

    • Compute Expected Available = On hand − Committed − Unavailable.

    • If mismatch, look for pending transfers, manual adjustments, or apps reserving stock.

Negative Available

  • Confirm “continue selling” is enabled for that variant.

  • Receive stock or cancel orders to bring Available toward zero.

  • Review backorder promise dates and update product messaging.

Unexpected Unavailable spike

  • Review recent returns and receiving logs for QC holds.

  • Audit manual adjustments for damage or shrink entries.

  • If units are now sellable, reclassify from Unavailable to Available.

Transfer received but numbers unchanged

  • Ensure you marked items as received on the transfer, not just created the transfer.

  • Confirm the correct destination location.

  • Check for receiving into Unavailable by mistake.

Apps or channels causing mismatch

  • Check reservation or pre-order apps that hold stock by creating hidden commitments or drafts.

  • Align channel-specific inventory reservations with Shopify’s Committed to avoid double-reserving.

Decision tree (fast triage):

  • Is Expected Available = On hand − Committed − Unavailable? If yes, values are consistent.

  • If no:

    • Incoming recently received? Verify transfer receipts.

    • Adjustments made? Review inventory history.

    • App reservations? Temporarily disable and recheck.

    • Multi-location routing? Confirm which location the order committed against.

Operational best practices

Receiving and counting workflow

  • Receive against transfers to keep Incoming accurate.

  • Separate sellable vs QC hold at receiving to set Unavailable correctly.

  • Run periodic cycle counts and adjust On hand with reasons.

Return/restock standards

  • Always choose restock destination: Available for sellable, Unavailable for suspect items.

  • Inspect returns promptly to move Unavailable back to Available when cleared.

Adjustment reason codes

  • Standardize reasons: cycle count, damage, shrink, QC hold, rework.

  • Use notes on every adjustment for auditability.

Alerts and automation (Shopify Flow)

  • Trigger alerts when:

    • Available falls below a threshold.

    • Expected Available deviates from formula beyond a tolerance.

    • Unavailable spikes day over day.

  • Auto-create transfers or POs when Available is projected to hit zero.

Periodic reconciliation checklist

  • Per location, per SKU:

    • Note On hand, Available, Committed, Unavailable.

    • Calculate Expected Available = On hand − Committed − Unavailable.

    • Investigate any difference from actual Available.

    • Cross-check transfers: Incoming vs receipts.

    • Review recent orders, fulfills, cancels, returns, and adjustments.

  • Simple calculator:

    • Input On hand, Committed, Unavailable.

    • Compute Available = On hand − Committed − Unavailable.

    • If negative, confirm oversell policy and backorder plan.

Looking for more tips to help manage your Shopify store check out our e-commerce blog.

FAQs

Why is Available different from On hand in Shopify?

Available excludes units reserved by open orders (Committed) and units not sellable (Unavailable). On hand includes everything physically in the location.

Why is Available zero when On hand is greater than zero?

Because Committed and/or Unavailable consume all sellable units. Check the formula: Available = On hand − Committed − Unavailable.

Do draft orders or abandoned checkouts reduce Available?

Draft orders and abandoned checkouts do not reduce Available until converted to orders. Only actual orders create Committed quantities.

How do transfers and Incoming affect Available and On hand?

Creating a transfer increases Incoming only. Receiving the transfer increases On hand. Available increases when received units are marked sellable.

What happens to inventory when I fulfill, cancel, or refund an order?

  • Fulfill: On hand and Committed decrease; Available unchanged.

  • Cancel unfulfilled: Committed decreases; Available increases.

  • Refund without restock: No inventory change. With restock, On hand increases to Available or Unavailable.

How can Available become negative and how do I fix it?

With “continue selling” enabled, new orders can push Available below zero. Receive stock, cancel orders, or disable the setting to recover.

How do I map these fields in CSV exports and the API?

Inventory CSV exports show Available by location. The REST Admin API returns available and incoming per InventoryLevel. Derive On hand as Available + Committed + Unavailable using order and adjustment data or inventory reports.

Check out our range of Shopify Merchant tools to help you and your Shopify store.

Ditch CSV Exports and Excel Formulas

Ditch CSV Exports and Excel Formulas

AI Forecasting For Shopify Merchants

AI Forecasting For Shopify Merchants

14 Day Free Trial