Why Your Inventory Counts Don't Match: Reconciling Stock Between Your Store, Your ERP, and Your 3PL

If your store, your ERP, and your 3PL each report a different on-hand quantity, the cause is almost never theft. It is usually timing, definitions, or unmapped SKUs — three systems measuring slightly different things at slightly different moments. The fix is not a bigger physical count. It is deciding which system is the source of truth for each field, and running a short reconciliation on a fixed cadence.
Why do inventory numbers drift between systems?
Start by naming the four most common causes, in the order you should check them.
1. You are comparing different definitions of "available"
This is the most common and the most missed. Your 3PL reports on hand — physical units in the building. Your store reports available to sell — on hand minus allocated, minus reserved, minus safety buffer. Your ERP may report on hand plus on order.
Those three numbers are all correct and all different. Before investigating a discrepancy, confirm you are comparing the same field. A surprising share of "inventory problems" dissolve at this step.
2. Timing lag
Inventory syncs are not instantaneous. If your 3PL pushes on-hand counts every 15 minutes and you pull a report mid-cycle during a busy morning, the numbers will not match. They should converge after the next sync. Test it: pull both numbers twice, thirty minutes apart, with no shipping activity in between. If they converge, you have a timing artifact, not a variance.
3. SKU mapping gaps
A SKU renamed in your store but not in the WMS, a bundle that exists only in one system, a variant with a trailing space in the identifier. These produce phantom quantities — units sitting in the warehouse under an identifier your store does not recognize, or store demand pointing at a SKU the warehouse has never heard of.
4. Real physical variance
Only after ruling out the first three. Real variance comes from receiving errors (the PO said 480, the pallet had 456), mis-picks, damage that was never written off, returns received but not restocked, and shrinkage. Our guide to preventing inventory shrinkage covers that last category in depth.
How do you decide which system is the source of truth?
Pick one owner per field and write it down. A workable default for a DTC brand on a 3PL:
- Physical on-hand: the 3PL's WMS. It is the only system touching the actual units.
- Available to sell: your store or order management system, calculated from WMS on-hand minus reserves.
- Inventory value and COGS: your ERP or accounting system.
- Inbound on-order: your ERP or purchasing system.
The rule that follows: nobody manually edits on-hand in a downstream system. If your store's number is wrong, you fix the upstream cause, not the display. Manual overrides feel efficient and are the single most reliable way to make a small drift permanent.
What does a working reconciliation routine look like?
Daily: exception review, not a full count
Pull a variance report of SKUs where the WMS and store numbers differ by more than a threshold you set — say 2 units or 2%, whichever is larger. Most days the list is short. Work the list, not the catalog.
Weekly: cycle counts on movers
Count your A-items (the SKUs driving most of your volume) weekly, B-items monthly, C-items quarterly. Cycle counting beats an annual wall-to-wall count because it finds problems while the cause is still traceable. See our walkthrough of perpetual inventory systems for how continuous counting works in practice.
Monthly: three-way tie-out
Once a month, reconcile WMS on-hand, ERP on-hand, and store available in a single view. Document every difference with a cause code: timing, mapping, receiving variance, damage, return in process, or unexplained. The "unexplained" bucket is your real signal — if it is growing, you have a process problem, not a data problem.
Quarterly: adjustment review
Look at every inventory adjustment made in the quarter and who made it. Adjustments are where discrepancies go to be quietly buried.
Where do the biggest variances actually come from?
In our experience the answer is receiving and returns, not picking.
Receiving. If the count at the dock is not verified against the purchase order, an inbound shortage enters your system as inventory you do not have. That error then propagates for months. The defenses are simple: piece or case counts verified at receipt, discrepancies reported to you within a defined window, and a documented process for short or damaged inbound. Our guide on what happens after you sign with a 3PL covers receiving setup during onboarding.
Returns. A return that arrives, gets inspected, and sits in a cage for three weeks is inventory that exists physically but not commercially. It is invisible on your store and unsellable in practice. A written restocking window is the fix.
Bundles and kits. When a kit is assembled, component inventory must decrement and kit inventory must increment atomically. If that transaction is manual, expect drift. If your catalog has many bundles, this is worth auditing specifically.
What should you ask your 3PL?
- What is your committed inventory accuracy rate, and how is it measured?
- How often do you cycle count, and on what ABC schedule?
- How quickly are inbound receiving discrepancies reported to me?
- Can I pull an on-hand snapshot by SKU and by lot, on demand?
- How frequently does inventory sync to my store, and is it push or pull?
- What is your process when a count variance is found — who investigates before an adjustment is posted?
- What is the restocking window for returns?
Look for numbers in the answers. High-performing operations commit to inventory accuracy in the 99%+ range with a defined shrinkage allowance and reimbursement terms; Atomix, for example, commits to 99.8%+ inventory accuracy with a shrinkage allowance under 0.5%. What matters is that the figure is written into the agreement and reported against, not quoted in a sales call. Our guide to fulfillment SLAs covers how to structure it, and fulfillment KPIs every brand should track covers the reporting side.
Frequently asked questions
What is inventory reconciliation?
Inventory reconciliation is the process of comparing recorded inventory quantities across systems — and against physical counts — then identifying and correcting the cause of any difference. The goal is not just matching numbers; it is finding the process that created the gap.
How often should ecommerce brands reconcile inventory?
A practical cadence is daily exception review on variances above a threshold, weekly cycle counts on fast movers, and a monthly three-way tie-out between your WMS, ERP, and store. Annual wall-to-wall counts alone are too infrequent to find causes.
What is a good inventory accuracy rate?
Well-run ecommerce fulfillment operations generally target 99% or better, measured by cycle count against system quantity. Below roughly 98%, overselling and stockouts start showing up in customer experience.
Why does my Shopify inventory not match my 3PL?
Most often because Shopify shows available-to-sell (net of allocations and buffers) while the 3PL shows physical on-hand, or because the sync has not run since the last batch of orders shipped. Check field definitions and sync timing before assuming a physical variance.
Should I ever manually adjust inventory in my store?
As a rule, no. Manual edits in a downstream system mask the upstream cause and make the next reconciliation harder. Fix the source, then let the sync correct the display.
The short version
Mismatched counts are usually a definitions-and-timing problem wearing a shrinkage costume. Assign one source of truth per field, ban manual downstream edits, run a daily exception report instead of a monthly panic, cycle count your movers, and tie out all three systems once a month with cause codes. Do that and the unexplained bucket shrinks to something you can actually investigate.
Sources: Atomix Logistics service-level commitments; standard ABC cycle-counting and perpetual inventory practice.



