Inventory

Inventory Truth Across Shopify and a 3PL: A Reconciliation Playbook

Inventory Truth Across Shopify and a 3PL: A Reconciliation Playbook
By Isabelle Feyerabend · Reviewed by Ronnell Parale · · 9 min read

It is Cyber Monday at 9:47 a.m. A customer success rep at a $14M womenswear brand is on Slack with the 3PL because a hoodie just oversold by 38 units on Shopify. The 3PL pulled the SKU for a wholesale ASN to Nordstrom that shipped Friday. The Shopify feed updated Sunday night. Marketing pushed an email at 6 a.m. The brand is now refunding 38 DTC orders and apologizing to a buyer who saw the promo. The ops lead opens a spreadsheet she has been maintaining since August. Column A is SKU. Column B is what Shopify thinks. Column C is what the 3PL thinks. Column D is the variance. There are 1,247 rows.

What does it mean to reconcile inventory across Shopify and 3PL?

To reconcile inventory across Shopify and 3PL is to make three numbers agree: the on-hand at the warehouse, the available-to-sell on the storefront, and the committed pool against open wholesale orders. Reconciliation is not a single nightly job. It is a layered cadence of real-time deductions on order placement, near-real-time delta syncs from the 3PL on receipts and picks, a nightly full snapshot reconcile, and a weekly cycle count audit on the SKUs that move the most or matter the most. When any of these layers breaks, the storefront and the warehouse drift apart and the brand starts overselling, underselling, or both at once.

This is Breakpoint 3 of the 6 Breakpoints of Apparel Operations: inventory truth gets weaker. It is the breakpoint that most $10M to $20M brands hit first, because it is the breakpoint where the spreadsheet stops being a workaround and starts being a liability.

Why do Shopify and a 3PL drift apart in the first place?

They drift because they were never designed to share a ledger. Shopify holds an inventory number per location and decrements it when an order is placed. The 3PL holds an inventory number per bin and decrements it when a pick is confirmed. Those two events do not happen at the same time, and they do not happen for the same reasons.

A wholesale ASN gets picked at the 3PL but never touches Shopify. A DTC return arrives at the warehouse and sits in a QC bin for nine days before it posts. A receipt from the factory lands as a 4,200-unit ASN but the 3PL receives it in three partial truckloads across two days. A retailer cancels a PO after the pick list has been generated but before the cartons ship. Each of these events is a small drift. Stacked across a 1,500 SKU catalog over a six-week selling window, the drift compounds into a 2 to 3 percent oversell rate at peak.

The configuration choices my customers wrestle with most are at this exact junction: which system owns on-hand, what channel each location maps to, how returns post, and when wholesale commitments deduct from DTC availability. Almost every reconciliation problem I see in onboarding traces back to one of those four decisions being made implicitly instead of deliberately.

What does the actual cost look like at a $15M brand?

Here is the back-of-envelope for a $15M apparel brand running wholesale plus DTC plus a 3PL. Six to nine hours a week of an ops person or a CX lead reconciling inventory across Shopify, the 3PL portal, and the wholesale system. A 2 to 3 percent oversell rate during peak weeks, which translates into refunds, chargebacks, and the soft cost of CX writing apology emails. One FTE effectively doing data plumbing across spreadsheets and CSV exports instead of running the business.

That FTE is not titled “data plumber.” She is titled operations manager or DTC manager. She is doing the work because nobody else can, and she is doing it because the architecture forces her to. Replacing her with a junior hire does not fix the problem. The work is structural.

What is the right reconciliation cadence?

There are four layers, and they each have a different job.

The first layer is real-time order deduction. When a Shopify order is placed, the available-to-sell number on the storefront must drop instantly. This is the layer most brands get right by default, because Shopify does it natively. The trap is that Shopify only knows about Shopify orders. It does not know that a 240-unit wholesale PO confirmed twenty minutes ago should also reduce the pool.

The second layer is near-real-time delta sync from the 3PL. Every receipt, every pick confirmation, every adjustment posts back to the ledger within the hour. If the sync is once a day, you are guaranteed to drift during high-volume windows. If the sync is event-driven on every transaction, you have a fighting chance.

The third layer is the nightly full snapshot reconcile. The 3PL sends a full inventory file. The ledger compares it line by line to the system of record. Variances above a threshold (units or dollars) get flagged for human review the next morning. This is the layer that catches what the delta sync missed, including silent adjustments at the warehouse and timing mismatches across the day boundary.

The fourth layer is the weekly cycle count audit on the top-moving and highest-value SKUs. Not the whole catalog. The 80/20. The SKUs that, if wrong, will cost the brand the most in oversells or stranded inventory.

If you skip any of these four layers, the layers above and below it absorb the variance until they cannot. Then you are back on Cyber Monday at 9:47 a.m.

Why channel-aware ATS is non-negotiable

Here is the POV I will defend without hedging: wholesale should not run through Shopify’s native flow. Shopify treats inventory as a single pool against a single channel. It has no native concept of wholesale-committed stock that is physically in the warehouse but not available to DTC. If you try to manage that with safety stock buffers, you will either oversell DTC or strand inventory that wholesale already committed to.

