Skip to main content

View & filter the inventory movement ledger

The inventory movement ledger is the append-only audit trail of every stock change in SKU.io — every receipt, sale, transfer, adjustment, stock take, assembly, return, and manufacturing movement lands here as a signed quantity against a product, warehouse, and (usually) a FIFO cost layer. This guide covers the Inventory Movements list: how to browse, search, filter, sort, save views, and export it; how to open a single movement's detail page and activity log; and the running-tally endpoint that reconstructs a cumulative balance over a product's movements.

For the model behind the trail — how each row is created, what the columns mean, and why the ledger is immutable — see The inventory movement ledger. For every movement type and field in one place, see the Movement types & fields reference.

Before you begin

  • Open the list at Inventory → Inventory Movements. Anyone with inventory read access can browse, search, filter, sort, save views, and open a movement.
  • Export to XLSX or CSV requires the Export inventory permission (inventory.export).
  • Movements are a read-only record. Nothing on these screens edits or deletes a movement — stock changes always come from an upstream document (an adjustment, a transfer, a fulfillment, and more).
Only two statuses live in the ledger

Every movement carries an inventory status of either Active (physical, on-hand stock) or In Transit (stock moving between warehouses on a transfer). There is no "reserved" status — allocations and holds are tracked separately and never appear as a movement status. See Stock states.

Browse the movements list

The list shows one row per movement, newest movement date first. Each row carries:

ColumnShowsSortableDefault
IDThe movement's record ID; links to its detail pageYesShown
DateThe inventory movement date (the date the stock change is recorded on)YesShown
SKUThe product SKU; links to the productYesShown
Product NameThe product nameYesShown
TypeA chip for the movement type (Sale, Inbound Receipt, Transfer, Adjustment, and more)YesShown
StatusA chip for the inventory status — Active (green) or In Transit (blue)YesShown
QuantityThe signed quantity, green for a positive movement and red for a negative oneYesShown
WarehouseThe warehouse; links to itNoShown
LocationThe bin (for a locations-enabled warehouse)NoHidden
LayerThe FIFO layer the movement costed against; links to itNoShown
SourceThe source document that created the movement (a polymorphic link)NoShown
Created / UpdatedRecord timestampsYesShown
  • Sort by clicking a sortable header; click again to toggle ascending and descending. The default order is newest movement date first. Beyond the direct columns, SKU, Product Name, and Warehouse also sort (through a join on the related record).
  • Paginate with the controls beneath the table. The list shows 10 rows per page by default; use the per-page selector to raise it.
  • The Source cell shows the friendly type and reference — for example Sales Order Line or Inventory Adjustment — and carries a tooltip with the exact link type and record ID for support and debugging.
Location is off by default

The Location column is hidden until you turn it on with the column selector — it's only meaningful for warehouses that track bin locations. On a phone, the list renders as a stacked card list with the same fields. When nothing matches, the list shows No inventory movements found.

Search and filter

Narrow the list with the search bar, the quick filters, the date filter, and advanced filters. Everything you set is reflected in the page URL, so a filtered view is shareable and survives a refresh.

Search bar. Type to search across ID (exact match), SKU, Product Name, Warehouse, and Reference at once — you don't pick a field first.

Quick filters sit above the table:

  • Type — limit to one movement type.
  • StatusAll, Active, or In Transit.
  • Link — filter by the kind of source document (its link type), for example Sales Order Line, Inventory Adjustment, or Transfer Shipment Line.
  • Warehouse — limit to one warehouse.
  • Date — filter by movement date with the date filter button in the toolbar.

Advanced filters. Open Advanced Filters in the toolbar to build precise conditions combined with and / or logic, including nested groups; each active condition shows as a removable, editable chip. You can filter on ID and Quantity (numeric); Type, Status, Link Type, SKU, Product Name, and Reference (text, with operators such as contains, is, and is not); and Movement Date, Created At, and Updated At (date-time, with between and comparison operators).

