Skip to main content

Reports in Stockroom

Fifteen ready-made reports - from Sales, Margin, and Stock on hand to COGS, Inventory roll-forward, Inventory movements, Supplier performance, and Adjustments - each with filters, CSV export, and scheduled delivery by email or Slack.

The Reports page gives you ready-to-use reports for buying, stock, and accounting decisions. Each has its own filters and a CSV export, and any of them can be scheduled to arrive by email or Slack. Pick a report from the menu at the top.

Report types

  • Sales - units and revenue sold and refunded from your sales history, by product, vendor, or location, with margin estimated at each item's current cost. Numbers come from up to 2 years of orders, refreshed nightly. Use Columns to add Available and Incoming, so one row shows what sold, what is left on the shelf, and what is already on order - the three numbers you need to avoid re-ordering something that is on its way. Both are always in the CSV. They are as of today rather than the date range, and they match the Stock on hand report for the same row.

  • Margin - what you actually made: net revenue against cost of goods, ranked by gross profit, with margin bands, a below-threshold flag list, GMROI, and sell-through. Uses your real receipt costs where costing history covers the sale, or each item's current cost. See The Margin report for the full guide.

  • ABC analysis - every item graded A, B or C by its share of revenue: A is the items making up the top 80%, B the next 15%, C the rest. Items with no sales in the window stay ungraded rather than being called C. Grades refresh nightly and show as badges on products, purchase orders, and reorder suggestions, so buying attention goes where the revenue is. Marked Early access.

  • Stock on hand - your current stock position and its value at cost, by product, vendor, or location. A live read of today's inventory, handy for month-end.

  • Variants - every variant in your catalog as its own row, in catalog order so a product's sizes sit together: cost, price, available, incoming, and net units sold in the window. Zero-stock rows are included on purpose - the sizes you cannot sell are the ones worth seeing. Search by title, SKU, or barcode, and use Columns to add Vendor, Barcode, Value at cost or Value at retail; the CSV always carries all of them.

  • Stock on hand by date - your stock position and its value at cost on any past date, rebuilt from receipts, sales, adjustments, and counts under FIFO or weighted average - the year-end bookkeeping number. History reaches back to your costing start date, and figures are per item across all locations.

  • Dead stock - stocked products that barely sold in the window, sorted by the value tied up. Your clearance-planning list. Set the window and a "sold at most" threshold; the default window is 90 days. Products added to Shopify during the window are left out - a new product with no sales yet is new, not dead.

  • Out of stock - active tracked variants with nothing available at any location. Cannot be bought is the default view and answers the real question: what can nobody buy right now. Still selling (oversell on) lists the ones Shopify is letting shoppers order anyway, and All out of stock shows both. Variants whose oversell setting has not synced yet are marked Unknown and counted separately rather than guessed at.

  • Projected shortfall - items on track to run short within your horizon at current sales rates, after counting incoming purchase orders by their expected dates. "Short" means incoming stock does not recover it in time - items a dated PO catches are shown as covered, not short.

  • Vendor purchase history - purchase orders per supplier: order counts, units ordered and received, and spend, with Returns, Credit and Net beside it so stock sent back never quietly shrinks what you spent. Totals are kept separate per currency, and imported Stocky history counts.

  • Supplier performance - how each supplier delivers on the window's orders: on-time %, average lead time and how much it varies, fill rate, rejected units, and the drift between agreed and invoiced costs. Each row links to the supplier's page.

  • Receipts - every receipt line in the period: what arrived, when, from which supplier and purchase order, at the costs booked when receiving. A Direction column separates deliveries from stock shipped back to a supplier, and returned units and value are split out of the totals. Set the dates to a month for a month-end receiving log. Use Columns to add Vendor, Product type, Variant or PO status to the table; the CSV always includes all of them whatever the table is showing.

  • Landed cost - what received stock actually cost, including each receipt's share of shipping, duties, and fees, grouped by supplier, product, PO, vendor, or product type. Grouping by vendor or product type answers "what did we spend on this brand or category" without a spreadsheet.

  • COGS - cost of goods sold and ending inventory value from your real receipt costs, under FIFO or weighted average. See The COGS report for the full guide.

  • Inventory roll-forward - the accountant's tie-out, read left to right: opening + received + restocked + adjusted - returned - COGS = ending, valued from your real receipt costs under FIFO or weighted average. Month-end reconciliation against your books starts here.

  • Inventory movements - every stock movement in the window as its own row: receipts, sales, restocks, adjustments, stocktake corrections, transfers, and returns to suppliers, each valued at what the costing method booked - so a window's rows sum to the roll-forward's columns. Filter it to one movement type.

  • Adjustments - what was written off or corrected, grouped by reason and location and valued at what the costing method booked - the shrinkage number a bookkeeper needs for the write-off entry, biggest write-off first. Stocktake corrections get their own row; for line-by-line detail, use Inventory movements or the export on the Adjustments list.

  • Last counted - when each stocked item was last physically counted at each location, stalest first - never-counted items lead. Your cycle-counting worklist: you can start a stocktake scoped to the least recently counted items straight from it.