Channel-aware available-to-sell solves this. The system of record knows that the on-hand at the 3PL is 4,200 units, that 1,800 are committed to open wholesale POs with ship windows in the next 21 days, that 400 are reserved for a planned drop on the 14th, and that 2,000 are the actual ATS exposed to Shopify. When a wholesale PO confirms, the ATS for DTC drops. When a wholesale PO cancels, the ATS for DTC recovers. The brand sees one number that is true, not three numbers that disagree.

Magnolia Pearl runs this pattern across drops, same-day fulfillment, and international duties. The drop calendar drives reservations weeks in advance, and the reservations decrement the DTC pool the moment they are committed, not the moment the drop goes live. That is what makes the drop hold together. The reservation logic is upstream of the storefront, not bolted on after the fact.

How do you handle returns without breaking the ledger?

Returns are the silent killer of inventory truth. A return is not on-hand when it arrives at the dock. It is not on-hand when it is opened. It is on-hand when QC clears it and it is putaway. Brands that post returns on receipt oversell against units that turn out to be damaged. Brands that wait until end of month to post returns understate ATS by thousands of units during peak.

Returns should post to inventory in days, not weeks. The architecture that holds is a returns receiving event that creates a pending-restock unit, a QC event that either approves or rejects, and an automated putaway event that posts to ATS within the same business day. Magnolia Pearl operates this pattern because same-day fulfillment makes a slow returns flow visible immediately. If your returns sit for three weeks, you are quietly running the brand on a stale inventory number.

What does multi-entity wholesale do to the reconciliation problem?

It multiplies it. When I am running a config session with a new customer that operates two or three brands or entities under one warehouse roof, the reconciliation question becomes which entity owns which on-hand pool, how transfers between entities post, and what the B2B portal shows to a buyer who is shopping across brands.

Lufema runs this across multi-entity wholesale with a B2B portal and a multi-brand catalog. The B2B portal has to show real, channel-aware ATS by entity. A buyer logged in cannot see units that are physically in the same building but committed to a different entity’s DTC pool. The reconciliation layer has to enforce that boundary, and the ledger has to track ownership at the unit level. If it does not, the brand ends up booking PO lines that the warehouse cannot fulfill, and the chargeback follows two weeks later.

What are the operational anti-patterns to avoid?

There are four I see repeatedly in onboarding.

The first is treating the 3PL portal as the system of record. The 3PL knows what is in the building. It does not know what is committed against open POs, what is reserved for a drop, or what the storefront is selling against. The 3PL is a node on the ledger, not the ledger itself.

The second is reconciling on a CSV export. If your weekly cadence is to export from Shopify, export from the 3PL, paste them into a spreadsheet, and eyeball the variance, you are not reconciling. You are documenting drift after it has already cost you orders.

The third is using safety stock buffers as a substitute for channel-aware ATS. A 15 percent buffer hides the symptom and creates the new problem of stranded inventory. It is a tax on every SKU to paper over an architecture gap.

The fourth is letting marketing schedule promos without a hold on the inventory pool. If the email goes out before the reservation is in the ledger, you will oversell. The promo calendar and the reservation logic must share a system, not a Slack channel.

What this means for an apparel operations team

If you are inside the $10M to $20M breakpoint zone, the spreadsheet that has been working for two years is about to stop working. You will feel it first in the 6 to 9 hours a week your ops manager spends reconciling, and then in the oversell rate during your next peak window. The fix is not a tighter spreadsheet or a smarter CX team. The fix is architectural: one ledger that owns on-hand, channel-aware ATS that separates wholesale commitments from DTC availability, and a four-layer reconciliation cadence that runs without anyone thinking about it.

The brands that get this right run product development, product data, production, inventory, orders, warehouse execution, payments, and reporting in one connected system. The brands that do not run them across three to five tools plus a spreadsheet, and they pay for it in refunds, chargebacks, and the FTE who quietly leaves because the work is not the job she was hired to do.

Reconciliation is not a process problem. It is a question of where the truth lives. Put it in one place, define the cadence, and the storefront and the warehouse stop arguing.

Inventory Truth Scorecard

How accurate is your inventory really?

Nine questions estimate where your operation sits on the inventory-truth curve and how much revenue is at risk. Takes about three minutes.

Frequently asked questions

Where this fits in the Uphance platform

I
Written by
Isabelle Feyerabend
Customer Success and Onboarding Manager, Uphance

Isabelle writes about onboarding, workflow enablement, and how apparel teams build confidence in connected operations during rollout and beyond. As a Customer Success and Onboarding Manager at Uphance, she partners with apparel brands through their first three weeks on the platform: configuration, training, and the tactical playbooks that get day-to-day workflows running. Her articles focus on how-to guidance for product, inventory, and order operations, written for the people who actually run the workflows. She covers when to use which configuration, how to write the training docs, and what the first thirty days inside a connected platform look like in practice.

R
Reviewed by
Ronnell Parale
Head of Customer Success and Onboarding, Uphance

Ronnell writes about onboarding, adoption, and operational readiness for apparel brands moving to a connected platform. His articles focus on what it takes to go live with confidence and sustain strong execution across channels, warehouses, and teams. As Head of Customer Success and Onboarding at Uphance, he leads the implementation phases that turn a software signature into running operations. He writes about kickoff scoping, data migration, sandbox cutover, change management patterns, and the stakeholder alignment work that determines whether a connected platform actually changes how a brand runs, or just adds another login to the existing chaos.

More from the blog