Inventory

How to Fix Inventory Truth Across Shopify and a 3PL

By Ruchit Dalwadi · Reviewed by Lalith Nandan Kalava · · 10 min read

It is Tuesday morning and the customer service inbox has fourteen messages that all say the same thing. Order confirmed on Shopify Friday night, charged Saturday, and now an email from the 3PL saying the SKU is short. The ops manager pulls the Shopify inventory report. It says 38 units on hand. The 3PL portal says 11. The buyer for a wholesale account calls about a PO that was supposed to ship yesterday and asks, politely, whether the units were ever actually there. Nobody in the room can answer with confidence. The numbers exist. They just do not agree.

How do you fix inventory truth across Shopify and a 3PL?

The short answer to how to fix inventory truth across Shopify and 3PL is that you stop treating Shopify as the source of truth for stock. Shopify is a sales channel. The 3PL is an execution partner. Neither of them is designed to be the master record of what your brand owns, what is allocated to wholesale, what is reserved for a DTC pre-order, and what is genuinely available to sell across both. That role belongs to a system in the middle that holds the canonical on-hand number and pushes available-to-sell figures out to each channel.

Most apparel brands between five and a hundred million in revenue arrive at this problem the same way. They started on Shopify, added a 3PL when in-house pick-and-pack stopped working, layered in a wholesale channel through Faire or NuORDER or direct EDI, and bolted on a sync app to keep the storefront and the warehouse in approximate agreement. It works for a while. Then it does not. The gap between approximate and accurate becomes the difference between a happy customer and a refund.

What does inventory truth actually mean?

Inventory truth is the property of a single, trusted on-hand and available-to-sell number that every channel, team, and report agrees on at the same moment in time. It has three components. The first is on-hand, which is the physical count of units sitting in a location. The second is allocated, which is the number of units already promised to an order, a wholesale PO, a transfer, or a hold. The third is available-to-sell, which is on-hand minus allocated, optionally adjusted for safety stock or channel-specific reserves.

When inventory truth holds, every system in the stack derives its number from the same source. Shopify shows what is available for DTC. The wholesale portal shows what is available for B2B. The 3PL shows what is physically in the bin. Customer service can quote ship dates without guessing. Finance can close the month without three reconciliations. When inventory truth breaks, every team starts keeping its own private spreadsheet of what it thinks is real, and the ops manager spends Mondays adjudicating between them.

Why does Shopify and the 3PL drift apart?

The drift is not caused by bad software. It is caused by an architecture in which two systems are both pretending to be the source of truth. Shopify deducts inventory when an order is placed. The 3PL deducts inventory when a unit is picked. Between those two events, there is a window. In that window, the order can be cancelled, the customer can edit the address, the warehouse can find the unit damaged, the SKU can be short on the shelf even though the system said it was there, or a return can come in and be received back into stock without a corresponding update on the storefront.

Sync apps try to close that window by polling each side and pushing deltas. They work in the simple case of one channel and one warehouse. They struggle the moment you add a second sales channel that also wants to deduct from the same pool. Now Shopify says 38, the 3PL says 11, and the wholesale portal thinks it has 22 reserved for an open PO. The sync app does not know which of those numbers is correct because none of them is wrong on its own terms. They are all locally consistent and globally incoherent.

This is Breakpoint 3 of the 6 Breakpoints of Apparel Operations: inventory truth gets weaker. It almost always shows up after Breakpoint 2, when production and supply execution have already started to drift from the plan, and it almost always feeds Breakpoint 4, when order flow becomes harder to trust. Once the on-hand number is in question, every order written against it inherits the doubt.

What are the symptoms of broken inventory truth?

The symptoms are operational, not technical. Customer service starts triaging oversells as a daily task instead of a rare event. The wholesale team holds units back manually because they do not trust the available number, which then makes DTC look like it has less stock than it does, which then drives discounting decisions on items that are not actually deep. The 3PL invoices for cycle counts that uncover larger variances than expected, and the variance is always blamed on the warehouse even when the root cause is a stale feed from the storefront.

Finance feels it during close. Cost of goods sold cannot be tied cleanly to units shipped because the unit count at the start of the period and the end of the period do not reconcile to the activity in between. The CFO asks for a single inventory roll-forward and gets three different versions, one from the warehouse manager, one from the e-commerce manager, and one from the wholesale lead. Each is internally defensible. None of them match.

The most expensive symptom is the one nobody puts on a dashboard. Wholesale buyers stop trusting your ATS file. They start padding their orders or shifting volume to brands whose ship-complete rate is more reliable. You do not lose the account in one quarter. You lose it over four, and by the time you notice, the relationship is already cooling.

Why is a sync app not enough?

A sync app keeps two endpoints in approximate numerical agreement. It does not own the concept of allocation. It does not understand that 38 units on hand might mean 12 are reserved for a wholesale ship window opening next Monday, 6 are sitting in a quality hold, and 20 are genuinely available to DTC. It treats inventory as a single number per SKU per location, which is the data model Shopify and most 3PL portals use. That model is fine for a single-channel brand. It breaks the moment a unit can be claimed by more than one buyer.

