Inventory reports
What is in stock, how fast it sells, how long it will last — days of inventory remaining, sell-through, ABC analysis, adjustments, transfers and shipments, across every location of every store.
16 built-in reports — every one opens in the report editor, runs across all connected stores in one currency, and can be saved, exported or scheduled. The query under each report is the whole report — readable, and yours to change.
Month-end inventory snapshot
Units of each variant in stock at the end of the period.
FROM inventory
SHOW ending_inventory_units, ending_inventory_value
WHERE inventory_is_tracked = true
SINCE startOfMonth(-1m) UNTIL endOfMonth(-1m)
GROUP BY product_title, product_variant_title, product_variant_sku, inventory_item_cost WITH TOTALS
ORDER BY product_title ASC
LIMIT 1000
VISUALIZE ending_inventory_units TYPE table
Month-end inventory value
Value of stock at the end of the period — cost per item multiplied by ending units.
FROM inventory
SHOW ending_inventory_units, ending_inventory_value
WHERE inventory_cost_is_recorded = true
AND inventory_is_tracked = true
SINCE startOfMonth(-1m) UNTIL endOfMonth(-1m)
GROUP BY product_title, product_variant_title, product_variant_sku, inventory_item_cost WITH TOTALS
ORDER BY ending_inventory_value DESC
LIMIT 1000
VISUALIZE ending_inventory_value TYPE table
Unique SKUs
How many distinct items moved between locations in the period — a transfers measure, not a count of the SKUs you stock.
FROM inventory_transfers
SHOW unique_items_transferred
SINCE startOfDay(-30d) UNTIL today
VISUALIZE unique_items_transferred TYPE table
Total shipped
Units shipped out of inter-location transfers in the period.
FROM inventory_shipments
SHOW shipped_quantity
SINCE startOfDay(-30d) UNTIL today
VISUALIZE shipped_quantity TYPE table
Total received
Units received at the destination of inter-location transfers — accepted and rejected together.
FROM inventory_shipments
SHOW received_quantity
SINCE startOfDay(-30d) UNTIL today
VISUALIZE received_quantity TYPE table
Total ordered
Units ordered on inter-location transfers, including drafts.
FROM inventory_transfers
SHOW ordered_quantity
SINCE startOfDay(-30d) UNTIL today
VISUALIZE ordered_quantity TYPE table
Acceptance rate
Share of received transfer units that were accepted, with the accepted and rejected counts behind it.
FROM inventory_shipments
SHOW accepted_quantity, rejected_quantity, acceptance_rate
SINCE startOfDay(-30d) UNTIL today
VISUALIZE acceptance_rate TYPE table
Inventory transfers
Every inter-location transfer with its route, status, tags and line items, subtotalled per transfer.
FROM inventory_transfers
SHOW ordered_quantity
GROUP BY transfer_name, inventory_origin_name, destination_name,
transfer_status, transfer_note, transfer_tags, transfer_created_at,
inventory_transfer_line_item_id, product_variant_sku WITH GROUP_TOTALS, TOTALS
SINCE startOfDay(-90d) UNTIL today
ORDER BY transfer_name DESC, ordered_quantity DESC
VISUALIZE ordered_quantity TYPE table
Products by sell-through rate
Sell-through rate per product variant — units sold as a share of units sold plus ending inventory.
FROM inventory
SHOW starting_inventory_units, ending_inventory_units, inventory_units_sold, sell_through_rate
WHERE inventory_is_tracked = true
GROUP BY product_title, product_variant_title, product_variant_sku WITH TOTALS, PERCENT_CHANGE
SINCE startOfDay(-30d) UNTIL today
COMPARE TO previous_period
ORDER BY sell_through_rate DESC, inventory_units_sold DESC
LIMIT 1000
VISUALIZE sell_through_rate TYPE horizontal_bar
Products by percentage sold
Percentage of starting inventory sold per product — may exceed 100% when restocked mid-period.
FROM inventory
SHOW inventory_units_sold, starting_inventory_units, percent_of_inventory_sold
WHERE inventory_is_tracked = true
GROUP BY product_title, product_variant_title, product_variant_sku WITH TOTALS, PERCENT_CHANGE
SINCE startOfDay(-30d) UNTIL today
COMPARE TO previous_period
ORDER BY percent_of_inventory_sold DESC
LIMIT 1000
VISUALIZE percent_of_inventory_sold TYPE horizontal_bar
Products by days of inventory remaining
Estimated days until each product runs out, at the period's daily sales rate.
FROM inventory
SHOW ending_inventory_units, inventory_units_sold_per_day, days_of_inventory_remaining
WHERE inventory_is_tracked = true
GROUP BY product_title, product_variant_title, product_variant_sku WITH TOTALS, PERCENT_CHANGE
HAVING inventory_units_sold_per_day > 0
SINCE startOfDay(-30d) UNTIL today
COMPARE TO previous_period
ORDER BY days_of_inventory_remaining ASC, product_title ASC, product_variant_title ASC
LIMIT 1000
VISUALIZE days_of_inventory_remaining TYPE histogram
Inventory adjustments by count
How many separate inventory adjustments happened in the period, by reason, app, staff member and location — regardless of how many units each moved.
FROM inventory_adjustment_history
SHOW inventory_adjustment_count
GROUP BY week, inventory_change_reason, reference_document_type,
inventory_app_name, staff_member_name, inventory_location_name, inventory_state
WITH TOTALS, PERCENT_CHANGE
SINCE startOfDay(-30d) UNTIL today
COMPARE TO previous_period
ORDER BY week ASC
LIMIT 1000
VISUALIZE inventory_adjustment_count TYPE table
Inventory adjustment changes
Every inventory quantity change in the period — how many units moved, for which reason, by which app or staff member.
FROM inventory_adjustment_history
SHOW inventory_adjustment_change
GROUP BY day, product_variant_sku, inventory_app_name, staff_member_name,
inventory_change_reason, reference_document_uri, inventory_state WITH TOTALS
HAVING inventory_adjustment_change != 0
SINCE startOfDay(-30d) UNTIL today
ORDER BY day ASC
LIMIT 1000
VISUALIZE inventory_adjustment_change TYPE table
Inventory transfer orders and shipments
What was shipped, received, accepted and rejected against inter-location transfers, by transfer, shipment, origin, destination and product. Carries no ordered quantity — that lives on the Inventory transfers report, and Shopify cannot combine the two either.
FROM inventory_shipments
SHOW shipped_quantity, received_quantity, accepted_quantity, rejected_quantity,
acceptance_rate
GROUP BY transfer_name, inventory_origin_name, destination_name, transfer_note,
staff_member_name, shipment_name, shipment_status, shipment_shipped_at,
shipment_received_at, product_variant_sku, product_variant_title
WITH TOTALS
SINCE startOfDay(-90d) UNTIL today
ORDER BY transfer_name DESC,
received_quantity__transfer_name_totals DESC,
received_quantity DESC, inventory_origin_name ASC, destination_name ASC,
transfer_note ASC, staff_member_name ASC, shipment_name ASC, shipment_status ASC,
shipment_shipped_at ASC, shipment_received_at ASC, product_variant_sku ASC
LIMIT 1000
VISUALIZE received_quantity TYPE table
ABC product analysis
Stock graded by how much revenue it contributes — A is the top 80%, B the next 15%, C the last 5%, ranked by gross sales. Graded over the window you pick, so the same product can be A over 90 days and B over 30.
FROM inventory
SHOW ending_inventory_units, ending_inventory_value,
ending_inventory_retail_value
WHERE inventory_is_tracked = true
GROUP BY product_variant_abc_grade WITH TOTALS
SINCE startOfDay(-30d) UNTIL today
ORDER BY product_variant_abc_grade ASC
LIMIT 1000
VISUALIZE ending_inventory_value TYPE single_stacked_bar
Inventory sold daily by product
Average units sold per day by product variant, against the previous period.
FROM inventory
SHOW inventory_units_sold, ending_inventory_units, inventory_units_sold_per_day
WHERE inventory_is_tracked = true
SINCE startOfDay(-30d) UNTIL today
GROUP BY product_title, product_variant_title, product_variant_sku WITH TOTALS, PERCENT_CHANGE
COMPARE TO previous_period
ORDER BY inventory_units_sold_per_day DESC
LIMIT 1000
VISUALIZE inventory_units_sold_per_day TYPE horizontal_bar
FAQ
Do these inventory reports cover all my Shopify stores? Yes — every report on this page aggregates across all connected stores and converts to one currency. Group by store inside any of them for the per-store split.
Can I change what a report shows? Yes — every report opens in the report editor, where metrics, groupings, filters, date ranges and the chart are all editable, and your version saves to your own library.
Can I get these reports automatically? Yes — any report can be downloaded as CSV or Excel, or scheduled to arrive by email or FTP on the cadence you choose.