Nexus Logic SystemsShopify apps

Shopify's inventory value report doesn't match your app? On hand vs Available, since 1 October 2026

Updated · By Senoussi, developer of True COGS at Nexus Logic Systems

Short answer

Since 1 October 2026, Shopify's inventory reports count On hand units (available + committed + unavailable) instead of Available units, so an app or spreadsheet that still multiplies cost by Available shows a different total. The rest of the gap usually comes from four rules of Shopify's report: it multiplies by each variant's Cost per item, and it counts untracked items, items without a cost, and items at zero or below as 0. Compare units first, then cost, then the rows Shopify counts as 0, and the two totals reconcile line by line.

What changed on 1 October 2026

  • Shopify Help: Starting October 1, 2026, inventory reports measure stock by On hand quantity instead of Available quantity. (Shopify Help, inventory reports)
  • Days before 1 October 2026 still show Available, so past numbers don't change.
  • The Month-end inventory value report in the Shopify admin now opens with a banner saying the same.
  • So a total for 30 September and a total for 31 October are counted in two different ways. Part of the change between them is the switch, not your stock.

What On hand includes

On hand = available + committed + unavailable  (incoming is not counted)

  • Available: units customers can buy.
  • Committed: units for orders waiting to be fulfilled, units reserved in a draft order, and units in a transfer marked as ready to ship.
  • Unavailable: units set aside by apps or held for other reasons, such as damaged items, quality control or safety stock.
  • Not included: incoming units that are part of a transfer.

Source: the On hand definition in Shopify Help, inventory reports.

How Shopify values the stock

  • Per variant: Total inventory value is the cost per item multiplied by the ending quantity, and the Summary row adds them up. The ending quantity can be negative (Shopify Help).
  • What counts as 0: the ShopifyQL definition of ending_inventory_value says Untracked items, items without a recorded cost, and items with zero or negative ending stock contribute 0. (ShopifyQL inventory schema)
  • Which variants: the report includes variants adjusted or ordered in the last three years.

The report's own query, as the Shopify admin showed it on 28 October 2026:

FROM inventory
SHOW ending_inventory_units,
  ending_inventory_value
WHERE inventory_cost_is_recorded = true AND inventory_is_tracked = true
GROUP BY product_title,
  product_variant_title,
  product_variant_sku,
  inventory_item_cost
WITH TOTALS, PERCENT_CHANGE
SINCE startOfMonth(-1m) UNTIL endOfMonth(-1m)
ORDER BY product_title ASC
LIMIT 1000
VISUALIZE ending_inventory_value TYPE table

Three things to read in it:

  • WHERE inventory_cost_is_recorded = true AND inventory_is_tracked = true: variants without a cost and untracked variants are not listed at all.
  • SINCE startOfMonth(-1m) UNTIL endOfMonth(-1m): the report opens on last month. Pick the date you are checking.
  • LIMIT 1000: it lists at most 1,000 rows. On a larger catalog, check the row count before comparing line by line.

A worked example

Three variants, valued both ways. The mug also has 24 units incoming on a transfer.

Illustrative figures. "Cost × Available" is a sheet that multiplies cost by Available and keeps the minus sign.
VariantCostAvailableCommitted + unavailableOn handShopify's reportCost × Available
Mug$12.50406 + 248$600.00$500.00
Tote$8.00−40−4$0.00−$32.00
Phone casenone15015$0.00$0.00
Total$600.00$468.00

The $132.00 gap has two parts:

  • $100.00: 8 mug units committed or unavailable (6 + 2) × $12.50. Shopify counts them; Available does not.
  • $32.00: the tote below zero. Shopify counts it as 0; the sheet subtracts it.

The 24 incoming mugs count in neither column. The phone case has stock but no cost, so both show $0, and Shopify leaves it out of the report's rows.

Checked on a test store

We ran the comparison on a Shopify test store we use for development. Every line uses Shopify's Cost per item, so only the units differ.

Test store, 50 inventory items. Units read 28 October 2026; Shopify's figure is its report for 27 October, the last full day, run in ShopifyQL.
Units countedValue
Shopify's own report$8,701,224.20
On hand, from the Admin API, all locations$8,701,224.20
Available, from the Admin API$9,165,768.89
  • On hand matched Shopify's report to the cent. Available was $464,544.69 higher, 5.3% of the total.
  • One item explains more than all of it. It reported 59 available units but no on-hand quantity at its location: 59 × $7,936.40 = $468,247.60 on Available, $0 in Shopify's report. Across the other items, On hand was $3,702.91 higher than Available.
  • Two rows were valued at 0 although they had a unit count: a variant without a cost holding 4 units, and a variant at −10 units.
  • Grouped by location, the same day came to $8,701,837.38, which is $613.18 more. One variant was at −62 units at one location, and 62 × $9.89 = $613.18. The all-locations report sets those units against the other locations; the location view counts that location as 0.

