Automate warehouse stock transfers, and keep your counts right while units are in transit
Updated · By Ecomsellertool editorial team
Move stock between warehouses only when one location will run short before its next delivery, another can spare the units, and the move costs less than the margin or shipping it protects. Automate the signal, the sizing and the transfer order. Stop selling units once they are set aside, count them as incoming at the destination, and sell them only after they are received.
- In Shopify, a transfer marked ready to ship commits the stock at the origin, and an in-progress transfer shows it as incoming at the destination (checked November 6, 2026).
- Shopify says incoming stock is not part of available and cannot be sold until it is received at the location.
- Units rejected at receiving are recorded on the Shopify transfer but change quantities at no location, so a person has to decide where they went.
- With AWD auto-replenishment on, Amazon creates the FBA shipments, so a second workflow must not schedule the same refill.
- Amazon's getInventorySummaries note says changes in inbound quantities are not detected by its changed-since filter, so inbound stock needs a full read.
- Here rules do the sizing, the records and the checks; a person approves the moves above your limit and every exit from a 3PL.
The step map: who runs each step
Trigger: A daily check of days of cover per SKU and location, plus events: a large purchase order received, a 3PL exit date set, or an FBA location falling below its floor.
| Step | What happens | Who runs it |
|---|---|---|
| 1 | The daily check reads on-hand, committed, incoming and average daily sales for each SKU at each location, including units already on an open transfer. | Rule |
| 2 | The decision table classifies each SKU: no action, purchase order because the whole network is low, FBA or AWD replenishment, or a transfer between two locations. | Rule |
| 3 | For a transfer, the workflow sizes the move to the next delivery at the low location, keeps the donor above its own floor, checks the units land before the stockout, and runs the worth-it formula. | Rule |
| 4 | A person approves any move above your limit, with the SKU, both locations' days of cover, the units, the move cost, the value at risk and the arrival date in front of them. | Person |
| 5 | The workflow creates the transfer with an idempotency key, sends the pick request to the origin warehouse or 3PL and marks the transfer ready to ship, so the units stop selling at the origin. | Rule |
| 6 | When the origin confirms shipment, the workflow records tracking and the expected arrival and marks the units in transit. Planning counts them as incoming; channels do not sell them. | Rule |
| 7 | On receipt, each line is posted as accepted, rejected or canceled. Accepted units become sellable and the channels are updated through your inventory sync. A late or short shipment opens an exception. | Rule |
| 8 | A person resolves rejected, short and overdue units: find them, claim from the carrier, or write them off with a recorded adjustment. | Person |
6 rule steps · 0 AI model steps · 2 person steps. A rule follows fixed logic you approve; an AI model handles messy input and its output is checked by rules; a person makes the calls listed below.
What stays with a person
- Approving transfers above your unit or dollar limit, and any move during a promotion
- Deciding whether a regional demand shift is lasting before stock follows it
- The whole plan for a 3PL closing or moving: last ship date, routing cutover and what to sell down instead
- Resolving rejected, short and overdue units, including carrier claims and write-offs
- Changing days-of-cover floors, ceilings and the worth-it limits
Which tools can run it
- Your platform's transfer screens and a shared sheet with the decision table, for a few SKUs and two locations
- An inventory or warehouse system with transfer orders, if it can show incoming stock and is the only writer to each channel
- Zapier, Make or n8n connecting a stock export, an approval step and the transfer calls, with a log of every run
- Custom code on your accounts, for several 3PLs, FBA and AWD together, dollar-based approvals and a full transfer record
Systems it connects
- Warehouse system or 3PL (source of truth)
- Shopify inventory transfers
- Amazon FBA Inventory API, AWD settings
- Purchase order or replenishment plan
- Approval queue in Slack or email
- Carrier tracking
Build size: Medium
The arithmetic is short; the work is reading true stock per location, keeping one writer per channel and handling short receipts.
Your West Coast 3PL is about to run out of a best seller while your East Coast warehouse holds four months of it. Someone spots this in a spreadsheet, emails both warehouses and moves some stock. Meanwhile Shopify and your marketplaces keep selling units that are already on a truck, and the planner orders more because nothing shows the move. This recipe decides when a transfer is worth doing, then creates it so every count stays right from pick to receipt. It is one page of our automation library, for brands with two or more warehouses or 3PLs, or a warehouse plus Amazon AWD or FBA.
Which signals should trigger a stock transfer?
This table is the core of the build, and you can run it today from a stock export. Each row is a signal, the rule that confirms it, what the workflow does, what a person approves and what tends to go wrong. Every threshold is illustrative, so set your own per SKU class. Days of cover is sellable stock divided by average daily sales, worked out per location, not across the network.
| Signal | Rule (illustrative thresholds) | What the workflow does | What a person approves | What can go wrong |
|---|---|---|---|---|
| One location is under its days of cover while another is over | Low location under 14 days and short before its next delivery; donor still above its 60-day floor after the move | Sizes the move to the next delivery, runs the worth-it formula, drafts the transfer | Moves above your unit or dollar limit; smaller ones can run on the rule | The donor runs short next month because its own demand was ignored |
| A bad split after a big PO | On receipt, a location's share of the PO differs from its share of demand by more than 15 points | Proposes a rebalance, and flags the next draft PO so the split is fixed at the source | The rebalance, and any change to delivery splits on open POs | Paying freight twice for a split that should have been right on the draft purchase order |
| A regional demand shift | A region's share of a SKU's orders moves by more than 10 points for 4 weeks, with no promotion running | Flags the SKU with orders and shipping cost per region, and proposes a small first move | Whether the shift is lasting | Chasing a one-off spike, then paying to move the stock back |
| A 3PL closing or moving | An exit date is set in the contract or by notice | Stops new inbound there, lists each SKU as sell down, move or dispose, and drafts transfers in waves back from the last ship date | The whole plan, the last ship date and the routing cutover | Orders still routed to an empty location; final counts disputed with no reconciliation |
| AWD or FBA replenishment | FBA is under its floor and stock sits upstream | With AWD auto-replenishment on, reads only. Otherwise drafts the quantity and hands it to the FBA inbound recipe | The shipment before anything ships | A second refill on top of Amazon's own, which overfills FBA |
| Every location is low | Network cover is under the reorder point | Creates no transfer; raises the purchase order flow | The purchase order | A transfer that only moves the shortage to another location |
The last row prevents the most common mistake: a transfer cannot create stock. Check the whole network first, then the split. When a SKU needs both, transfer to cover the gap and reorder for what comes after. The wider plan for how much to buy and where each node's limits sit lives on our replenishment page.
Is moving the stock worth it?
A transfer always costs money, and doing nothing does not always lose a sale. The formula compares what the move costs with what it protects, and the second half depends on who could serve those orders otherwise. All numbers in this section are illustrative placeholders, not freight quotes, 3PL prices or client results. Use your own carrier quote and your 3PL's rate card.
Move cost per unit = freight per unit + handling out at origin + receiving in at destination
Units at risk = daily sales at the low location × (days until its next delivery − its days of cover)
Value protected = units at risk × contribution margin, or orders affected × extra parcel cost
Use margin when no other location can ship those orders, such as a channel served by one location. Use extra parcel cost when another warehouse can still ship them, only further away. For example, the low location sells 20 units a day, holds 200 (10 days of cover) and its next delivery is 30 days out. That is 20 units a day over a 20-day gap, or 400 units at risk. With freight of $1.10, handling out of $0.40 and receiving of $0.35, the move costs $1.85 a unit.
| Illustrative case | Units moved | Move cost | Value protected | Net | Call |
|---|---|---|---|---|---|
| Only this location can serve the channel | 400 | 400 at $1.85 = $740 | 400 units at $9 margin = $3,600 | +$2,860 | Move |
| Another warehouse can ship, at a higher parcel cost | 400 | 400 at $1.85 = $740 | 400 orders at $1.50 extra = $600 | −$140 | Stay, unless the slower delivery costs sales |
| A bad split forces second parcels | 150 | 150 at $1.85 = $277.50 | 120 split orders at $4 extra = $480 | +$202.50 | Move |
| Slow SKU, small batch, low margin | 60 | 60 at $3.20 = $192 | 60 units at $2.50 margin = $150 | −$42 | Stay |
Two more checks decide the first row. The units must land before the stockout: at 6 days door to door, they arrive on day 6, with 80 units left, and 480 units then last the 24 days to the delivery. The donor must also keep its floor: 1,800 units at 15 a day with a 60-day floor can give up 900, so 400 is safe. To price a gap on your own SKU, use the stockout cost calculator and our page on contribution margin.
What should stock counts show while units are in transit?
Keep two numbers apart. Sellable stops counting the units when they are set aside and starts again when they are received. Planning counts them the whole way, at the destination, so nobody raises a second fix for the same gap. Shopify's states fit this. Its inventory states page says incoming stock is not part of available and cannot be sold until received, and its transfer guide says ready to ship commits units at the origin and in progress marks them incoming at the destination (checked November 6, 2026).
Here is the same illustrative move in Shopify terms, with sales held still so the arithmetic shows, and 10 units rejected on arrival.
| Moment | East available | Units on the transfer | West incoming | West available | Sellable now |
|---|---|---|---|---|---|
| Draft created | 1,800 | 0 | 0 | 200 | 2,000 |
| Marked ready to ship | 1,400 | 400 | 0 | 200 | 1,600 |
| Moved to in transit | 1,400 | 400 | 400 | 200 | 1,600 |
| Received: 390 accepted, 10 rejected | 1,400 | 10 (exception) | 0 | 590 | 1,990 |
| Person finds 6 good, writes off 4 | 1,400 | 0 | 0 | 596 | 1,996 |
The sellable column falls by 400 for the whole trip, which is why a donor needs its own floor. Shopify's pages we read do not say at what point the origin's on-hand count falls, so check your own inventory report on a sample transfer before you reconcile against it.
How do you create the transfer without double-counting?
Build it around these Shopify behaviors, and test each in a development store first. All were checked November 6, 2026.
| Step | What Shopify documents | Rule for the workflow |
|---|---|---|
| Create | inventoryTransferCreate creates a draft and, from API version 2026-04, needs an idempotency key. A draft commits no stock | Build the key from the decision record, so a retry cannot create two transfers |
| Set aside | Marking ready to ship commits the units. This status is optional | Always use it, or the units keep selling until they leave |
| Shortcut | Marking as transferred receives the units automatically and makes them available at the destination | Never use it for a physical move; those units would sell before they arrive |
| Receive | inventoryShipmentReceive posts lines with a reason of accepted, rejected or canceled | Post what was counted, never what was sent |
| Short or rejected | Receiving guide: rejected units change no quantity at any location, and a partial receipt stays In progress | Raise each rejected unit and any overdue remainder as an exception |
| Change of plan | Origin and destination cannot change after processing; only Draft or Ready to ship can be canceled | Treat a diverted truck as a person's decision, not an edit |
Three more details save rework. Shopify's overview says shipments are created for you when a transfer is processed, and you can send batches as separate shipments, each with its own tracking. Its receiving guide says a product not yet stocked at the destination can have its quantity recorded without being made available, so check that before the truck lands. And a June 2026 changelog lists transfer webhook topics, including ready to ship, cancel and complete, which can drive the status updates in place of polling.
Keep one writer per channel. Shopify's quantity guide for apps says committed stock cannot be adjusted or moved through the API, and that Shopify manages it through actions such as marking transfers ready to ship. If your warehouse system also pushes absolute quantities to Shopify, the two can overwrite each other mid-move. Decide which system owns the number, then let our multichannel inventory sync publish it. A real gap found at receiving belongs in inventory count adjustments, with a cause code.
How do 3PLs, AWD and FBA change the workflow?
A 3PL is usually the slowest part, and its documents are the evidence. Whichever way yours takes transfer orders, by API, EDI or file, treat the origin's ship confirmation as the event that moves units to in transit, and the destination's receiving report as the event that makes them sellable. Ask each 3PL how it charges for outbound pallets and receiving, and feed those numbers into the formula. A 3PL exit is the same flow in waves, so keep the last wave well clear of the contract end date, and reconcile the final count on both sides.
Amazon needs its own branch, because you do not run that move. Its AWD page says auto-replenishment watches stock at fulfillment centers and moves more from AWD when it runs low, and that AWD confirms eligibility when you book a shipment. Its AWD setup article names three modes: Amazon's recommended quantity, your own minimum and maximum, or off, in which you control the movement by hand. Settings can take up to 24 hours to apply, and where several seller SKUs share an ASIN, Amazon uses the highest value set (all checked November 6, 2026). So the workflow reads the mode per SKU first, and acts only when the mode is off. AWD itself now has cubic-foot capacity allocations, which Amazon enforces from January 7, 2027, so check room there before a transfer sends more stock in; our AWD capacity guide has the dates and a worksheet.
To read FBA stock, Amazon's getInventorySummaries reference gives inbound working, shipped and receiving quantities, plus units moving between fulfillment centers. It also notes that its changed-since filter does not detect changes in those inbound quantities (checked November 6, 2026). So read inbound on a full pull, not only on changed records, or a shipment you already sent looks like a gap.
What should stay with a person?
Anything that spends real money or rests on a judgment about the future. Rules can compute cover, size a move and keep the records straight. A person should decide whether a demand shift is lasting, approve large moves, own the whole plan when a 3PL is closing, and resolve what arrived short. Set the approval limit in dollars of move cost as well as units, because a small pallet across the country can cost more than a large one across town. Every step in this recipe is a rule or a person. Add a forecast model only when fixed daily rates keep misjudging a SKU; our replenishment agent shows where a model fits.
Purchasing trend, stock coverage and the PO pipeline together
See Growth OS ↗Which tool should run it?
The simplest one that can see every location and the receipt.
| Level | Fits when | What to watch |
|---|---|---|
| Platform transfer screens plus a shared sheet | Two locations and a few moves a month | Someone must remember to mark ready to ship; log who approved each move |
| An inventory or warehouse system with transfer orders | Your locations and channels are on its supported list | Confirm it shows incoming stock and is the only writer to each channel |
| Zapier, Make or n8n | Two locations, few SKUs, a 3PL with a usable API or file feed | Add the idempotency key and a receipt check, or a retry becomes a second transfer; see our Zapier vs Make vs n8n comparison |
| Custom code on your accounts | Several 3PLs, FBA and AWD together, dollar-based approvals | Can run on Ecomsellertool Growth OS beside inventory and replenishment |
Who builds stock transfer workflows for multi-warehouse brands?
Ecomsellertool builds transfer workflows on your own accounts and systems. We have built on Amazon's seller APIs since 2017 and shipped 50+ tools for 100+ teams. We start with your locations, who holds the true count and who approves a move, then build the decision table, the transfer records and the receiving checks. Send a project brief below, or read how our workflow automation service works.
None of our published case studies is a warehouse-to-warehouse transfer project, so here is the closest work we have shipped:
- Items in transit, tracked. For Little Owl, a 3PL and FBA prep center, we built software whose dashboard shows listings, returns and items in transit, and that tracks Amazon inventory and inbound shipments. The case study says it helped the client keep track of items that used to go missing in transit.
- Warehouses and stock rules in one layer. For Ecom Global, built for 100M+ products, 20+ marketplaces and 13+ carriers, warehouses, routes and routing rules sit in one shipping layer, with stock-change rules per marketplace and country.
You keep your accounts, your data and the custom code we build; the Growth OS base is licensed to you.
Get this workflow built
Send us your version of this workflow
Describe the workflow you want automated. We reply with a written plan: scope, timeline and a fixed price.
Frequently asked questions
When should I transfer stock between warehouses instead of reordering?
Transfer when one location will run short before its next delivery while another holds more than it needs, and the move costs less than what it protects. If the whole network is low, a transfer only moves the shortage around, so raise a purchase order instead. If both are true, do both: transfer to cover the gap and reorder for what comes after.
Should stock in transit count as available inventory?
No for selling, yes for planning. Shopify excludes incoming stock from available and says it cannot be sold until it is received. Your replenishment check should still count those units as on the way to the destination. If it ignores them, it keeps raising new transfers or purchase orders for a shortage already being fixed.
How do I decide if moving stock is worth the freight?
Add freight per unit, handling out and receiving in to get the move cost. Compare it with what you lose by not moving: the contribution margin on units you would fail to sell, or the extra parcel cost when another warehouse ships those orders. Move only if the second number is bigger and the units arrive before the stockout.
What happens if a transfer arrives short or damaged?
In Shopify, you post each line as accepted, rejected or canceled. Accepted units become available at the destination. Rejected units are recorded on the transfer but change no quantity at any location. A partly received transfer stays In progress until the rest is received, so a workflow should chase what remains and send rejected units to a person.
Do I need a transfer workflow if I use Amazon AWD?
Not for AWD to FBA if auto-replenishment is on, because Amazon creates those shipments itself. You can still use one for stock moving between your own warehouses or 3PLs, or into AWD. If you turn auto-replenishment off, you control the movement manually, and the same decision table can tell you when to send more.
How do I keep channels from overselling during a transfer?
Lower the origin's sellable quantity when the transfer is set aside, not when the truck leaves, and raise the destination's only after receipt. In Shopify, marking a transfer ready to ship commits the units at the origin. Push those changes through one inventory sync, so a second tool does not overwrite the numbers while the units are moving.
