View a product's stock across warehouses
Every product has an Inventory tab that breaks its stock down warehouse by warehouse: how much is free to sell, how much is committed, how much is physically on hand, and how much is on the way. This guide shows you how to open that tab, read each column, drill into per-bin quantities and live FBA stock, and force a recalculation when a number looks stale.
To find a product in the first place, start with Browse and search the product inventory list. For what each stock state means underneath the numbers, see the concept page Stock states and the Stock states and fields reference.
Before you begin
| Requirement | Why it matters |
|---|---|
| The View products / inventory permission. | Without it, the product and its Inventory tab don't open. |
| The product exists and has at least one warehouse. | A brand-new product with no movements shows every warehouse at zero — use Hide empty (below) to focus. |
| Warehouse locations (bins) enabled, to see per-bin rows. | The per-location surface is gated by a global locations toggle. When it's off, the whole bin surface is hidden silently — see Per-location (bin) quantities. |
| An Amazon FBA integration linked to the product's listings, to see live FBA stock. | FBA warehouses appear only for integration instances the product is actually listed on. |
Open the Inventory tab
- Go to Inventory → Products (or open the product from anywhere it's linked).
- Click the product to open its detail page.
- Select the Inventory tab.
The tab loads the Warehouse Inventory card: one row per warehouse that holds — or could hold — this product, plus a bold totals row at the bottom. Supplier dropship warehouses and Amazon FBA warehouses appear here too when they apply.
At the top of the page header, next to the product's totals, a timestamp shows when the inventory cache was last rebuilt (for example "3 hours ago" — hover for the exact time), with a Refresh inventory cache button beside it. See Refresh the inventory cache.
Read the columns
Each warehouse row reports the same set of stock states. The columns to the left of On Hand are the pieces that add up to On Hand; the columns to the right describe stock that isn't physically at the warehouse yet.
| Column | What it shows |
|---|---|
| Available to Sell | Free stock you can still promise to a customer: Available − Backorder Planned − Backorder PO Covered. Shown green when positive, red when negative (you've over-committed). |
| Available | Free stock physically at this warehouse, before backorder commitments. A component of On Hand. |
| Allocated | Stock committed to confirmed open orders. See Browse allocations. |
| On Hold | Stock manually set aside and withheld from selling. See Place a stock hold. |
| Non-Sellable | On-hand stock sitting in a quarantine or damaged bin — physically here but not sellable. Still counts toward On Hand. Highlighted when above zero. |
| On Hand | Physical stock at this location: Available + Allocated + On Hold + Non-Sellable. Excludes anything in transit. |
| In Transit | Stock in flight between your own warehouses — owned by you but not yet landed. Counts toward Total Inventory, not On Hand. See How warehouse transfers work. |
| Total Inventory | On Hand + In Transit — everything you own that's tied to this warehouse. |
| Inbound | Quantity expected from open purchase orders — ordered from a supplier, not yet received. Distinct from In Transit (which is warehouse-to-warehouse). |
| Backorder Planned | Backordered demand allocated to this warehouse, not yet covered by a purchase order. |
| Backorder PO Covered | Backordered demand allocated here that an inbound purchase order already covers. |
The two identities are worth committing to memory, because they're how you sanity-check a row:
- On Hand = Available + Allocated + On Hold + Non-Sellable
- Total Inventory = On Hand + In Transit
Click any column header to sort the rows by it. The full definitions live in the Stock states and fields reference; the model behind them is explained in Stock states.
SKU.io tracks Allocated (committed to orders) and On Hold (manually set aside) as separate states — there is no combined "reserved" status. If you're looking for held-back stock, check the On Hold column and Place a stock hold.
Collapse empty warehouses
By default, warehouses that hold no inventory for this product (every column zero) are hidden, so you only see where the stock actually is. A footer line reads "N warehouses with no inventory hidden — click to show". Click it to reveal them, then use the Hide empty action in the card header to collapse them again.
Per-location (bin) quantities
When a warehouse tracks stock by location (bin), its row shows an expand chevron and a preferred-bin chip.
- Click the chevron at the start of a warehouse row to expand it.
- The nested table lists each Location the product sits in, with its Qty and a bin-type chip (for example Pickable, Damaged). If nothing is recorded yet, you'll see "No stock recorded by location yet".
- The current preferred bin is marked with a star, both in the expanded rows and on the row's chip.
To set or change preferred bins, click the bin chip (labelled with the current bin's code, or Set preferred bins). When a warehouse has more than one preferred bin, the chip shows the first plus a +N badge. To physically move units between bins, use Location transfers.
Per-location quantities depend on a global locations feature toggle. When it's off, the request returns a permission error and the entire bin surface — expand chevrons, per-location rows, and preferred-bin chips — is hidden with no error message. If you expect bins and see none, ask an admin whether locations are enabled. The per-bin cache is maintained automatically as inventory moves, and can be rebuilt from the command line with inventory:rebuild-location-quantities.
Consigned (supplier-owned) stock
If some of a warehouse's on-hand stock is consigned — owned by a supplier until you sell it — the On Hand cell carries a small "X consigned" sub-line. Consigned units are already counted in Stock and Available; the sub-line just surfaces how much of On Hand is supplier-owned and held off your balance sheet until it sells.
Consigned units are deliberately excluded from FIFO stock value — they don't contribute to the cost of your owned inventory until ownership transfers. See FIFO layers and how COGS is realized for how cost is tracked.
Live FBA stock per listing
Amazon FBA and Pan-European warehouses appear in the table with (real-time) appended to the name, and only for the Amazon integration instances this product is actually listed on. Their numbers come live from Amazon rather than from your own movements.
When an FBA warehouse row is backed by more than one Amazon listing, a link like "3 FBA Listings" appears under the warehouse name. Click it to open the FBA inventory dialog, which lists live stock for each seller SKU behind that warehouse:
| Column | What it shows |
|---|---|
| Listing SKU | The Amazon seller SKU (MSKU), with its FNSKU. |
| ASIN | The listing's ASIN. |
| Available | Sellable FBA units. |
| Reserved | Units Amazon has reserved (pending orders, transfers, FC processing). |
| In Transit | Units moving between fulfillment centers. |
| Total | Total units at Amazon. |
| Inbound | Units on an inbound shipment to Amazon. |
The dialog combines listings mapped to the product through product listings with any additional listings the FNSKU mapper says this product ships under in that warehouse's marketplace — so it shows exactly what could ship, even when a marketplace's listing maps to a per-market shadow product. For a Pan-European warehouse, the rollup aggregates the linked EU marketplaces into one synthetic warehouse.
Amazon-managed stock (FBA, AWD, WFS) reflects what's at Amazon — you can't receive it manually into SKU.io. If you try to manually receive a channel-managed transfer, SKU.io rejects it with a clear message rather than letting the numbers drift. See Receive a transfer.
Bundle and kit buildable (potential) inventory
A bundle or kit doesn't hold stock of its own — its availability is virtual, computed from its components. So on a bundle's or kit's Inventory tab, a potential card sits at the top:
- Bundle Availability (bundles): how many complete bundles you could sell right now, based on component stock. Because a bundle has no inventory row of its own, the warehouse table is hidden for bundles — the potential card is the whole picture.
- Assembly Potential (kits): how many kits you could assemble, with Assemble / Disassemble shortcuts. Kits do keep their own inventory, so a kit shows both the potential card and the warehouse table.
Either way, the buildable quantity is the bottleneck — the minimum, across components, of floor(component available ÷ recipe quantity). The card breaks this down per component (flagging the limiting one with an alert icon) and per warehouse, plus an All Warehouses rollup. Nested kits are expanded recursively — a component that's itself a kit is flattened down to its base parts, with quantities multiplied through and circular references guarded against.
Refresh the inventory cache
The Inventory tab reads from a cache that's kept up to date as stock moves. If a number looks wrong — for example after a bulk import or a data fix — you can force a rebuild.
- In the product header, next to the last-refreshed timestamp, click Refresh inventory cache.
- SKU.io rebuilds the product's cached inventory rows and average cost from the underlying movements and layers. This runs synchronously, so the button shows a spinner until it finishes.
- On success you'll see "Inventory recalculated" and the timestamp updates. If the rebuild fails, an error notification tells you why.
Refreshing recomputes the cache from source data; it never changes your actual stock. If the numbers are genuinely wrong (not just stale), you need a stock correction, not a refresh — see Adjust stock and Review, correct, and delete adjustments.
Next steps
- Set up a product's inventory settings — min stock level, reorder points, and per-warehouse defaults.
- Place a stock hold — set aside some of the On Hold column deliberately.
- Work the backorder queue — clear the Backorder Planned and Backorder PO Covered columns.
- View and filter the inventory movement ledger — the audit trail behind every number on this tab.
- Stock states — the concept behind on-hand, available, allocated, on-hold, non-sellable, incoming, and in-transit.
- Stock states and fields reference — every column and field, defined.