Inventory transfers between warehouses

Move stock from warehouse A to warehouse B without overcounting or losing visibility while it's in transit.

Last updated 2026-05-10

If you operate from more than one location, stock occasionally needs to move between them. Don't track this in a spreadsheet.

Inventory → Transfers

Click New transfer. Pick origin warehouse, destination warehouse, and the SKUs + quantities. Save as a draft until physically packed, then mark Sent.

While Sent: stock is decremented from the origin AND added to "in transit" at the destination. The destination cannot fulfil orders from in-transit stock. Only physically present stock.

When the destination receives, mark Received and confirm quantities. Discrepancies (lost, broken, miscounted) get logged with a reason code so you can trace them.

Why this matters

Without proper transfers, two things go wrong:

  • Origin oversells. You sold the unit assuming it was in warehouse A, but you'd already loaded it onto a truck to warehouse B. Customer waits, you scramble
  • Destination understocks. You don't realise the inbound shipment for two days and reorder more, doubling holding cost

The transfer record fixes both. The unit is decremented from A immediately, but not committable for fulfilment until physically at B.

Bulk transfers

For seasonal restocks (e.g. moving 200 SKUs from a central warehouse to a pop-up location), use Inventory → Transfers → Bulk import. Upload a CSV with sku, qty, origin, destination columns. We process in one transaction so partial failures don't leave orphaned transfers.

Discrepancies

When received quantities don't match sent quantities, you get a Variance row. Mark it as one of:

  • Lost in transit. Write off, expense to shipping
  • Damaged. Write off, expense to shrinkage
  • Miscounted at origin. Adjusts the historical sent quantity (rare)
  • Miscounted at destination. Adjusts the received quantity

Each reason code has its own ledger entry visible in Reports → Inventory → Variance. Reviewing this monthly is how you catch supplier short-shipments and warehouse pilferage.

Linking to fulfilment

Orders waiting on stock at the destination warehouse can be tagged "awaiting transfer". The customer sees a generic "preparing your order" status, you see the actual reason in the order detail. The fulfilment tag clears the moment the transfer is received.

API

POST /v1/inventory/transfers and PATCH /v1/inventory/transfers/:id/receive let you wire transfers to a 3PL or WMS without manual entry. Webhook events: inventory.transfer.created, .sent, .received, .variance_reported.

Still need help?

Real humans, real answers. We respond fast and we never use chatbots as the front line.

Email Support