Filters and export

Depending on the report, you will have a From/To date range, a Group selector, a Sold at most threshold (dead stock), a Horizon (projected shortfall), an As of date (stock on hand by date), a Cost basis and a "Flag at or below %" margin threshold (Margin), or a Method (Margin, COGS, Stock on hand by date, Inventory roll-forward, Inventory movements, and Adjustments). Inventory movements also filters by movement type. When a report has rows, click Export CSV to download it - each report brings its own columns.

Nearly every report also takes an All vendors, an All product types and an All tags filter. Pick any of them to narrow the report to those products, and the rows, the totals and the CSV all narrow with them - so a filtered export still agrees with what is on screen. The tag filter matches whole tags only, so “aa” never matches a product tagged “aa-extra” - handy when a tag defines an agreed set of products, like the items one supplier replenishes for you. Combine them with Group to answer a specific question: on Landed cost, filter to one vendor and group By product type to see what you spent per category with that supplier over the date range. Supplier performance is the one report without these filters, because on-time delivery and lead time are facts about a purchase order rather than about a product.

Vendor and product type are read from your Shopify catalog as it stands today, not as it was at the time of the receipt or the sale. If you recategorise a product, past receipts follow it to its new vendor and type - which is what you want when reviewing what you buy by category, but worth knowing if you are matching a report against an old invoice.

On a big catalog, the table and the export are deliberately not the same thing. A report lists its top 500 rows so the page stays readable, and tells you underneath when there are more than that. The totals above the table always cover the whole report, and Export CSV gives you every row behind them - so if you are reconciling to your accounts, work from the export and the figures will agree.

Schedule a report

Click Schedule to have the current report delivered on a cadence - as a CSV attachment by email, a Slack message, or both. Choose Daily, Weekly, or Monthly and a send hour; weekly sends Monday, monthly on the 1st, in your store's timezone. The schedule remembers the filters you had set, and date windows roll forward automatically - a monthly Receipts schedule always covers the month just ended.

A report with nothing to say sends nothing - the schedule stays quiet until there are rows. Slack delivery uses the same connection as stock alerts (see Stock alerts by Slack and email).

Good to know

  • The Sales report needs your sales history, which builds automatically after install. If it is still importing, the report tells you and fills in within a few minutes.

  • Revenue tracking began July 10, 2026 - on stores installed before then, earlier dates may show units without revenue.

  • Spend and value figures are kept separate per currency and never blended.

  • A schedule remembers the vendor, product type or tag filter that was set when you created it, and the email and Slack message name that filter - so a recurring report is never mistaken for your whole catalog.

  • More reports are on the way - tell us what you want to see.

For an overview of alerts and reporting, see Alerts & reports on stockroom.app.

Did this answer your question?