3PL · OPERATIONS · INTEGRATIONS · 3 JULY 2026 · 8 MIN READ
3PL onboarding: the ninety days nobody plans for
The integration is the easy part and it is the only part on the plan. The data, the physical move and the exceptions are where the quarter actually goes.
Four things in sequence, only one of which is usually on the plan. First, master data: SKUs, barcodes, dimensions and weights have to agree between your catalogue and their warehouse system, and they rarely do. Second, the integration: a fulfilment service in Shopify, which the documentation describes as corresponding to an inventory location, with a callback URL Shopify sends fulfilment requests to and optional flags for whether the service manages inventory and supplies tracking. Third, the physical move — stock counted out of one building and into another, with a period where the number in Shopify is wrong. Fourth, the exceptions: returns, B2B, bundles, gift notes, cancellations, pre-orders. Budget the quarter around the first, third and fourth. The integration is the part with documentation.
IN SHORT
- Each fulfilment service corresponds to an inventory location in Shopify, and Shopify's guidance is that each physical warehouse should have its own fulfilment service.
- The integration hangs off a callback URL: Shopify sends fulfilment and cancellation notifications to it, and can also call it for stock levels and tracking numbers when those flags are enabled.
- Master data reconciliation — SKUs, barcodes, dimensions, weights — is the longest task in a 3PL onboarding and the one never shown on the 3PL's own timeline.
- A fulfilment service can reject a request as well as accept it, so the storefront and your support team need a story for the order that bounces back to open.
- Go live with a subset of SKUs and dual-run with the old operation. A cutover with no fallback is a cutover that cannot be paused.
- Never move fulfilment in your peak quarter. The saving does not survive one bad fortnight of late deliveries.
What the timeline says, and what the quarter contains
A 3PL will quote onboarding in weeks, and the number is honest from where they are standing. They are measuring their own work: opening an account, configuring your rate card, receiving stock, connecting a pre-built integration. That genuinely is a few weeks.
What the number omits is everything on your side of the boundary. Nobody at the 3PL is going to reconcile your barcode data. Nobody there will decide what happens to a subscription renewal that ships from a location the 3PL does not hold stock in. Nobody will work out whether your bundles are a real product with a barcode or four lines the pick team have to assemble. Those are your questions, they take longer than the integration, and they are answered by people who already have a job.
Ninety days is our planning figure rather than a measured average, and it is chosen to include the two weeks after go-live when the exceptions arrive. Plan for less and you will get to go-live with the exceptions unhandled, which is the worst place to discover them, because by then the stock is in the other building.
Weeks one to three: master data, which is where it goes wrong
A warehouse management system is a system of record for physical objects. It needs each object to be identifiable, and that requirement exposes every shortcut your catalogue has taken over the years.
The reconciliation list is short to write and long to do. Every sellable variant needs a SKU that is unique, stable and matches what is physically on the box. Barcodes need to exist and be scannable — a 3PL picking by barcode cannot work around a variant that has none, and duplicates across variants will cause mis-picks that look like theft in the data. Weights and dimensions need to be real, because they drive both the shipping rates you are quoted and the cartonisation the warehouse does.
Two patterns cause most of the pain. The first is SKUs that encode meaning — a scheme where the first three characters stopped being true years ago, and where two products share a code because someone reused a discontinued one. The second is variants that exist commercially but not physically: a bundle sold as one SKU that is four items on a shelf.
Do this work before the integration, not alongside it. Fixing a SKU after it exists in two systems means fixing it in two systems plus everything downstream that referenced it, and the accounting team will have opinions.
- Export the full variant list and check uniqueness on SKU and on barcode, separately. Both need to hold.
- Find the variants with no barcode, no weight or a weight of zero, and fix them before anyone sees a rate card.
- Decide how bundles and kits are represented physically. This is a real decision with a cost either way, and it cannot be deferred past the first pick.
- Agree the SKU as the single join key between Shopify and the WMS, in writing, and stop anyone from editing one.
Weeks three to six: the integration, and the three ways to do it
The Shopify side of this is well documented and better than most people expect. A 3PL registers as a fulfilment service, and the documentation is explicit that "each fulfillment service corresponds to an inventory location in Shopify" and that "each physical fulfillment centre or warehouse should have its own fulfillment service". That gives you a location to allocate stock against and to route orders to.
The service is created with a name and a callback URL — "the URL to send requests for the fulfillment service" — plus a small set of flags: inventoryManagement, "whether the fulfillment service manages product inventory and provides updates to Shopify", trackingSupport, "whether the fulfillment service provides tracking numbers for packages", and requiresShippingMethod, which defaults to true.
From there the flow is asynchronous and worth understanding even if you never write a line of it. Shopify sends a notification to the callback URL — a FULFILLMENT_REQUEST — and the 3PL fetches its assigned fulfilment orders. It then either accepts, moving the fulfilment order to in progress, or rejects, which returns it to open and tells the merchant it cannot be fulfilled. When goods ship, the service creates a fulfilment with tracking. Where the service manages inventory, Shopify calls a stock endpoint on the same callback URL to fetch levels.
That rejection path is the one nobody designs for, and it is the most common cause of an order sitting untouched for four days. Someone has to notice, and something has to happen. Decide before go-live whether rejection triggers an alert, a reroute to another location or a customer email, and make sure your support team can see it without opening the 3PL's portal.
Three ways to connect, in the order we would try them:
- The 3PL's own Shopify app. If they have one and it is maintained, use it. It is free, it is supported, and it is somebody else's to keep working across API versions. The overwhelming majority of mid-market stores should stop here.
- A middleware platform. Reasonable when you already run one for the ERP, or when orders need enriching or splitting before they reach the warehouse. Reasonable, not free: it is another system in the path of every order, and another place an order can sit.
- A custom integration. Correct when the 3PL has no app, when their app cannot express your routing, or when you have several fulfilment nodes with rules between them. It is the most expensive option in year one and every year after, so pick it because the first two genuinely failed, not because it feels more controllable.
Weeks six to ten: the move, and the fortnight your stock number is wrong
Here is the fact that governs the cutover: for some period, the quantity in Shopify will not match the quantity on a shelf anywhere. Stock is in a lorry, or counted out of one building and not yet into another, or on a pallet that has arrived but not been put away. There is no integration that fixes this, because it is a physical problem.
What you control is how long that period lasts and what the storefront does during it. The two levers that work are sequencing and buffers: move in tranches rather than all at once, and hold a deliberate safety buffer on the lines that are moving so the site undersells rather than overselling. Underselling for a fortnight costs margin. Overselling costs cancellations, refunds, support volume and a review.
Dual-run if you possibly can. Keep the old operation live for a subset of orders, move a category or a set of best-sellers first, and watch a real week of picking before the rest follows. It costs more for a month and it means the first mis-pick, the wrong box size and the missing gift note are discovered on a small volume instead of all of it. Hold a proper count on both sides of the move too — it is the only moment you will get an unambiguous answer about what you actually own, and reconciling the variance needs a name against it.
Weeks ten to thirteen: the exceptions that were never scoped
Every 3PL onboarding we have seen goes the same way after launch: the standard order works on day one, and the next three weeks are spent on the cases nobody listed. Write the list before go-live and most of the quarter is recovered.
Returns. Who receives them, who inspects them, what condition grades exist, and how a return re-enters sellable stock. A return that goes back on the shelf without a grading step is how damaged goods get resold.
Cancellations and amendments. Shopify can request a cancellation, and there is a window after which the warehouse cannot honour it. Find out what that window is in hours, and make sure support know it.
Multiple delivery methods in one order. Shopify's own guidance notes that "checkouts and orders can include multiple delivery methods, such as shipping and pickup in the same order", so an order is not always one shipment from one place. Anything reading the order — a support tool, a dashboard, an email — has to iterate over the fulfilment orders rather than assume one.
B2B and wholesale. Pallet labelling, purchase order numbers on the paperwork, delivery booking slots, case packs. None of this exists in a direct-to-consumer setup and all of it is mandatory for a retailer who will charge you for getting it wrong.
The branded unboxing. Tissue, cards, stickers, handwritten notes, seasonal inserts. Every one is a pick instruction and a cost per order, and they are the single most common thing a brand assumes transfers and finds does not.
This is the phase where a [support and store management retainer](/services/support) earns its keep, because the work is a stream of small integration fixes and operational decisions over several weeks rather than a project with a shape. The alternative — the agency having finished at go-live — is how a store ends up with a warehouse that works and a storefront that has not been told.
What we would tell you not to do
Four things, all of which we have watched cost more than the move saved.
Do not move in your peak quarter. The rate card saving for one quarter is a small number. Two weeks of late deliveries in November is a large one, and it lands on your most valuable customers at the moment they are most likely to tell somebody.
Do not build a custom integration first. If the 3PL has a maintained Shopify app, start there and live with its limits for a season. You will learn what the limits actually are, which is a much better brief than the one you would write today. If you then need to replace it, you are replacing it with knowledge instead of guesses.
Do not switch 3PL to fix a problem the 3PL did not cause. Late deliveries caused by inaccurate stock, overselling caused by a broken sync, or mis-picks caused by duplicate barcodes all follow you to the next warehouse. Establish the cause before signing anything, because moving is the most expensive way to run a diagnostic.
Do not go live on everything at once. A tranche you can pause is a project you can recover. The instinct to cut over cleanly on one date comes from wanting the old cost to stop, and that saving is worth far less than the option to stop.
Questions this raises
What does 3PL onboarding involve?
Four workstreams. Master data — unique SKUs, scannable barcodes, real weights and dimensions. The integration — registering a fulfilment service that corresponds to an inventory location in Shopify, with a callback URL for fulfilment requests and optional inventory and tracking flags. The physical move, including a period where your stock number is wrong. And the exceptions: returns, cancellations, B2B, bundles and packaging inserts. Only the second has documentation.
How long does it take to move to a new 3PL?
The 3PL will quote weeks and be honest about their own tasks. We plan for a quarter, because that includes the data reconciliation nobody assigns and the fortnight after go-live when the exceptions arrive. The variable that actually decides it is the state of your catalogue data: a clean one shortens everything, and a catalogue with duplicate SKUs and missing barcodes will dominate the timeline.
How does a 3PL connect to Shopify?
As a fulfilment service, which corresponds to an inventory location, with a callback URL Shopify sends fulfilment and cancellation notifications to. Flags control whether the service manages inventory and provides tracking numbers. In practice you connect through the 3PL's own Shopify app, through middleware you already run, or through a custom integration — and you should try those in that order.
What happens if a 3PL cannot fulfil an order?
It rejects the fulfilment request and the fulfilment order returns to open, which signals to the merchant that fulfilment cannot proceed. The system handles this cleanly; organisations usually do not. Decide before go-live who is alerted, whether it reroutes to another location, and what the customer is told — otherwise the order sits at open until someone notices, which is typically when the customer asks.
Should you run one fulfilment service or several?
One per physical building. Shopify's guidance is that each physical fulfilment centre or warehouse should have its own fulfilment service, and each service corresponds to an inventory location. Collapsing two warehouses into one service costs you the ability to hold accurate stock per site and to route orders sensibly, which is exactly the capability you are paying a multi-node 3PL for.
Can you switch 3PL without overselling?
Not perfectly, but you can choose which way the error goes. During the move the number in Shopify cannot match reality, so move in tranches, hold a deliberate safety buffer on the lines in transit, and count on both sides. Underselling for a fortnight costs margin; overselling costs refunds, support volume and reviews. Take the margin hit.
NEXT STEP
Free store audit
A senior Shopify engineer reviews your storefront, theme performance and checkout, then sends a prioritised list of fixes.