Why the two totals differ, and how to check each

From Shopify Help and the ShopifyQL inventory schema, read 28 October 2026.
CauseWhat Shopify's report doesHow to check
Units countedOn hand from 1 October 2026; Available beforeCompare units per SKU before money
Cost usedEach variant's Cost per itemCompare cost per SKU; an app on weighted average or FIFO values at what you paid
No costCounts 0 and leaves the variant out of the rowsThe query below: "No" under cost recorded
Zero or belowCounts 0Sort by units, lowest first
Location viewThe all-locations report adds the locations first, then counts a total below zero as 0. Grouped by location, each location below zero counts 0Compare with the all-locations report, not a sum of locations
UntrackedCounts 0 and leaves the variant out of the rowsIs inventory tracking on for the variant?
Which variantsOnly those adjusted or ordered in the last three yearsLook for stock untouched for three years
DateUnits at the end of the last day of the period; opens on last monthUse the same day on both sides
Deleted locationsHistory from deleted locations is not shownDid a location close during the period?
Rows listedAt most 1,000 (LIMIT 1000)Check the row count before a line-by-line check

Reconcile in five steps

  1. Pick one day, for example the last day of the month, and use it on both sides.
  2. In Shopify, go to Analytics > Reports > Month-end inventory value and set that date. Note the Summary row: units and value.
  3. Compare units before money. If your app counts Available, its units are lower by the committed and unavailable units.
  4. Find what Shopify counts as 0. In the report's query editor, run the query below with your date. Rows at the top are below zero. Rows with "No" under Inventory cost is recorded have no cost.
  5. Compare cost per SKU on what remains. What is left after units and zero rows is cost.
FROM inventory
SHOW ending_inventory_units, ending_inventory_value
WHERE inventory_is_tracked = true
GROUP BY product_variant_sku, inventory_cost_is_recorded, inventory_item_cost
WITH TOTALS
SINCE 2026-10-27 UNTIL 2026-10-27
ORDER BY ending_inventory_units ASC
VISUALIZE ending_inventory_value TYPE table

Run on the test store on 28 October 2026, this query returned 47 rows and the same $8,701,224.20 total as the table above. The date format and ranges are in ShopifyQL's date syntax.

How True COGS counts stock now

  • Until 28 October 2026, True COGS counted Available units. It now counts Shopify's On hand units, summed across locations, with the same zero rules: untracked variants and variants below zero add nothing. Below zero is judged on the total across locations, as in Shopify's all-locations report.
  • Inventory value shows what Shopify's report gives for the same stock, next to the True COGS total, and the difference. With the units the same, that difference is cost: True COGS values each unit at what you paid on your deliveries; Shopify uses Cost per item.
  • If a variant's on-hand count cannot be read, it is counted at Available and the page says how many variants that is.
  • Inventory value is on the free plan. See also inventory value and COGS at month-end and weighted average cost on Shopify.

See also: Shopify inventory reports explained.

Questions merchants ask

Does Shopify's month-end inventory value report include unfulfilled orders?

Yes, from 1 October 2026. Units committed to unfulfilled orders are part of On hand, so the report counts them until the order is fulfilled. Before 1 October the report counted Available units, which leave them out.

Why did my Shopify inventory value go up in October 2026?

Most likely the switch to On hand: committed and unavailable units now count. Days before 1 October 2026 still show Available, so a change from September to October mixes real stock movement with the switch.

Does Shopify's inventory value include incoming stock?

No. Incoming units on a transfer are not part of On hand, so they are not counted until you receive them.

Why does Shopify's inventory report value some products at $0?

Untracked items, items without a cost, and items with zero or negative stock contribute 0. Items without a cost and untracked items are also left out of the report's rows.

Should inventory value use On hand or Available units?

On hand is closer to the stock you own: committed units stay on your shelf until they ship, and damaged units stay in stock until you write them off. Ask your accountant how to treat damaged or quality-control stock.

My app counts On hand too. Why is the value still different?

Cost. Shopify multiplies each variant's units by its Cost per item. An app that keeps weighted average or FIFO cost from your deliveries values the same units at what you paid, so the gap left is a cost difference, not missing stock.

Try True COGS free. True COGS is an inventory costing app for Shopify by Nexus Logic Systems. It records the price you paid on every delivery (a received purchase order or a transfer), with its share of freight and duty on paid plans, keeps every price with its date, and writes your moving weighted average cost, or FIFO cost on a paid plan, to Shopify's Cost per item. It is free for up to 25 variants with a cost on record; paid plans start at $29 a month or $290 a year.

Install from the App Store

Sources