Skip to main content
Five labelled arrows run between a Shopify storefront and a 3PL warehouse: Stock in and Order out point to the warehouse, while Tracking back, Inventory back and Returns back point to the store. One person stands on each arrow.

Shopify 3PL and WMS integration: five handoffs to own

A Shopify 3PL or WMS integration is five handoffs. Shopify asks a fulfillment service for all inventory data once every hour. Pick the route by who maintains it, then name an owner for each handoff.

Rizwan Qaiser
Rizwan Qaiser·September 14, 2026·Updated October 5, 2026·9 min read·LinkedIn

Picture a pallet that lands at the warehouse counted eleven units short. Nobody on your side owns that receipt. The gap sits in a spreadsheet for nine days.

Meanwhile the storefront keeps selling a number that was never true. That is an integration failing, and not one line of the connector is broken.

A 3PL is a third-party logistics company that stores, picks and ships your orders. A WMS, or warehouse management system, is the software that warehouse runs to track stock and pick work. You can connect to the 3PL’s app or to its WMS.

The work is the same either way. We build and run Shopify integrations and custom apps around it. An integration here means software that passes orders and stock counts between two systems.

The short answer. Connect a Shopify 3PL or WMS through five handoffs: stock in, order out, tracking back, inventory back, returns back. Shopify asks a fulfillment service for all its inventory data once every hour. Choose the route by who maintains it. Then name one owner per handoff.

Four routes to a 3PL or WMS, by who maintains them. Fit and ownership are our judgement. The hourly refresh is Shopify's documented figure (build for fulfillment services). Costs are not measured here.
RoutePick it whenWho maintains itCheck first
The 3PL's own Shopify appIts standard flows cover your ordersThe 3PLWhich of the five handoffs it supports, and how it treats order edits
Fulfillment service app on the Admin API (the way software talks to Shopify)The warehouse's WMS has an API, a connection point for software, but no Shopify appYou, or your developerCallback endpoint (the web address Shopify sends orders to), upgrades to each new API version, alerts
Integration platform (a hosted tool that maps data between systems)The warehouse is one of several systems in the pathYou, on a hosted toolWho owns the mappings when a field changes
Custom middleware (a service you build between the two systems)You route across a second warehouse or batch filesYouWho gets the alert at 2 a.m. when it fails
Four routes to a 3PL or WMS, by who maintains them. Fit and ownership are our judgement. The hourly refresh is Shopify's documented figure (build for fulfillment services). Costs are not measured here.

Who this is for, and who it is not for. This is for the operations, ecommerce or fulfillment lead moving stock into a third-party warehouse. Your store may be on Shopify or on Shopify Plus, Shopify’s top plan. It is not for you if you are choosing between named 3PL providers.

We cite what Shopify documents, not any provider’s software. Nothing here is a measured result for a 3PL integration. The one count we cite comes from a different system.

Five handoffs carry every order between Shopify and the warehouse

Shopify models a 3PL as a fulfillment service. That is an app providing “third-party warehousing, print on demand, or fulfillment services that prepare and ship orders on behalf of merchants” (fulfillment service apps). Shopify creates a location for that service.

The warehouse’s stock lives there. Orders are assigned to it. The quantity held there is what the storefront sells.

