Moving from Square to Shopify: the inventory migration, step by step
Migrating from Square to Shopify? Count first, export clean, reconcile in week one — the inventory continuity plan for a one-way cutover, step by step.
InventoryX is in development and not available today. ClearStock is the live Shopify app.
Saturday, 6 p.m.: the last Square transaction closes out. Sunday morning: you count every shelf. Sunday afternoon: export, import, activate. Monday, 9 a.m.: you open on Shopify. That sequence — count, export, import, reconcile — is the whole discipline of an inventory migration, and the order is not negotiable, because inventory is the one data layer you can't fix later. Product copy, images, customers, even order history can be re-imported next month. Quantities are only true once: they describe the shelf at one moment, and every sale after that moment widens the gap.
This article stays strictly on that layer. Theme setup, payment providers, domains, and the rest of the move are covered well by Shopify's own checklist — this is the piece about not losing your stock in the crossing. All Shopify-side behavior below is verified against the first-party "Migrate from Square" guide (Shopify Help Center, accessed November 2026).
Why inventory is the layer that can't wait
Everything else in a migration tolerates a gap. A product description imported wrong gets edited. A missing customer record gets rebuilt. But quantities imported from Square's books describe Square's belief, not your shelf — and the two have usually drifted apart over years of uncounted receiving, damage, and shrinkage. Import the belief and you start life on Shopify with confident wrong numbers: overselling on fast movers, phantom stock on slow ones. The count is what converts belief into fact, which is why it happens before the export, not after the import.
There's a second reason: the cutover itself opens a gap. Anything sold, received, or damaged between your export and your Shopify go-live exists in neither system. A one-weekend cutover keeps that gap to a weekend's worth; a strung-out migration stretches it into weeks. Freeze the catalog, compress the crossing, and the gap stays small enough to reconcile by hand.
Count before you export
The cutover sequence, written as a schedule:
| When | Action | The inventory rule behind it |
|---|---|---|
| Friday | Freeze catalog edits in Square — no new items, no option or price changes | Nothing changes between count and export |
| Saturday close | Final Square transactions; run the end-of-day report | The last number Square will ever own |
| Sunday morning | Full physical count, per location | Counted quantity is the source of truth |
| Sunday afternoon | Export from Square, import to Shopify | Carry the counted numbers, not the book numbers |
| Sunday night | Set products to Active; verify locations | Nothing sells as a draft |
| Monday 9:00 | Open on Shopify; Square becomes read-only | One system sells; the other remembers |
Two details in that table do most of the work. First, write the counted number next to Square's book number during the count — the variance you find on Sunday is your known baseline noise going in, and recording it beats re-deriving it in week three. Second, define what counts before counting: what's sellable, what's b-grade, what's in the returns pile. The counting mechanics, category by category, are the subject of the Shopify inventory counts guide; for the migration you need the discipline more than the technique.
Two routes in, and what each carries
Shopify's own migration guide gives you two first-party paths, and they handle inventory differently:
| Store Migration app (free, by Shopify) | Product CSV import | |
|---|---|---|
| What moves | Products and customers from Square | Products (customers via separate customer CSV) |
| How | Upload Square's raw export file, unchanged | Rebuild your data in Shopify's product CSV template |
| Inventory quantities | Imported per Square location, matched by location name | The product CSV's "Inventory quantity" column works for single-location stores only |
| Multi-location quantities | Handled by the app's location matching | Use Shopify's separate inventory CSV for quantities |
| Product status | Arrives as drafts (archived Square items arrive archived) | Arrives hidden until made available to channels |
The CSV route in detail, since the mapping is where people lose hours: export from Square Dashboard → Items & services → Items → Item library → Actions → Export library as CSV. Then map to Shopify's product template — Item Name → Title, SKU → SKU, Default Unit Cost → Cost per item, Option and Option Value columns → Option1–3, and weights converted to grams (kilograms × 1,000, pounds × 453.592). The full column table is in Shopify's guide. Whichever route you choose, the quantities you're moving should be the numbers your Sunday count produced — the export is the vehicle, not the truth.
If your plan is to run Square and Shopify side by side indefinitely rather than leave, that's a different problem — keeping two systems' stock in agreement — and it's covered in the Square (and Clover) sync guide. This article assumes the one-way move.
Five gotchas that corrupt the numbers
1. Location names must match. The Store Migration app matches each Square location to a Shopify location by name — and if no Shopify location has that name, it creates one. An unwatched import can leave stock sitting in a freshly created location with no address. Check the location list immediately after import and fix the addresses before anything sells. The location setup choices that matter for POS are covered in the Shopify POS location guide.
2. Drafts don't sell. Via the app, products arrive as drafts; via CSV, as hidden products. Inventory edits on drafts are fine, but a store that opens Monday morning with bestsellers still in draft is a store that "went dark overnight" for reasons no report will show. Activation is a Sunday-night task, not a Tuesday cleanup.
3. Variants can get dropped. A Square item with more than 3 options or more than 100 variations imports without its variants and at price 0. Those SKUs don't just need pricing — they need a fresh count, because no quantity came over for them at all. Flag any such products during the Friday freeze and count them separately on Sunday.
4. Prices can collapse, and unpriced products block the stock. The app imports one price per variant (the highest, if Square locations differed), and unit-priced items import at price 0. This looks like a pricing problem, but it's an inventory continuity problem too: a product that can't sell correctly is stock that stops moving while it waits for a fix. Price fixes belong before reopening.
5. Reviews and in-person sales history don't ride along. Square reviews can't be exported into Shopify, and your in-person transaction history lives in Square's reports rather than traveling through the product or customer import. That's survivable — those layers are re-importable later through third-party apps if you want them — but inventory is not, which is exactly why it goes first and cleanest.
First-week reconciliation
The week after cutover is a reconciliation project with a deadline. The routine:
- Day 1: spot-check your ten fastest SKUs against the shelf before opening. These carry most of the revenue and most of the risk.
- Day 3: cycle-count one complete category — a bounded, honest sample rather than a vague vibe.
- Day 7: review every variance found and decide: fix the record, or fix the process.
The arithmetic that runs underneath is one line: expected on shelf = imported + received − sold − adjustments. A worked example, cedar dog harnesses, size M:
- Imported Sunday: 62 units
- Week-one sales: 11; receipts: 0; adjustments: 0
- Expected: 62 − 11 = 51
- Counted on day 7: 58 — a variance of +7
Before suspecting theft or sync gremlins, trace the physical layer: the seven were in the "re-shoot" tote by the photo table, pulled aside for new product images after Sunday's count had passed that aisle. The migration didn't lose stock; the count's boundary did. The fix is procedural — define what's in scope before counting — and it's the same discipline stock reconciliation applies year-round. Pick a tolerance for your variance review ("2% or 3 units per SKU, whichever is larger" is a common starting rule) and investigate everything past it, because small unexplained variances in week one become unexplained shrinkage by March.
One structural advantage worth using: every first-week fix is a Shopify inventory adjustment with a reason attached. A migration is the cleanest moment in your store's life to start an adjustment log worth reading — you know exactly which baseline the numbers came from, because you counted it.
What not to migrate now
Order history, reviews, saved payment cards, gift card balances — none of these block a healthy inventory cutover, and all of them are re-importable later (order history through migration apps, gift cards through Shopify's own gift card migration path, reviews through review apps). Migrating them on day one stretches the crossing, widens the inventory gap, and delays opening. Inventory first, opening Monday, everything else on a schedule you set after the shelves and the screen agree.
Common questions
Does the Shopify Store Migration app bring over inventory quantities? Yes — the free first-party app imports the inventory quantity at each Square location, matching locations by name and creating a location when the name doesn't exist, so check the location list after import. Products arrive as drafts, and archived Square items arrive archived, so activation is a separate step before you sell.
How do I export my inventory from Square? From the Square Dashboard: Items & services → Items → Item library → Actions → Export library, as a CSV. That export carries your item data; for quantities in a multi-location setup, import them through Shopify's separate inventory CSV rather than the product CSV, whose quantity column only works for single-location stores.
Should I count before or after importing to Shopify? Before. The count is the source of truth the import should carry; counting after the import only measures how much the imported numbers were already wrong. Count on the closed day between your last Square sale and your Shopify opening, and record counted numbers next to Square's book numbers so the known variance is documented.
Why did some products import without variants or with a zero price? Shopify's import has hard limits: a Square item with more than 3 options or more than 100 variations imports without variants at price 0, and unit-priced items import at price 0 as well. Those products need pricing and variants rebuilt by hand — and a fresh count, because no quantities imported for them.
What should I do in the first week after switching? Run a reconciliation routine: spot-check your ten fastest SKUs on day one, cycle-count one full category by day three, and review every variance by day seven using expected = imported + received − sold − adjustments. Investigate anything past your tolerance, and log every fix as a reason-coded adjustment so week one becomes your audit trail's clean starting point.
Next step
Put the four dates on the calendar this week — freeze, count, import, open — and hold the sequence even if a supplier shipment arrives mid-crossing (count it, log it, move it). During week one, work the reconciliation against the stock reconciliation routine so variances get investigated, not absorbed, and keep Square read-only for 30 days as your reference archive before you think about anything fancier.