Skip to content
Analytics12 min readBy GoTinker Team

How to Reconcile Inventory Counts After Migrating to Shopify

How to Reconcile Inventory Counts After Migrating to Shopify

You finished the migration, your products are live, and the numbers in Shopify don't match the numbers you left behind. That's normal. But you need to reconcile inventory counts after migrating to Shopify before you start taking orders at volume, because a bulk import is one of the most reliable ways to introduce silent stock errors into a catalog. Most merchants find out the hard way about a week in, when they have to email a customer about an item they can't actually ship.

Inventory distortion (stockouts and overstocks combined) cost retailers $1.77 trillion in 2025, roughly 6.5% of global retail sales, according to IHL Group research. A migration compresses that risk into a handful of weeks. If you haven't run the move yet, start with our step-by-step guide to migrating to Shopify. This article picks up the moment your import finishes.

Why Do Inventory Counts Get Thrown Off During a Shopify Migration?

Counts get thrown off because inventory is the only part of your catalog that keeps moving while you migrate. Titles, images, and descriptions sit still. Stock levels change every time someone buys something, which means your export is a snapshot of a moving target.

Then there's the mechanical side. Shopify caps product CSV imports at 15 MB and instructs you to split anything larger into multiple files, and full catalog exports from Magento or WooCommerce blow past that ceiling routinely (Shopify Help Center).

Split files fail partway through. Rows get skipped. And the import summary still says it worked.

The usual culprits behind a post-migration mismatch:

  • Timing gaps. Orders placed on your old store between the export and the DNS cutover never get deducted from the imported quantities.
  • SKU mismatches. Trailing spaces, leading zeros stripped by Excel, and duplicate SKUs across variants all break the join between your old data and your new data.
  • Variant remapping. Option order flips during import, so quantities meant for "Blue / Large" land on "Large / Blue."
  • Tracking never enabled. If the import doesn't turn on inventory tracking, Shopify treats that variant as infinite stock and sells it forever.
  • Channel resync. Amazon, eBay, and POS integrations start pushing their own numbers the second you reconnect them.

That last point deserves more attention than it gets. Shopify's own developer documentation states that webhook delivery isn't guaranteed and advises apps to run periodic reconciliation jobs to stay consistent with Shopify's data. If the tools syncing your stock can miss events by design, your counts can drift without anyone making a mistake.

How Do You Export Your Pre-Migration Inventory Data for Comparison?

Export a SKU-and-quantity file from your old platform at the exact moment you freeze it, then pull the matching file out of Shopify once the import completes. Reconciliation is fundamentally a two-column comparison, and it only produces useful answers if both columns describe the same instant in time.

On the Shopify side, go to Products > Inventory and click Export. You can export one location or all locations, and you get a choice between a file with all inventory states or a simpler available-quantities-only version (Shopify Help Center). Take the full version. The simple one hides the exact columns you're about to need.

Your old platform's export is the messier half of the job. WooCommerce lets you manage stock at the parent product level, at the variation level, or as a mixture of both, and the official docs recommend variation-level tracking precisely because parent-level stock can't be deducted accurately per variation (WooCommerce documentation). Parent-level stock has no clean Shopify equivalent, so those rows need manual allocation. Our WooCommerce to Shopify product transfer guide digs into those export quirks.

A workable sequence looks like this:

  1. Put the old store into maintenance mode or stop accepting orders.
  2. Export SKU, variant identifier, and quantity per location. Nothing else.
  3. Run the Shopify import.
  4. Export the Shopify inventory CSV with all inventory states.
  5. Match the two files on SKU and flag every row where the numbers differ or the SKU appears in only one file.

Open both files in a spreadsheet tool as text rather than double-clicking them, or you'll watch Excel silently strip leading zeros from half your SKUs. If you end up rebuilding an import file from the comparison, our guide to importing products to Shopify from a CSV file without errors covers the formatting traps that cause partial imports.

What Are Shopify's Inventory States, and Why Do They Trip Up Migrated Stores?