Sync apps also assume the 3PL is the physical truth and Shopify is the channel display. That is half right. The 3PL knows what is in the bin. It does not know what should be in the bin, because it does not see open POs from your factories, in-transit ASN data from your freight forwarder, returns that have been authorized but not yet received, or transfers between facilities. Without that upstream context, the 3PL number is accurate only about the past. Available-to-sell is a forward-looking number, and you cannot derive it from a backward-looking source.

What does the architectural fix look like?

The fix is to designate a system in the middle, between the channels and the warehouse, that owns inventory as a record. That system holds the canonical on-hand by location, computes allocations against open DTC orders, open wholesale POs, transfers, and holds, and publishes available-to-sell out to each channel with channel-specific rules. Shopify gets a feed that excludes wholesale reservations. The wholesale portal gets a feed that excludes DTC safety stock. The 3PL receives outbound orders to pick and reports back actuals, but it is no longer asked to be the source of truth for what the brand owns.

In practice, the system in the middle needs to do a few things competently. It needs to ingest receipts from the 3PL when units arrive from the factory and post them to on-hand. It needs to receive order events from Shopify and from the wholesale channel and post allocations the moment the order is committed, not when the warehouse picks it. It needs to handle returns coming back into stock with a state that distinguishes sellable from inspection-pending. It needs to handle multi-location math when you have a 3PL in the US and a 3PL in the EU and a small in-house pick station for VIP orders or sample sends.

Done well, this is invisible to the customer and to the 3PL. The customer sees accurate available-to-sell on the storefront. The 3PL sees clean outbound orders and a reliable receipt process. The internal team sees one number that everyone references in standup, and the question of whose spreadsheet is right stops coming up.

How do you handle wholesale and DTC sharing the same pool?

The hardest case is a single SKU that wholesale and DTC are both selling out of the same physical pool. The temptation is to split the pool, set aside 60 percent for wholesale and 40 percent for DTC, and let each channel sell against its quota. That works on paper. In practice it leaves units stranded on one side while the other goes out of stock, and the brand discounts a SKU that is not actually deep.

The better approach is a shared pool with prioritised allocation. Wholesale POs reserve units when the order is confirmed and the ship window is set. DTC sells against whatever remains, with a configurable safety buffer if you want to protect a launch or a top-seller. When wholesale ships, the reservation converts to a deduction. When wholesale cancels or shorts, the units flow back into the available pool automatically. This requires the system in the middle to understand the lifecycle of a wholesale order, not just its line totals, which is why a generic sync layer cannot do it.

How do you keep the 3PL feed honest?

The 3PL feed is honest when three things are true. Receipts are posted within a defined SLA, usually same-day for full container receipts and within twenty-four hours for parcel returns. Cycle counts are scheduled and the variances feed back into the master record with a clear adjustment reason. Outbound shipment confirmations are sent in near real time, not in a nightly batch that creates a twelve-hour window where the storefront thinks the unit is still available.

If your 3PL cannot meet those three conditions, the inventory architecture cannot be perfect no matter what software sits in the middle. This is worth saying plainly because brands often look for a software fix to what is actually a 3PL SLA problem. The system in the middle can absorb a lot of operational noise. It cannot manufacture data the 3PL does not send.

What this means for an apparel operations team

If your team is spending Monday mornings reconciling Shopify against the 3PL portal, you do not have a sync problem. You have a source-of-truth problem. The fix is to stop asking either system to play a role it was not designed for and to put a record-keeping layer in the middle that treats inventory as a first-class concept, with on-hand, allocations, and available-to-sell as distinct fields that channels read from rather than write to.

The signal that you are ready for this change is usually not a dramatic incident. It is the slow accumulation of small ones. Three oversells last week. A wholesale buyer who asked twice about ship-complete rates. A finance close that took an extra two days because the inventory roll-forward did not tie. None of those is fatal alone. Together they are the cost of running on an architecture that worked at five million in revenue and stopped working somewhere between fifteen and thirty.

Fixing inventory truth does not eliminate every operational problem in an apparel business. It does eliminate the problem of not knowing what you own, which is the foundation every other operational decision rests on. Once the number is trustworthy, every team downstream of it gets faster, and the conversation in the room shifts from arguing about the data to acting on it.

Frequently asked questions

R
Written by
Ruchit Dalwadi
Head of Product, Apparel Operations, Uphance

Ruchit writes about product strategy for apparel operations, covering how mid-market fashion brands use connected workflows to manage product development, inventory, orders, warehouse execution, and reporting.

L
Reviewed by
Lalith Nandan Kalava
Senior Product Manager, Reporting and Operational Analytics, Uphance

Lalith writes about operational reporting and analytics for apparel brands, covering how connected data across inventory, orders, fulfillment, and warehouse execution translates into reporting that supports real decisions.

More from the blog