What actually syncs in a shopify 3pl integration
A working shopify 3pl integration keeps three things in sync automatically: orders, inventory levels, and tracking. Everything else — returns, catalogue content, customer notes — is either manual or a separate integration entirely. Knowing exactly where the automated boundary sits is what lets you predict where it breaks, instead of finding out from a customer email.
Orders move through Shopify’s Fulfillment Orders API. When a customer pays, Shopify creates one or more fulfillment orders — a distinct object from the order itself, one per Shopify location the line items are assigned to. A 3PL’s Shopify app registers as a fulfillment service against a specific location and receives fulfillment orders assigned there. This is the model that replaced Shopify’s older, simpler Fulfillment Service API, and the difference matters: the old model tied one location to one fulfillment provider with no splitting. Fulfillment Orders lets a single customer order split across several locations — your own warehouse and a 3PL, or two 3PLs — which is the only way most multi-warehouse setups function at all.
Inventory levels sync through the location the 3PL controls. Every SKU the 3PL stocks needs to exist as inventory at that location in Shopify, and every stock movement inside the 3PL’s warehouse management system — receiving, a damaged-unit write-off, a cycle count adjustment — has to push a corresponding update back to Shopify’s inventory_levels/update endpoint. When that push happens on a webhook, the two systems stay close to real time. When it happens on a scheduled batch instead, there’s a window where Shopify’s storefront is selling against a number the warehouse floor no longer matches.
Tracking is the simplest of the three and the one most integrations get right by default. Once the 3PL packs and hands a shipment to a carrier, it writes the tracking number and carrier code back to the fulfillment order, and Shopify marks it fulfilled and fires the shipping-confirmation email. The direction of travel only ever runs one way here — 3PL to Shopify — which is why tracking sync causes the fewest disputes of the three.
What doesn’t sync — and shouldn’t be assumed to
Product content stays in Shopify. Titles, descriptions, images, variant options — none of it is read by the 3PL side of the integration, and no 3PL writes it. The 3PL only ever needs a SKU, a quantity and shipping attributes like weight and dimensions to do its job. If your catalogue lives in a PIM that also pushes to Shopify, that’s a separate pipeline with its own failure modes — see the Shopify PIM guide for that boundary specifically.
Returns are the biggest gap most merchants don’t discover until the first one lands. A customer initiates a return in Shopify or through a returns app; the physical item goes back to the 3PL’s dock. Unless the integration explicitly includes return sync — and many don’t, because it’s a harder problem than outbound fulfilment — someone on your team has to manually confirm the item arrived at the 3PL and restock it in Shopify. Treat return handling as a feature to verify before signing, not an assumption that comes free with order sync.
Bundles and kits don’t sync cleanly either. Shopify sells a bundle as one SKU. Most 3PL warehouse management systems pick and pack at the component level, because that’s how physical inventory sits on a shelf. Bridging the two needs either a kitting configuration in the 3PL’s WMS that maps the bundle SKU to its components at pick time, or pre-kitting the bundle into a single physical unit ahead of demand — two different cost and speed trade-offs that the integration itself has no opinion on.
Customer service context — a note that a shipment needs to leave signature-required, a VIP flag, a request to hold for a gift date — doesn’t travel through the standard fulfillment order fields unless your 3PL’s app specifically supports custom line-item properties or order tags. Confirm which custom fields, if any, the 3PL’s picker actually sees.
The three things that break in almost every shopify 3pl integration
These three failure modes show up across nearly every Shopify-to-3PL setup, regardless of which 3PL app is in use, because they come from how the two systems are architected to talk to each other — not from a specific vendor’s bug.
Inventory drift between Shopify and the 3PL’s warehouse management system
Inventory drift is the gap between what Shopify believes is in stock and what’s actually on the shelf at the 3PL. It’s the most common failure because it’s caused by a design choice that looks harmless: whether stock updates push on a webhook or sync on a schedule. A webhook-driven update reflects a warehouse event — receiving, a pick, a damage write-off — within moments. A polling-based sync, common in older or lower-tier 3PL integrations, checks in on a fixed interval, and every minute inside that interval is a window where Shopify can sell inventory that no longer exists, or hold back inventory that’s already been received.
Drift compounds at multi-location and multi-channel merchants, because a sale on a marketplace channel or through POS also has to reconcile against the same 3PL-held stock, and a slow sync means two channels can both believe the same last unit is theirs to sell.
The fix: confirm — don’t assume — that the specific integration you’re running uses Shopify’s inventory_levels/update webhook for pushes in both directions, and ask your 3PL directly what triggers a stock update on their side: a pick confirmation, a receiving scan, or a nightly batch. If it’s a batch, that’s the number to negotiate down, not a limitation to accept. Run a manual reconciliation — count a sample of SKUs at the 3PL against Shopify’s reported quantity — on a regular cadence until you’ve confirmed the sync holds under real volume, not just in the vendor’s demo environment.
Split and partial fulfilments
Shopify’s older mental model assumes one order fulfils in one shipment from one place. Real fulfilment rarely works that way: a 3PL might be out of one SKU on an order and ship the rest, or an order might legitimately split across two locations because no single warehouse holds every line item. The Fulfillment Orders API supports this — that’s precisely why Shopify built it — but plenty of integrations, apps and internal reporting still assume the old one-order-one-shipment shape, because it’s simpler to build against.
When that assumption breaks, the symptoms are specific: a fulfilment status that reads “fulfilled” when only part of the order shipped, a tracking email sent for the wrong subset of items, or an order that shows as complete in Shopify while a second package is still sitting in the 3PL’s queue waiting on restock. None of this is a bug in Shopify or in the 3PL — it’s a mismatch between what the platform supports and what the specific integration was built to expect.
The fix: confirm your 3PL’s Shopify app is built against Fulfillment Orders, not the legacy Fulfillment Service API — this is worth asking directly, because some older integrations were never migrated. Then check how your order-status reporting, customer-facing tracking page, and any post-purchase email flow each read fulfilment status: if any of them assume a single fulfillment event per order, they need to be rebuilt to read fulfillment-order-level status instead of order-level status.
Cancelled or edited orders after the 3PL has released them to pick
Cancelled or edited orders after release carry the highest cost per incident of the three, because by the time the change happens the order has physically left the building — or is about to. A customer cancels, or a support agent edits an address or swaps a variant, after Shopify has already sent the fulfillment order to the 3PL. Shopify’s own cancellation or edit doesn’t reach into the 3PL’s warehouse management system and pull the item back off the conveyor. Whether the change lands in time depends entirely on where the order sits in the 3PL’s own pick-pack-ship sequence at that exact moment — a race condition, not a software gap.
An order caught before pick starts costs nothing. An order caught mid-pick means a worker has to be pulled off task to intercept it. An order caught after it’s packed and labelled often ships anyway, and the cancellation or edit becomes a return-to-sender or a manual refund issue instead of something the integration prevented.
The fix: this one isn’t solved by a better sync — it’s solved by slowing Shopify down on purpose. Configure a fulfillment hold that triggers automatically on any order edit, so an edited order never silently continues toward release; require a human or a rule to clear the hold before it re-enters the fulfilment queue. For cancellations, require the 3PL’s cancellation-confirmation webhook to state which of the three states — before pick, during pick, after pack — the order was in when the cancellation reached them, and only credit inventory back to Shopify automatically for the first case. The other two need a person to close the loop, and pretending otherwise is how inventory counts quietly go wrong for weeks.
Where this integration work belongs on your team
None of these three failure modes is a reason to avoid a 3PL — they’re the reason to treat the Shopify side of that relationship as ops automation work, not a one-time app install. The sync itself is table stakes; the hold logic, the reconciliation cadence and the webhook-versus-batch decision are what determine whether a 3PL integration is dependable at $3M–$30M in volume or a source of weekly firefighting. That’s the work our ops automation service does for scaling brands: building the fulfilment-hold rules and reconciliation checks around the sync, not just wiring up the app.
For the fulfilment model itself — what a 3PL actually does day to day — see what 3PL fulfilment is. For how one major 3PL’s Shopify integration specifically behaves, see the ShipBob 3PL breakdown. And for the order-management layer that decides holds, edits and cancellations before an order ever reaches a 3PL, see ecommerce order management.
Sources
No external figures are quoted; this article is written from how Shopify’s Fulfillment Orders API, inventory sync model and 3PL fulfillment-service integrations are structured and operated.