The five handoffs to specify before build. A row with no named person in the last column is not finished.
HandoffRecord in ShopifyTriggerException owner to name
Stock inIncoming, then on hand at the 3PL locationThe inbound shipment is received and countedWho reconciles a short or over receipt
Order outFulfillment order (Shopify's record of which items ship from which location) at the 3PL locationA fulfillment request is submittedWho acts on a rejected request
Tracking backFulfillment with carrier, tracking number and URLA package shipsWho chases a shipment with no tracking
Inventory backQuantities at the 3PL locationScheduled refresh, receipt or adjustmentWho investigates a count difference
Returns backReturn, refund and restockA refund is issued, or the return is inspectedWho grades the unit and deselects restock
The five handoffs to specify before build. A row with no named person in the last column is not finished.

Stock in is the easiest handoff to skip. It happens once per shipment, not once per order. Shopify holds the units as incoming.

Incoming stock cannot be sold until it is received (inventory states). Ask how fast your provider reports a receipt. Then name the person who checks a pallet counted short.

Diagram of the five handoffs: two arrows carry stock and orders to the warehouse, three carry tracking, inventory counts and returns back to the store, each with a named owner.
Direction of travel for each of the five handoffs. The table above carries the record, trigger and owner for each one.

Connecting a WMS: what changes and what does not

A WMS is the system inside the warehouse, so the question changes from “which app” to “who talks to it”. Some 3PLs hide their WMS behind their own Shopify app. Others expose an API and leave the Shopify side to you.

An API, or application programming interface, is a set of rules that lets one program ask another for data. In that second case your app signs the warehouse up as a fulfillment service. It then takes on the order lifecycle, from request to shipped parcel.

Shopify tells such an app how to receive work. It says: “Apps must configure an endpoint on a callback URL where Shopify will send the notifications for fulfillment requests” (build for fulfillment services, re-read 5 October 2026). Your side then has to pass each request into the WMS. It must also report fulfillments and stock back to Shopify.

What does not change is the ownership list. The WMS adds three questions the 3PL’s own app answers for you:

  • Which system creates the shipment record, and which one is believed when they disagree?
  • Does the WMS count stock the way Shopify does? A shelf count is “on hand”, and Shopify sells against “available”.
  • Who gets the alert when the callback fails, and how soon would anyone notice?

Shopify’s documentation does not describe WMS integration directly. Treat these three as our judgement, not a platform rule. Ask any WMS vendor to show your awkward cases live.

Try a rejected request, a short pick (the warehouse finds fewer units than ordered) or an order edited after it went out. A demo of a clean order tells you almost nothing.

Every exception needs an owner and a queue

Each case needs two answers: who decides, and where that decision becomes visible to the person who must act.

Rejected requests. Shopify says “the fulfillment service either accepts or declines the fulfillment, and the outcome is noted in the order timeline” (app fulfillment). A timeline note is not an alert. Decide who reads rejections, and how often.

Cancelling after the service says yes. After acceptance you must send a cancellation request. The warehouse can accept or reject it. Shopify is blunt on the same page.

It says: “Reverting an order to unfulfilled doesn’t stop your fulfillment service from fulfilling the order.” The order can still ship. You pay for the goods and the pick. Agree a cut-off time and tell support what it is.

Address changes. These land after checkout, often after the request went out. A hold pauses a fulfillment order until someone releases it. Shopify documents a mutation (a programmed instruction) that holds a fulfillment order.

The documented hold reasons include INCORRECT_ADDRESS. Confirm who sets and clears a hold.

Where a late change means a garment already cut to the old address, the stakes are physical. We build the Shopify Plus platform for SENE Studio. There, a named person accepted every one of 37 changes to the order systems between 14 July and 8 September 2026.

Order edits after export. Shopify lets you edit unfulfilled items but says “you can’t remove fulfilled items or adjust their quantity”. It also warns that “if you edit an order to remove an item, then your fulfillment app might not remove the item” (order editing). Ask whether edits are honoured, then write your support policy to match.

Short picks and splits. Shopify says a service “can create multiple fulfillments for a given fulfillment order if required, representing multiple packages to be shipped”. Decide who tells the buyer. Decide whether the remainder is held or dropped. A short pick is a stock event too.

Split locations. Order routing is the rule that picks which location ships an order. Shopify says “if a location has enough inventory to fulfill an entire order, then the order is assigned to that location” (locations). If none can, the order is split, or the highest-priority location oversells. A split means two tracking numbers and one confused buyer.

To the buyer, a rejection, a refused cancellation and an unreleased hold all look the same. The parcel has not moved. Route all three into one queue an operator can see.

A submitted request forks to Accepted or Rejected. Cancellation requested and On hold branch off the accepted path, and every gold branch feeds a single tray labelled Exception queue with an operator standing beside it.
A submitted request ends Accepted or Rejected. From Accepted it can still become Cancellation requested or On hold, so all three belong in one queue.

Compare the same inventory state at the same moment

Stock is the handoff most often called broken when it is working as set up. Shopify tracks stock per location, and the 3PL has a location of its own. The two counts describe different shelves.

Shopify names five states. On hand is every unit at a location. Available is what you can sell.

Committed is set aside for open orders. Unavailable covers damaged, quality check and safety stock. Incoming cannot be sold yet.

Ask what your provider’s number measures. A shelf count is on hand. Set against Shopify’s available, it shows a gap that is not an error.

Where the service manages stock, Shopify documents that “a request for all inventory data happens once every hour” (build for fulfillment services, above). Ask which route your provider uses. Then compare both counts at one fixed time each week.

Check in this order: timing, what each number means, how products are matched, then a missed update. Each product is matched by its SKU, the stock code printed on it. Our guide to Shopify inventory sync problems walks that path.

Returns close the loop, and restocking is not silent

Shopify ticks Restock items on a refund when the item is inventory tracked. A refund therefore puts units back into sellable stock unless someone unticks it.

The same help page says “if you refund an unfulfilled item, then the item is removed from the order and can’t be fulfilled”. Someone at the warehouse decides whether the unit can be sold. Where it restocks is a choice to settle with the provider. It is not a default you inherit.

What breaks, and who owns it

The usual push-back is that this is too much detail, because the provider has done it hundreds of times. We have not measured how often it goes wrong for any provider. Three things break anyway. The provider does not own them.

  • Nobody reads the order timeline. Rejections and refused cancellations live there and nowhere else. With no queue and no daily reader, the buyer spots it first.
  • The counts are read in different states. A shelf count against Shopify’s available will always differ. Agree the state, the place and the moment first.
  • The provider changes their app. An update or an API move can alter a handoff you tested once. Re-run the rows it touches.

Compare the same state, at the same location, at the same moment. A warehouse’s physical count and Shopify’s available quantity differ for valid reasons. Agree which state you are comparing before anyone calls the difference a bug.

Prove each handoff before go-live

Sign-off is a list of tests, each with a known start state and an agreed result. Our Shopify ERP integration guide has a worksheet these rows adapt to. ERP, or enterprise resource planning, is the system that holds your books and stock value.

An untested row stays untested. It is never a pass.

6 scenarios, 6 acceptance conditions. Record the input, the expected result and the records seen on both sides.
ScenarioAcceptance condition to agree
First inbound receivedThe counted quantity appears at the 3PL location, and a short receipt reaches a named owner
Rejected fulfillment requestThe rejection reaches a named owner, and the customer promise is resolved
Cancellation after acceptanceThe warehouse response is in the order timeline, and the cut-off time is in the support macro
Address change before pickA hold is applied and released, and the parcel ships to the corrected address
Short pick or split shipmentShipped items and the remainder land in the agreed state, and the customer is told once
Inventory discrepancy checkThe 3PL count and Shopify's available agree within the tolerance you set, at the fixed weekly time
6 scenarios, 6 acceptance conditions. Record the input, the expected result and the records seen on both sides.

Cutover is the day you switch to the new setup. On that day, name who watches the queue each day, and who they call. Re-run affected rows when the provider changes their app, when routing rules change, or when the API version moves. If you are replatforming too, this belongs in the Shopify migration checklist.

Common questions

What is a Shopify 3PL integration?

It is the connection between a Shopify store and a third-party warehouse that picks and ships your orders. Shopify models the warehouse as a fulfillment service and creates a location for it. The warehouse’s stock, the fulfillment orders sent to it and the tracking it returns all hang off that one location.

How do you integrate a WMS with Shopify?

Register the warehouse as a fulfillment service through a custom app. Or use the 3PL’s own Shopify app if it has one. A custom app must offer a callback endpoint for fulfillment requests. It then reports fulfillments and stock back. Decide who owns that app, its alerts and its API upgrades.

Does Shopify stop a 3PL shipping an order I cancelled?

No. Shopify states that reverting an order to unfulfilled does not stop your fulfillment service from fulfilling it. After acceptance you must send a cancellation request the warehouse can accept or reject. Until it accepts, the order can still ship and you are charged.

Why does my 3PL's stock count not match Shopify's?

Usually because they measure different states. A warehouse physical count is Shopify’s on hand, which includes committed and unavailable units. Shopify’s available quantity is only what you can sell. Compare one named state, at one location, at one fixed moment each week.

How often does Shopify refresh inventory from a fulfillment service?

Shopify documents a request for all inventory data once every hour. That applies to a fulfillment service app with inventory management enabled. There are also requests for single SKUs at setup and when SKUs change. Confirm which route your provider uses, because some push on their own schedule.

Facts checked October 2026. Shopify’s build-for-fulfillment-services page was re-read on 5 October 2026. The other Shopify pages carry their 21 September 2026 read date. Re-check by 5 November 2026, before you sign anything. Sources: fulfillment service apps, build for fulfillment services, app fulfillment, fulfillmentOrderHold, FulfillmentHoldReason, order editing, locations, inventory states, multi-location inventory, refunding orders.

Filed under

3plecommerce-operationsfulfillmentintegrationsshopifywms

From the intelligence suite

Where is your ecommerce stack leaking revenue?

SiteScore surfaces the technical and conversion gaps holding your store back. Free analysis, no sales pitch.

Run a free check
Continue reading
[Blog Image]

Shopify & Ecommerce

Best ERP for Shopify: ten systems by order volume

Most Shopify stores under about $2 million a year do not need an ERP. Past that, structure decides the pick: entities, warehouses, wholesale price lists. Ten systems compared on connector scope, sync failures and published price.

Rizwan QaiserOct 5, 2026
9 min read
A storefront on the left connects to a tall enterprise finance building on the right through three different connection devices stacked in the centre: a sealed prebuilt connector, an open platform rail and a hand built custom module, with an exception tray and an operator below them.

Shopify & Ecommerce

Shopify NetSuite integration: which connector to pick

Oracle's NetSuite Connector lists from $199.92 a month on the Shopify App Store. Compare it with Celigo and a custom build on cost, limits and who owns the work afterwards.

Rizwan QaiserSep 14, 2026
9 min read