Shopify splits every variant's stock into five states: On hand, Available, Committed, Unavailable, and Incoming. The relationship that governs everything is Available = On hand - Committed - Unavailable, with On hand being the sum of the other three sellable-or-not buckets (Shopify Help Center).

Here's what each one actually means in practice:

  • On hand: every physical unit you possess, including damaged, reserved, and already-sold-but-unshipped stock.
  • Committed: units attached to unfulfilled orders. They exist, but they're spoken for.
  • Unavailable: units you've explicitly pulled from sale (damaged, quality control, safety stock).
  • Available: what a customer can actually buy right now.
  • Incoming: units on a purchase order or transfer that haven't arrived yet.
Your "On hand" number matching your old platform's stock count means almost nothing. The number that decides whether you oversell is "Available," and if you migrated without understanding that Shopify splits stock into five separate states, there's a solid chance your spreadsheet has been checking the wrong column for weeks.

Merchants coming from Magento have a small head start, because Magento's multi-source inventory already separates Quantity from Salable Quantity using reservations, and the concept maps neatly onto On hand versus Available. Merchants coming from WooCommerce, BigCommerce, or Etsy usually don't, since those platforms present a single stock figure. Our Magento to Shopify migration guide covers how configurable product stock, which lives entirely on child simple products, translates into Shopify variants.

How Do You Reconcile Variant-Level and SKU-Level Inventory After Migration?

Match on SKU first, then manually verify option values for anything that fails to match. Variant-level errors are the most common migration defect and the hardest to spot, because a store can show a perfect grand total while having Small and XL quantities swapped across half the catalog.

Before you touch a single quantity, run a variant count check. Compare the number of variants per product handle in your old export against the number in Shopify. Any product where the counts differ has a structural problem, and adjusting quantities on it now just papers over the real issue.

Then work through these four checks:

  1. Duplicate SKUs. Sort your Shopify inventory export by SKU and look for repeats. Duplicates make any lookup-based reconciliation return the wrong row.
  2. Blank SKUs. These can't be reconciled by formula at all. Isolate them and handle them by product title and option value.
  3. Option order. Spot-check twenty multi-option products and confirm that Option1 and Option2 landed in the same order as your source data.
  4. Tracking status. Filter for variants where inventory isn't tracked. These show zero discrepancy in a comparison because they hold no quantity at all, and they'll oversell indefinitely.

Products built with option or personalization tooling need extra care, since custom options can create variant structures that don't survive a migration cleanly. Our guide on adding custom product options without breaking inventory explains where those structures tend to fall apart.

How Do You Reconcile Inventory Across Multiple Shopify Locations?

Reconcile location by location, never in aggregate. Shopify tracks stock per location, so a variant showing 40 units in total can be perfectly correct at the store level and completely wrong in distribution, which quietly breaks fulfillment routing, shipping rates, and local pickup availability.

Merchants who ran a single warehouse before migrating get hit hardest here. Your old platform stored one number per SKU. Shopify dumped that entire number into the default location during import. If you then added a retail store, a second warehouse, or a 3PL fulfillment app, all of your stock is sitting in the wrong place and none of your totals will reveal it.

The fix is a deliberate allocation pass:

  • Export inventory separately for each location so you have a per-location baseline.
  • Decide your allocation rule before you edit anything (percentage split, physical count per site, or all-at-one-location with transfers to follow).
  • Move stock using inventory transfers rather than manually decreasing one location and increasing another, so you keep a record of what moved.
  • Confirm which locations are marked as fulfillment locations, because a location that isn't fulfilling orders still counts toward your available inventory in some configurations (Shopify Help Center).

Location limits vary by Shopify plan, and deactivated locations don't count against your allowance. For the full setup and priority logic, see our guide to managing Shopify inventory across multiple locations.

What's the Right Way to Do a Physical Count Without Breaking Order History?

Count physical units, correct the On hand column, and never fix a discrepancy by cancelling orders or by deleting and re-importing products. Committed quantities belong to real unfulfilled orders, and deleting a product severs its link to your historical order records permanently.

