Shopify inventory value: how to calculate it, check it, and reconcile it
How to calculate Shopify inventory value from your own exports, check it against the native report, and reconcile every dollar of difference in 30 minutes.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
Two honest people can compute your inventory value on the same day and get two different numbers, and both can be right. On October 31, one Shopify store's spreadsheet said its stock was worth $2,724.95. Shopify's own Month-end inventory value report said $2,756.75. The $31.80 gap wasn't an error on either side — each number used a slightly different definition of "how many units" and "what they cost."
That's the whole game. Inventory value is units × cost per item, and every disagreement traces to which units and which cost each method counts. This guide shows the formula, how to compute the number from your own exports, how to check it against the native report, and a 30-minute monthly routine that keeps the two within explaining distance.
What Shopify actually has: one cost field, one quantity per state
Shopify stores exactly one cost per variant: the Cost per item field on the product. There are no cost layers, no landed-cost allocation, and no per-receipt costing. Gift card products don't carry a cost per item at all (Shopify Help Center, "Adding cost per item to products," accessed November 2026). The same field feeds your profit reports and your COGS — fill it in once and several reports inherit it.
Quantities live per variant, per location, per state: Available (sellable), Committed (promised to open orders and drafts), Unavailable (set aside for damage, QC, or holds), and Incoming (on the way, not yet received). On hand is the sum of the first three.
So any "inventory value" is a choice of quantity basis multiplied by a choice of cost. Shopify's native number uses On hand × current cost per item. If your accountant wants FIFO, weighted average, or retail method, that's a method decision made outside the admin — the inventory valuation methods guide owns that comparison. Everything below computes the number; it doesn't re-litigate the method.
Compute the number from two exports
You need costs from one file and quantities from another, then a join:
- Export the product CSV (Products → Export). It carries Handle, option values, SKU, and the Cost per item column for every variant.
- Export the inventory CSV (Products → Inventory → Export) and choose All states. This gives one row per variant per location with On hand (current), plus the Committed and Unavailable columns. The simpler "Available" export hides committed and damaged units, which matters when you reconcile later.
- Join on Handle + option values. The SKU column in the inventory CSV is for readability only — importing it doesn't update SKUs, and blank or duplicated SKUs are common enough that SKU joins misfire (Shopify Help Center, "Exporting and importing inventory with a CSV file," accessed November 2026).
- Multiply and sum: value = Σ (on-hand quantity × cost per item).
Here's a worked slice from an illustrative dog-gear and hiking-socks store with about 1,400 variants — five SKUs, October 31, All-states export:
| SKU | Item | On hand | Cost per item | Line value |
|---|---|---|---|---|
| DGH-HAR-MED | Trail harness, medium | 34 | $14.20 | $482.80 |
| DGH-LEAD-150 | 1.5 m trail lead | 62 | $6.10 | $378.20 |
| TRT-PCH-OLV | Treat pouch, olive | 41 | $9.25 | $379.25 |
| SOCK-HIK-MRG-M | Merino hiking sock, M | 118 | $7.35 | $867.30 |
| SOCK-HIK-MRG-L | Merino hiking sock, L | 84 | $7.35 | $617.40 |
| Total | 339 | — | $2,724.95 |
Before you trust any total, run the blank-cost audit: filter the product CSV for empty Cost per item cells. This store's 240 fox enamel pins had no cost filled in — they'd have added $456.00 if anyone had typed it, but in both the spreadsheet and Shopify's report they contribute $0.00. The value number never warns you about this; it just shrinks. Blank costs are the most common reason a small store's inventory value quietly understates reality, and no reconciliation will surface them because both sides agree at zero.
Check it against the native report
Shopify computes its own version. In the admin: Analytics → Reports → filter Category to Inventory → Month-end inventory value. The report lists product, variant, SKU, the variant's Cost, Ending quantity, and Total inventory value (cost × ending quantity), with a grand total in the Summary row (Shopify Help Center, "Inventory reports," accessed November 2026).
Three things define what that report counts, as of November 2026:
- It measures On hand, not Available. Since October 1, 2026, inventory reports count committed and unavailable units too; before that date they counted Available only. Historical rows keep their old basis, so a year-over-year comparison mixes definitions.
- It excludes Incoming. Units on a transfer that hasn't landed don't appear.
- It only includes variants that were adjusted or ordered in the last three years. A variant that has sat untouched since 2023 — with real units on a shelf — is absent from the report entirely. Inventory-based history also only reaches back to October 1, 2023.
Ending quantities can go negative when a variant oversells with "continue selling when out of stock" enabled, and the report will happily multiply a negative count by cost. A spreadsheet that clamps negatives at zero will disagree with the report by exactly those units.
Reconciling the two numbers
When the report and your spreadsheet disagree, the gap is one of four drivers:
| Driver | Effect vs your export math | Fix |
|---|---|---|
| Quantity basis | Report counts Committed + Unavailable; an available-basis spreadsheet doesn't | Use the All-states inventory export |
| Three-year variant scope | Dormant variants are missing from the report but present on your shelf | Add them manually from your export |
| Blank or stale costs | Both sides show $0 and neither complains | Blank-cost audit every month |
| Timing | The report is a month-end snapshot; your export is "now" | Export on the last calendar day, after close |
Now the reconciliation for the store above, October 31:
| Step | Amount |
|---|---|
| Spreadsheet, on-hand basis | $2,724.95 |
| + 3 harness units committed to open orders: 3 × $14.20 = $42.60 | +$42.60 |
| + 6 damaged sock pairs set Unavailable: 6 × $7.35 = $44.10 | +$44.10 |
| − 9 units of a retired lead color, untouched since 2023, absent from the report: 9 × $6.10 | −$54.90 |
| = Month-end inventory value report | $2,756.75 |
Every dollar of the $31.80 difference now has a name. That's the standard to hold: not zero difference, but zero unexplained difference. A variance you can name in one line is healthy; a variance that needs three guesses is a count problem wearing a valuation costume, and the fixes live in your count process, not your spreadsheet.
The 30-minute monthly routine
Run this on the last calendar day of the month, after close:
- Export the product CSV and the All-states inventory CSV.
- Compute Σ on-hand × cost; run the blank-cost filter; fill the gaps before computing, not after.
- Open the Month-end inventory value report for the month and note the Summary row.
- Reconcile to named dollars: basis, dormant variants, timing, negatives.
- Log the number and the variance reasons in one row of a running sheet.
That log matters more than the number itself when someone else asks for it. A lender or insurer wants to see that the figure came from somewhere and that you understand its edges — the same document set applies when you're assembling a lender package, where an explained valuation beats a bigger unexplained one.
One honest limitation, from us: InventoryX doesn't compute or touch valuation at all — it's read-only and deliberately stays out of accounting. What it watches is the operational half of the same exports: how many days each SKU sat at zero and what that plausibly cost in sales, estimated per SKU. The value number tells you what you own; the leak ledger tells you whether it was actually on the shelf when someone came to buy it. Both start from the same honest quantities.
Common questions
Does Shopify calculate inventory value natively? Yes. The Month-end inventory value report (Analytics → Reports → Inventory) totals On hand units × each variant's cost per item, with a Summary row for the grand total. It requires costs to be filled in per variant, and as of November 2026 it measures On hand — available plus committed plus unavailable — not available alone.
Why is Shopify's inventory value different from my spreadsheet? Four usual causes: your spreadsheet uses available quantities while the report uses On hand; variants with no sales or adjustments in three years are excluded from the report; variants with blank costs count as zero on both sides; and your export timestamp differs from the month-end snapshot. Reconcile by naming each dollar of variance.
Does Shopify's inventory value use FIFO? No. The report multiplies each variant's current cost per item by its On hand quantity — one static cost, not cost layers. If your accountant wants FIFO, weighted average, or retail method, that decision happens outside the admin; your exports still supply the quantities either way.
What does "On hand" include in Shopify's inventory reports? Everything physically at a location: Available units customers can buy, Committed units promised to open orders and drafts, and Unavailable units set aside for damage, QC, or holds. Incoming transfer units are excluded. Since October 1, 2026, inventory reports measure On hand; earlier data used Available, so historical comparisons mix bases.
How often should I calculate inventory value? Monthly, on the last calendar day, in a 30-minute routine: export, compute, compare to the native report, and log the variance with causes. Add a full annual number taken the day of your year-end count for insurance, lending, and tax support.
Next step
Run the routine on the last day of this month: two exports, one multiplication, one comparison, one logged line. If the variance has no name, fix the counts before you fix the spreadsheet. The standing version of steps 1–4 — with the booking entries and the timing questions this article deliberately skips — is the month-end inventory checklist, and the CSV columns and failure modes in the join are covered in detail in the Shopify inventory CSV guide.