Locations & Transfers

Model every place stock lives — warehouses, stores, suppliers, manufacturers, co-packers, or virtual/transit nodes — and move inventory between them with a full lifecycle. Each location tracks its own per-variant levels, and transfers walk draft → pending → in transit → received (or cancelled), automatically deducting the source on ship, crediting the destination on receive, amortizing freight onto landed cost, and recording damage or discrepancies on arrival.

Key capabilities

  • Locations typed as warehouse, store, virtual, drop ship, office, supplier, manufacturer, packaging, copacker, or other
  • One default location where new stock lands unless a location is specified
  • Optional short code (unique per business), full address, and contact details per location
  • Per-location inventory levels, with optional reorder point and reorder quantity per variant
  • Transfers between two distinct locations with variant line items and quantities
  • Ship / Receive / Cancel transitions that move inventory automatically
  • Received-quantity capture per line, with damage flag and damage notes
  • Discrepancy detection when received quantity differs from shipped quantity
  • Tracking number, carrier, expected arrival, and freight cost (estimate + confirmed actual) per transfer
  • Inbound freight amortized per unit onto destination landed cost on receipt
  • Auto-suggested transfer numbers (e.g. TRF-0001), status filtering, and archiving
  • Filter transfers by status, source location, or destination; dedicated in-transit and pending views plus a status summary

How it works

Shipping moves a transfer to in-transit and deducts the source; receiving credits the destination and amortizes freight; cancelling reverses any deduction already made.

flowchart LR
  draft["Draft / Pending"] --> ship["Ship (deduct source, set in_transit)"]
  ship --> receive["Receive (credit destination)"]
  receive --> freight["Amortize freight per unit to landed cost"]
  freight --> done["Received"]
  ship -.->|"Cancel"| reverse["Reverse source deduction"]
  draft -.->|"Cancel"| void["Cancelled (no inventory change)"]

How to use it

  1. Open the Locations tab (/inventory?section=locations) and create a location for each warehouse, store, supplier, or transit node you use.
  2. Pick the location type and set one location as default — new inventory lands there unless you specify otherwise.
  3. Click the inventory icon on a location to view its per-variant on-hand, or compare on-hand across locations in the matrix.
  4. Switch to the Transfers tab, click New Transfer, choose distinct source and destination locations, and add variants with quantities.
  5. Optionally set tracking number, carrier, and expected arrival; add or remove line items while the transfer is still draft/pending.
  6. Ship the transfer to deduct from the source and mark it in transit, then Receive at the destination to credit stock there.
  7. On receive, record the actual received quantity per line and flag any damage with notes.

Pro tips

  • Source and destination must be different locations — the system rejects a transfer that points a location at itself.
  • You can only edit, add, or remove line items while a transfer is draft or pending; once shipped it's locked except for receive/cancel.
  • Cancelling a transfer that's already shipped automatically reverses the source deduction; cancelling a draft/pending transfer makes no inventory change.
  • Enter the carrier's actual freight once the invoice lands — the confirmed freight cost overrides your ship-time estimate when freight is amortized onto destination landed cost.
  • Use the Overview Transfer Summary tiles (Draft, Pending, In Transit, Received, Cancelled) for a fast read on what's moving and what's stuck.
  • Archive locations you've retired instead of deleting them so historical movements and balances stay intact.

In-depth guide

Transfer status lifecycle

Status Meaning Inventory effect
Draft Created, not finalized None; editable
Pending Ready to ship None; editable
In transit Shipped Source deducted
Received Arrived Destination credited; freight amortized
Cancelled Cancelled Source deduction reversed if it had shipped

Capability rules:

  • Ship — from draft or pending.
  • Receive — only from in transit, and only when it has at least one line item.
  • Cancel — from draft, pending, or in transit.

Transfer line items

Field Notes
Variant Variant being moved
Quantity Quantity shipped (> 0)
Received quantity Actual received; may differ from shipped
Damage flag & notes Damage flag and free-text detail

Two derived signals come off these fields:

  • Final quantity — the received quantity when set, otherwise the shipped quantity.
  • Discrepancy — a line is flagged when received ≠ shipped (positive = over, negative = short), and the transfer is flagged if any received line differs.

Stock movement between locations

  • Stock is always per variant per location.
  • Shipping appends negative deltas at the source and flips status to in-transit.
  • Receiving appends positive deltas at the destination using the recorded received quantities.
  • Because levels aren't floored at zero, shipping more than is on hand is permitted and shows as negative on-hand rather than being blocked.

Freight & landed cost

  • Each transfer stores an expected freight cost (your ship-time estimate) and a confirmed carrier amount.
  • The effective freight uses the confirmed amount when present, else the estimate, then divides it across total units to get a per-unit figure.
  • On receive, that per-unit freight is added to the destination variant's existing landed-cost snapshot for the month — only when a snapshot already exists, since the nightly rollup establishes the baseline cost. This keeps internal moves from fabricating cost out of thin air.

Transfers vs. inbound shipments

  • Internal moves use Transfers.
  • Inbound goods from a vendor flow through Purchase Orders and their shipments: marking a PO shipped creates a linked in-transit transfer, and receiving the PO/shipment credits the destination location.
  • The Transfers tab shows both internal moves and PO-driven inbound shipments.

Edge cases

  • A legacy in-transit transfer with no line items can't be received (it would always fail validation) — cancel it instead.
  • Locations referenced by transfers can't be deleted, so archive rather than delete locations that have history.
  • Setting freight after receipt only adjusts the month's snapshot if one exists for that variant.

Start free and keep stock accurate across every location.