What this example is
This is an invented fixture for one location, not a customer record and not a result from a real store. The products, quantities and rule are made up to show the method. Nothing here was executed against a live system.
- One Shopify location, four products.
- The other system reports units on the shelf and units allocated to open orders.
- Rule R1, written down before comparing: sellable stock equals on shelf minus allocated, and Shopify available should equal it.
The reconciliation sheet
Each row compares the same product at the same location at the same time. Shopify committed units are shown so that the committed state is not mistaken for drift.
If the matrix is wider than the box, scroll horizontally to read every column. Keyboard: focus the matrix and use Left/Right.
SKU Location Shopify Shopify Other system Other system Rule R1: sellable = Diff Status
avail. committed on shelf allocated on shelf - allocated
TS-S Main 12 3 15 3 12 0 match
TS-M Main 8 2 12 2 10 -2 explained: 2 units received, not yet in Shopify
TS-L Main 5 0 5 0 5 0 match
TS-XL Main 20 0 16 2 14 +6 UNEXPLAINED: check sync log for an absolute writeReading each row
TS-S and TS-L match under the rule. TS-M differs by two, and the reason is a recorded event: two units were received in the warehouse list and have not reached Shopify yet, so it is explained and should clear on the next run. TS-XL differs by six with no recorded reason, so it is the finding. Shopify shows more sellable stock than the warehouse list says exists.
- A zero difference needs no action.
- An explained difference gets an owner and a date to clear.
- An unexplained difference is investigated before anything is changed.
What would be checked next for the unexplained row
A typical cause for Shopify showing more than the other system is an absolute write that was based on an older read, so sales made in between were erased. The check is to compare the sync log with Shopify's adjustment history for that product around the time of the last run: was a total written, and were there sales just afterwards? A sync that compares before writing, or sends changes instead of totals, would not erase them. This is a hypothesis to test, not a conclusion.
- Compare the time of the last sync write with the times of recent orders for the product.
- Check whether the sync writes a total or a change.
- Check which Shopify location the sync wrote to.
What a clean result looks like
After a correction, the same sheet is rebuilt on a test store: every difference is zero or explained, a repeat run changes nothing, and a test sale reduces both systems once. The sheet is evidence for the person accepting the work, who can recompute any row from the two exports.
What this example leaves out
It leaves out more than one location, damaged or reserved stock, product-code mismatches and any count of physical stock. A physical count is the owner's decision, and a reconciliation cannot say what is truly on the shelf.
Sources and limits
- Shopify developer documentation: Inventory management apps Checked 2026-10-11.
- On hand is the sum of available, committed, reserved, damaged, safety stock and quality control, and available is what can be sold.
- An adjust mutation applies a change while a set mutation writes an absolute value.
- Shopify Admin GraphQL: inventorySetQuantities Checked 2026-10-11.
- A set mutation compares the stored quantity with a supplied value unless the comparison is ignored, which protects against concurrent writers.