Shopify WMS integration: connecting your own warehouse
Running your own warehouse means you own the stock number and the exceptions. Different problem from outsourcing it.
7 min read · Integrations ·
A WMS integration looks like a 3PL integration and isn't. With a 3PL you're consuming someone else's system and accepting its constraints. With your own warehouse management system you own both sides — which means more control, and every exception is yours to handle.
What differs
You own the stock number, and so does the WMS. With a 3PL, ownership is obvious. In your own operation, Shopify, the WMS and possibly an ERP all hold a quantity. Deciding which is authoritative — per field, written down — is the whole project.
Adjustments happen constantly. Damages, cycle counts, transfers between locations, stock taken for photography. Each one changes the number, and if those adjustments only exist in the WMS, Shopify drifts.
Picking data matters. A 3PL takes an order and figures out the rest. Your WMS needs bin locations, pick sequences, batch grouping and packing rules — data Shopify doesn't hold and shouldn't.
You handle the exceptions. Short picks, damaged items found at pack, address problems. Somebody in your building has to resolve each one, and the integration has to give them a way to.
The direction of travel
Get this right and most of the design follows.
WMS to Shopify: available-to-sell quantity per location, fulfilment confirmations with tracking, adjustments.
Shopify to WMS: paid orders with everything needed to pick, plus cancellations and edits.
Not from Shopify: bin locations, pick paths, packing rules, staff assignments. Those belong in the WMS and putting them in Shopify metafields is a mistake people make once.
Available to sell, not on hand
The number Shopify needs is available to sell, which is on-hand minus allocated, minus damaged, minus whatever buffer you keep. The WMS knows all of that; Shopify only needs the result.
Pushing raw on-hand quantity is the most common cause of overselling in warehouse integrations — it counts stock already committed to picked-but-not-shipped orders.
Multi-location allocation
If you ship from several places, locations and fulfilment priority decide where an order is sourced. Two decisions:
- Does Shopify allocate, or does the WMS? If the WMS is smarter about it — nearest warehouse, split to minimise shipments — let it decide, and have Shopify reflect the result rather than pre-empting it.
- Is stock pooled or reserved per location? Pooling maximises availability and risks allocating stock that's physically elsewhere.
Cycle counts and adjustments
The recurring failure. A count adjusts a quantity in the WMS at 2am; Shopify keeps selling the old number until the next sync.
Two mitigations: push adjustments as events rather than waiting for the scheduled sync, and run a full reconciliation nightly regardless. The reconciliation is not optional in a warehouse integration — physical stock changes for reasons no system observed.
Order edits after picking starts
A customer changes an address, or cancels, while the order is on a trolley. The integration needs a state model: which statuses accept changes, and what happens when one arrives too late.
Define it explicitly. The default — apply the change in Shopify and hope the WMS notices — produces packages sent to old addresses.
Where an ERP sits
Many operations have Shopify, a WMS and an ERP. Three systems, and the classic failure is point-to-point connections between all of them with no agreement on ownership.
The workable pattern: the ERP owns products, pricing and finance; the WMS owns physical stock and fulfilment; Shopify owns the customer-facing catalogue and the order. Each field has exactly one owner, and data flows one direction per field.
Once three systems are involved, middleware versus direct integration becomes a real question rather than a preference.
What to build first
- Stock out of the WMS into Shopify. Highest value, prevents oversells.
- Orders into the WMS. Removes manual entry.
- Fulfilment and tracking back. Closes the customer loop.
- Adjustments and cycle counts.
- The reconciliation report, from day one, not after the first drift.
With a 3PL you inherit somebody's constraints. With your own warehouse you inherit every exception — and the integration's real job is making them visible to the person who can fix them.
Is this the problem you’re looking at?
Send me the link to your store and a line about what is going wrong. You get a straight answer within one business day — no pitch, no obligation.
mario@clicksandcarts.coOr see what I do around Shopify: services, work beyond the theme, selected work.