Shopify's bulk editor sets absolute quantities rather than adjusting them. Enter 150 on a variant currently showing 100 and it becomes exactly 150, not 250. It's the fastest tool for the job, but Shopify notes that because you're not specifying an origin and destination, this method doesn't create an audit trail of inventory movements (Shopify Help Center).

A safe count sequence for a freshly migrated store:

  1. Pause channel syncs for the counting window so nothing writes over your corrections.
  2. Count physical units by location, not across the business.
  3. Adjust On hand only. Available recalculates itself from the formula.
  4. Investigate any variant where committed exceeds on hand before adjusting, since that usually signals an in-flight order the import didn't account for.
  5. Re-enable syncs and re-export to confirm your changes stuck.

If you're correcting hundreds of rows, doing it in the admin one variant at a time is a genuine waste of a weekend. Our walkthrough of Shopify bulk product editing covers the faster paths, including which ones let you undo a bad pass.

How Soon and How Often Should You Reconcile Inventory Counts After Migrating to Shopify?

Run your first full reconciliation within 72 hours of go-live, a second pass at day 7, and a third at day 30. After that, move to a cycle counting rhythm rather than waiting for a once-a-year full count.

The 72-hour window matters because after that point, real sales have moved your numbers and you can no longer distinguish a migration error from ordinary trading activity. The day 7 pass catches channel sync drift. The day 30 pass catches slower-moving SKUs that hadn't sold a single unit yet during the first two checks.

For ongoing cadence, ABC classification is the standard: A items weekly, B items monthly, C items quarterly. A disciplined cycle counting program holds inventory record accuracy above 99% without ever shutting the business down for a wall-to-wall count (KORONA POS).

The cost of skipping this is measurable. Netstock's 2025 benchmark data, cited by Shopify, found that top-performing small and medium retailers keep stockouts below 2%, while weaker performers lose more than 13% of retail sales to understocking (Shopify). Customers punish the errors too. Around two-thirds of shoppers say they trust a business less after being oversold, and 44% switched to or added another store in the past year because of stock availability problems (Shopify).

What Tools and Apps Speed Up Post-Migration Inventory Reconciliation?

Shopify's native inventory CSV plus a spreadsheet handles the detection work for most catalogs under a few thousand SKUs. Bulk editing tools handle the repair work, and Shopify Flow can automate the low-stock and negative-inventory alerts that catch drift before a customer does.

One important scheduling note: if your reconciliation plan involves Stocky, change it. Shopify pulled Stocky from the App Store in February 2026 and is shutting it down entirely on August 31, 2026, after which its APIs stop working and any data you haven't exported is gone (Shopify Help Center). Shopify is directing merchants to the native admin and POS inventory tools instead.

For the detection and heavy import side, Matrixify remains the standard choice for large Excel and CSV operations that exceed what the native importer handles comfortably. For the repair side, the problem is different: you've identified 400 bad rows, and you need to fix them without creating 400 new problems.

That's where a bulk editor with a safety net earns its keep. Edify - Bulk Product Editor is free and lets you build AND/OR filters to isolate exactly the products your reconciliation flagged (by vendor, tag, collection, or price), chain multiple edit actions into one task, and preview every change before it goes live. Every task is logged with old and new values, so a bad pass is a one-click undo instead of a second restoration project. After a migration import, that undo button is worth more than any individual feature.

If you're still choosing how to move the data in the first place, or the import that caused these discrepancies went badly enough to justify redoing it, our comparison of the best Shopify migration apps ranks the tools by how cleanly they handle variant and inventory mapping.

Reconciliation isn't glamorous work, and nobody celebrates the week they spent matching SKUs in a spreadsheet. But the merchants who do it in the first 72 hours are the ones who never have to write the "sorry, we're actually out of stock" email at all.

RagChat: AI Chatbot & Livechat

RagChat: AI Chatbot & Livechat

Sponsored

AI chat that answers from your real products. Unlimited AI replies on the free plan.

Check it out

Related Articles