Shopify inventory reports, report by report: what each one can and cannot tell you
A report-by-report map of Shopify's native inventory reporting — on-hand, sell-through, ABC, profit, adjustments — and the questions none of them answer.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
Shopify's native inventory reporting is better than its reputation and narrower than its marketing. On-hand quantities per location, sell-through, ABC grading, profit per product, and a filterable adjustment log all exist in the admin at the time of writing — and none of them will tell you how many days a bestseller sat at zero, or how many units to order before your next supplier cycle. Knowing which report answers which question is the difference between a reporting habit that changes decisions and a monthly ritual of exporting files nobody reads.
This is the map: each native report, the question it actually answers, and the question people mistakenly bring to it. Report availability varies by plan, so treat your own Analytics section as the final authority on what you have.
The report-by-report table
| Report | Question it answers | Where it lives | What it cannot tell you |
|---|---|---|---|
| Inventory (on-hand by variant/location) | How many units do I have, and where? | Products → Inventory | Whether those units are sellable, committed, or stranded |
| Sell-through rate | Did what I bought actually sell, as a ratio? | Analytics → Reports | Whether the ratio is good — that's category and season judgment |
| ABC analysis | Which variants sell fastest, graded A/B/C? | Admin inventory/product analysis | Whether an A item is A because of demand or because of a stockout elsewhere |
| Profit by product (needs cost per item) | What did each product earn after cost? | Analytics → Reports | Inventory efficiency — margin says nothing about capital tied up |
| Inventory adjustment changes | What changed, when, by whom, and why? | Analytics → Reports | What the quantity was on a given past date |
| Sales by product / variant | Units and revenue per SKU over a period | Analytics → Reports | Whether zero sales meant no demand or no stock |
| Purchase order data in analytics (added Fall '26) | What's on order, from whom, arriving when? | Analytics, per the Fall '26 Editions | Actual supplier performance unless you compare dates yourself |
| Inventory CSV export | A full snapshot of every quantity column | Products → Inventory → Export | Any history — it is a photograph, and today's replaces yesterday's |
That table is worth pinning somewhere. Most reporting confusion in a small store is a question pointed at the wrong row.
Reading the important ones honestly
On-hand quantities. This report is accurate and frequently misread: on hand is not available. A variant with 500 on hand might have 375 available once committed orders, app holds, and damaged units are subtracted. If your buying decisions read the on-hand column, you are planning against stock you cannot sell — the practical fix is to hide that column in your default saved view.
Sell-through. The ratio itself is simple: units sold ÷ units received or carried. Buy 120 candles, sell 84 by month end, and sell-through is 70%. What the report cannot tell you is whether 70% is good — a fast-fashion accessory at 70% is sluggish, a considered-purchase furniture piece at 70% is excellent. Any universal benchmark quoted at you is measuring a different catalog with a different season.
ABC analysis. Shopify grades variants by selling rate, and it is genuinely useful as a scheduling input: A items get counted monthly, B quarterly, C twice a year. The trap is treating it as a demand statement. A SKU that was out of stock for three weeks records low sales, gets graded B, and then gets counted less often — the grade inherits the missing demand. Read ABC alongside a staleness check: any SKU that has been at zero recently deserves its grade questioned.
Profit by product. This report only works if cost per item is filled in on every variant. Without it you have revenue reporting, not profitability, and the gap matters: a product with 38% margin that turns four times a year beats a 55%-margin product that turns once. Margin and turn are separate reports and a single metric; GMROI is where they meet.
Adjustment changes. The most underused report in the admin. Filter by reason, location, staff member, or app over a window, and you have your shrinkage, your receiving errors, and your process problems in one view — provided your team picks reasons when they edit. If everything says "Manually adjusted," the report is a count of blank fields. The reason taxonomy that fixes this is its own discipline, and the adjustment reasons guide covers it.
The four questions no native report answers
These aren't gaps to complain about; they're boundaries to plan around:
- How many units will this sell over my next lead time? Native reporting describes the past. Forecasting is not in the admin, and Shopify's own documentation routes it to third-party apps.
- How many days was each SKU out of stock? Nothing native records it. When a variant hits zero, its sales read zero — indistinguishable from zero demand — so the underlying fact is never stored. Reconstructing it takes a snapshot archive and order history (the dark-day reconstruction method).
- What did those stockouts cost? Follows from the second: no dark-day ledger, no lost-sales estimate. You can approximate it — dark days × in-stock velocity × price — and the answer should be labelled an estimate every time, because it assumes demand would have continued at the in-stock rate.
- What should I order this week? No report weighs velocity against lead time and produces a quantity and an order-by date. That arithmetic is either in your spreadsheet or in a planning tool, and it is the calculation most stores end up building themselves.
Notice what those four have in common: they are decision questions, not description questions. Shopify describes. You decide — or you buy tooling that decides alongside you.
A three-report monthly routine
If you only open three things a month, open these, in this order, and give each a specific job:
| Order | Report | The one thing you extract |
|---|---|---|
| 1 | Inventory adjustment changes, last 30 days | The three SKUs with the largest dollar variance and the reason mix |
| 2 | Sell-through, by product, last 30 days | Products below their category's normal rate that still hold stock |
| 3 | Inventory export (CSV) | A dated snapshot appended to your history sheet |
That is roughly 25 minutes. The first report finds the leaks, the second finds the stock that needs a decision (promote, bundle, stop reordering), and the third builds the history that will answer next quarter's questions, because no native report will have kept it for you. Two companion disciplines make the third item pay: the inventory aging report turns receipts and dates into buckets, and the counts routine is what makes the snapshot trustworthy in the first place.
Where to add tooling, and where not to
The decision rule that holds up in practice:
- One location, a few hundred SKUs, decisions made weekly by one person. Native reports plus the export habit are sufficient. Adding an app mostly adds a login.
- Buying decisions already live in a spreadsheet. Formalize the snapshot archive before buying anything; the reporting you need is history, and history is cheap to build and impossible to backfill.
- Stockouts keep surprising you after the fact. That is the dark-day problem, and it is genuinely an app problem — native reporting will not grow that ledger. Our own InventoryX is in development around exactly that gap (in-stock velocity, dark-day history, reorder quantities); it is not live, so don't plan around it. ClearStock, our live app, reads Shopify data to classify slow and dead stock and apply discount rules — useful for the aging half of the picture, not a reporting replacement.
- You're paying for a planning tool. Before you commit, ask it to show its per-SKU dark-day history and its lead-time inputs in the demo. A "forecasting" tool that can't show either is a reorder calculator with better branding.
Common questions
What inventory reports does Shopify have natively? At the time of writing: on-hand quantities per variant and location, sell-through rate, ABC analysis by sales, profit by product (with cost per item filled in), the inventory adjustment changes report, sales by product or variant, purchase order data in analytics (added in the Fall '26 Editions), and the inventory CSV export. Availability varies by plan.
Does Shopify have an inventory aging report? Not natively — the admin tracks quantities and receipt-linked purchase orders and transfers, but no core report ages stock by days since receipt. The standard method is a spreadsheet built from an export plus your receipt dates, refreshed monthly.
Can Shopify tell me which products went out of stock? No. There is no native out-of-stock report, and the underlying fact isn't recorded: a variant at zero records zero sales, which reads the same as zero demand. Reconstructing dark days requires periodic snapshots plus order history.
What's the difference between the inventory report and the inventory CSV export? The Inventory page is a live, filterable view of current quantities; the CSV export is a dated snapshot of the same columns — on hand, committed, unavailable, incoming, available — per variant per location. The export is the one that becomes history, but only if you save it on a schedule.
Which report shows shrinkage? None directly. The closest is the inventory adjustment changes report filtered to reasons like Damaged and Theft or loss, plus count variances by SKU. Shrinkage as a percentage comes from comparing counted stock to book stock — which means a counting cadence is the prerequisite for measuring it.
Next step
Run the three-report routine once, this week, on last month's data. Note the three largest dollar variances, the two products whose sell-through has clearly stalled, and save the export with today's date in the filename. Then put a recurring 25-minute slot on the calendar — the routine's value is in the repetition, and the export you skip this month is the history you won't have next quarter.