There's no "filter by one source document" on the standalone list

The Link filter narrows by the type of document (all sales-order lines, all adjustments), not by a single order or transfer. To see every movement for one specific document, open that document and use its own Movements tab — for example a transfer, an adjustment, or a fulfillment — which scopes the ledger to just that record.

Save and switch views

Save a filter, column, and sort combination as a named view so you can return to it in one click. Views are keyed to the movements list specifically, and you favorite them in the Saved Views bar above the table — for example Today's sales, In-transit only, or Adjustments this month. The same bar appears under the mobile header, so your saved views travel to the phone layout.

Show or hide columns

Use the column selector in the toolbar to choose which columns show. The Location column is the only one hidden by default — turn it on when you're working with bin-level stock. Your visible-column choice does double duty: it also drives which columns an export includes.

Export the list

Export the ledger to a spreadsheet when you need it outside SKU.io.

  1. Click Export in the toolbar.
  2. Choose a scope:
    • All records — every movement, ignoring the active filters and sort.
    • Filtered results — only the rows your current search and filters match.
    • Current page — just the rows on the page you're viewing.
    • Selected records — only appears once you've checked specific rows.
  3. Choose a formatXLSX or CSV.
  4. Click Export to download the file.

The export includes only the columns currently visible in your table, so adjust the column selector first to shape the output. Beyond the on-screen columns, the export can also carry Link Type, Link ID, and FIFO Layer ID when those columns are shown. Dates are converted from UTC to your application time zone so they match what the UI shows.

How each scope treats your filters

Filtered results and Current page respect your active filters; All records deliberately clears them so you always get the complete ledger. If you request columns that don't exist, they're ignored; if you somehow request none, the export falls back to every column.

Open a single movement

Click any row's ID to open the movement's detail page. It has two tabs.

Details shows, at a glance:

  • The Date, Product (links to the product), and Warehouse (links to the warehouse).
  • The Location bin, with a tooltip for its code and type, when the movement has one.
  • Type and Status chips.
  • A prominent, signed Quantity — green with a + for a positive movement, red for a negative one.
  • The Source Document — a link to the record that created the movement, with a tooltip showing its exact link type and ID. Following this link forwards your caller context, so the source page can return you here.
  • The Reference string.
  • A FIFO Layer card — shown only when the movement costed against a layer — linking to that FIFO layer.
  • Created and Updated timestamps.

The back arrow returns you to wherever you came from — if you opened the movement from a product's Movements tab, back takes you there, not to the standalone list. There are no edit or delete controls: a movement is a permanent record. If the ID doesn't resolve, the page shows Movement not found.

View a movement's activity log

The Activity tab is the audit history for that single movement — who touched it and when. It loads the first time you open the tab.

  1. Open a movement and click the Activity tab.
  2. Use the search box to filter entries — it matches the person who made the change (the causer), the change's properties, the event, or the subject type.

The log records each tracked field change but skips the updated_at bookkeeping timestamp, and it only writes an entry when something actually changed — a save that changes nothing produces no log row. To trace how a movement fits into the wider trail rather than its own edit history, return to the ledger.

Reconstruct a running balance (tallies)

Behind the per-product movement views, SKU.io can compute a running tally — a cumulative balance that adds each movement's quantity in order, so you can show an "on-hand after this movement" column alongside the raw signed quantities. It answers "what was the balance right after movement #12,345?"

The tally endpoint takes three required inputs — a warehouse, an inventory status (active or in_transit), and a product — and returns a map of movement ID to running balance for that exact combination. All three are required: a tally is only meaningful within a single product, warehouse, and status. Movements are accumulated by movement date ascending, then by ID descending, so the order the running total builds up in is deterministic.

This tally powers the cumulative column on product-scoped movement views; it isn't wired into the standalone Inventory Movements list, which shows raw signed quantities rather than a running balance. For where those balances land as live stock figures, see View a product's stock across warehouses and the Stock states & fields reference.

Next steps

Last verified: