Overview guide

Migration Guide

Complete reference for migrating Square catalog and account data into Shopify: how the connection works, what each data type migrates, and everything Squarify keeps track of behind the scenes so nothing is left unexplained.

Golden Rules

Before you migrate anything

  • Squarify is a one-time migration, not an ongoing two-way sync - it copies your selected Square data into Shopify once, on your schedule. Products has separate opt-in tools (Inventory Sync, Re-sync Products) if you want to keep pulling in changes afterward.
  • Square access is read-only. Squarify only reads your Square data - it never modifies, creates, or deletes anything there.
  • All migrations are safe to re-run - existing Shopify records are skipped or updated, never duplicated.
  • Every migration type has its own history table, downloadable report, and (for Inventory Sync and Gift Cards) an optional scheduler.

How a migration runs

Six phases, the same shape for every data type you choose.

01

Connect Square

Sign in on Square's own secure login screen and approve read-only access. Squarify never writes to or modifies your Square data.

02

Choose what to migrate

Pick which data types you want - Products, Customers, Gift Cards, and/or URL Redirects. Change this anytime later from Settings.

03

Configure each migration

Choose fields, locations, and settings for each migration type. Review counts and summaries before running.

04

Run the migration

Squarify creates or updates records in Shopify with real-time progress. Pause, resume, or cancel at any time.

05

Review the report

Download a detailed Excel report for every run - see exactly what was created, updated, skipped, or failed.

06

Migration complete

Once every data type you selected shows Completed on your dashboard checklist, you'll see a confirmation your one-time migration finished. Products still offers optional ongoing tools afterward - Inventory Sync and Re-sync Products.

Important to know

Migration progress can be paused and resumed at any time without losing completed records.
Every migrated record keeps a hidden link back to its original Square item, so Squarify always recognizes what it already migrated.
Your dashboard checklist and migration cards only show the data types you chose - change your selection anytime from Settings.
Migrations with more than 2,000 products automatically switch to a faster import mode built for large catalogs.

Product Catalog - what gets migrated

Your full Square catalog is imported to Shopify - titles, prices, variants, images, and inventory, plus the behind-the-scenes details covered further down this page. Configure field mapping and taxonomy before running to control exactly what comes across.

Build your Products checklist

Interactive

Answer a few questions about your Square catalog - we'll tell you exactly what to select on the real Products settings page.

Where's your barcode stored in Square?
Bring in archived or deleted Square items too?
Do some of these products already exist in Shopify (not created by Squarify)?
Turn Square categories into Shopify collections?
Do you have Square discounts to bring over?
Use Shopify's standard product categories?

Your settings checklist

Barcode source
“My barcode in Square (recommended)”
Products → Field Mapping → Barcode row
Include Archived Products
Leave OFF (default)
Products → Migration Settings → Product Filter Options
Include Deleted Products
Leave OFF (default)
Products → Migration Settings → Product Filter Options
Overwrite existing Shopify product with matching SKU/barcode/handle
Leave OFF - matches are skipped, never touched
Ready to Migrate step
Create Shopify collections from Square categories
Leave OFF
Products → Migration Settings → Product Organization
Migrate discounts from Square
Leave OFF
Products → Migration Settings → Discount Migration
Map Square Categories to Shopify Taxonomy
Leave ON (default) - review auto-suggested matches before saving
Products → Taxonomy Mapping
This is a guide only - it doesn't change anything in your Squarify account. Use it to know exactly what to pick when you get to the real settings page.

Included

  • Product title, description, and body HTML
  • Base price and compare-at price per variant
  • SKU and barcode per variant - sourced from Square's UPC/EAN by default, or SKU instead if configured in Field Mapping
  • Weight, height, width, and depth
  • Product images - up to 250 per product
  • All variants with individual pricing, SKUs, and stock levels
  • Inventory quantities per mapped location
  • Product tags from Square item labels
  • Square category mapped to Shopify product type via taxonomy

Field Mapping

Choose which fields to include on the Products page before running. Required fields are always on; optional fields are fully configurable. Settings are saved between sessions.

Always included

  • Title & description
  • Price & compare-at price
  • Variants

Configurable (on/off)

  • SKU & barcode - including whether to keep your real barcode, use SKU as the barcode instead, or fall back between the two
  • Product images
  • Product tags
  • Vendor
  • Weight & dimensions
  • SEO title & meta description
  • Behind-the-scenes tracking info (status, archived/deleted flags, product type) - used to recognize this product on future syncs
  • Modifier and option details - sizes, add-ons, and any extra charges
  • Category details, used for filtering and reporting later
  • A plain-text copy of the description, useful for search

Category → product type mapping

Square categories are matched to Shopify's standard product taxonomy on the Products page. Review and adjust before running. Unmapped categories default to the Square category name as the product type.

StatusMeaning
ManualYou selected a Shopify taxonomy match yourself.
AutoSquarify found a close match automatically.
UnmappedUses the Square category name as the product type instead.

Large migrations (2,000+ products)

Migrations with more than 2,000 products automatically switch into a faster, high-volume import mode, sending your catalog to Shopify in large batches of up to 5,000 products instead of one at a time - dramatically faster for big catalogs. Images and behind-the-scenes tracking info are included in that same step, so they show up as soon as the product does; stock levels and sales-channel visibility are still applied one product at a time right after, with their own progress count. While a batch is processing, progress updates periodically instead of product-by-product, and only Cancel is available (no Pause) - cancelling waits for whichever batch is already underway to finish first. If Shopify's own daily cap on new products is reached partway through (only relevant once a store already has 50,000+ products), Squarify pauses automatically and picks back up on its own about 24 hours later - no action needed. If Collections and/or Discounts are also turned on, they still run automatically right after product creation finishes; if a pause did happen, run Categories/Discounts as a separate follow-up once products finish.

What Squarify remembers about each product

Behind every migrated product, Squarify quietly keeps a set of hidden details from Square - so nothing about its original source is lost, duplicate migrations are recognized automatically, and other Squarify tools (like Inventory Sync and Re-sync) know exactly which Shopify product to update later.

What it remembersWhy it matters
Original Square product & variantLets Inventory Sync, Re-sync Products, and duplicate-detection recognize this exact item on every future run.
Real barcode (UPC/EAN)Kept safe in the background when your barcode setting uses SKU instead - so the original value is never lost.
Active/inactive status at time of migrationA record of how the item looked in Square when it was brought over.
Archived / deleted flagsTracked separately, since an item can be archived, deleted, both, or neither in Square.
Taxable statusCarried over from Square for reference.
Item typePhysical good, food & beverage, digital item, event, donation, and so on - used to decide whether Shopify treats it as a shippable product.
SEO permalink from Square OnlineUsed as a fallback match when creating URL Redirects.
Discount tags that apply to this productSo you can filter for exactly which products carry a given Square discount.
Modifier & option detailsGroup names, prices, and settings for every size/add-on option, preserved in full even though Shopify doesn't display them the same way Square does.
Bundled product componentsFor items built from other items in Square.

What doesn't migrate

Not included

  • Product orders, transaction history, or sales data
  • Customer reviews or ratings
  • Archived or deleted Square products - skipped by default; enable "Include Archived/Deleted Products" in Migration Settings to bring them in as archived Shopify products
  • Square Online page layouts or custom sections
  • Which sales channels a modifier set is restricted to - Square doesn't expose this reliably; everything else about a modifier still migrates
  • Type-specific extras with no Shopify equivalent: a Digital item's downloadable file, an Event's date/location, a Donation's custom pricing - the product itself still migrates

Notes & edge cases

A product Squarify already migrated is recognized automatically and skipped by default - or updated in place if "Override Existing Products" is on. Either way, it's never duplicated.
A product created some other way (manually, or by another app) is checked against your Square catalog by SKU, barcode, and handle before anything new is created. A match is skipped by default. If a SKU or barcode matches more than one existing Shopify product, Squarify never guesses - a new product is created instead, flagged on that row of the report so you can review it.
Product images are downloaded from Square and uploaded to Shopify in the background. A broken or rejected image never fails the product itself - it's listed on its own row in the report's "Failed Images" sheet instead.
Field mapping and taxonomy choices are saved between visits - configure them once and every future migration and re-sync reuses the same settings.
After your first migration, use Inventory Sync to keep stock levels current without re-running the full product migration.
Cancelling a migration that has Categories or Discounts turned on gives you a choice: finish creating those for the products that already made it in, or stop everything immediately.
Archived and deleted Square products are skipped unless you turn on "Include Archived Products" / "Include Deleted Products." When included, they're brought in as Archived (not Active) in Shopify and tagged so they're easy to find and filter afterward.
The "Total Products" count updates live the moment you flip an Include-Archived/Deleted toggle, so it always shows exactly what the current settings would migrate - even before you click Save.
The product count shown next to each Square location on Location Mapping stops at "2,500+" for very large locations, just to keep that page loading quickly. It's only a display estimate - the migration itself still processes every product, no matter how many there are.
Re-sync's "only what changed" option always compares against a checkpoint that only moves forward once a run genuinely finishes - a cancelled or failed run never moves it, so nothing is ever silently missed on the next check.
Only one Products/Inventory Sync job runs at a time per store - enforced on Squarify's servers as well as on screen, so a second browser tab or a mistimed refresh can't accidentally start a duplicate run.
Digital items, event tickets, donations, and services are created in Shopify with "This is a physical product" turned off automatically, since Square already tells us these aren't shipped.

Inventory Sync

Refreshes stock quantities in Shopify for products already migrated from Square - without touching titles, prices, images, or any other field.

When to use it: Stock levels changed in Square since your last product migration; you're running a regular check to keep Shopify accurate; you sold something in Square after switching and need to reconcile quantities; or you just want to update stock without a full product re-migration.
01

Find already-migrated products

Squarify looks through Shopify for every variant it recognizes as one it migrated from Square.

02

Check Square's current stock

For each matched variant, the current stock level is fetched fresh from Square.

03

Compare before writing

Squarify checks what Shopify currently has on hand at each mapped location before writing anything.

04

Write only real differences

If Square and Shopify already match at every mapped location, the variant is left untouched and marked Skipped - only differences are written.

05

Skip anything not recognized

A variant that isn't recognized as one Squarify migrated is left alone - run Product Migration first so it can be tracked.

Updates

  • Available stock quantity per Shopify location
  • Inventory level per variant at each mapped location

Stays unchanged

  • Title, description, and images
  • Prices or compare-at prices
  • Tags and product organization
  • Variant structure, SKUs, or barcodes

Notes

  • You choose which mapped Square locations to include in a given sync, whether you run it immediately or schedule it - it's never forced to sync every location every time.
  • Only products Squarify recognizes as already migrated are updated. If that recognition link is ever lost (e.g. removed manually in Shopify), the variant is excluded and shown as "Skipped (No Square Tracking Link)" in the report - re-run Product Migration to restore it.
  • Can be scheduled to run automatically from the Products page - up to 14 days out, no need to keep the page open.
  • A Square location with no matching Shopify location is skipped entirely for this sync.
  • Products with inventory tracking turned off in Shopify are skipped, since there's no stock count to update.
  • A variant whose stock already matches Square at every mapped location is left alone and marked Skipped - this is expected, not an error.
  • The downloadable report shows both the Shopify and Square quantity at each mapped location, so you can see exactly what changed (or didn't) for every product.

Re-sync Products

Refreshes products already migrated with their latest Square data - and optionally creates any added since your last check - using your current Field Mapping and Taxonomy settings. It never touches Collections or Discounts, even if those are turned on in your settings.

ModeWhat happens
Only what changed since last syncAsks Square for just the items it recorded a change to since your last full check - much faster on a large catalog.
My entire catalogChecks every product regardless of when it last changed - slower, but thorough. Your very first re-sync always uses this.

Notes

  • Available once your first Product Catalog migration completes - disabled until then.
  • The "Check for changes since" dropdown lets you manually pick any past completed run to check from instead of the automatic checkpoint - picking an earlier point only ever re-checks more products, never fewer, with no risk of duplication.
  • The automatic checkpoint only moves forward once a run genuinely finishes - a cancelled or failed run never moves it, so nothing is silently missed on the next check.
  • Only one Products/Inventory Sync job (Re-sync Products included) runs at a time per store - enforced on Squarify's servers as well as on screen.

Discounts

During Product Migration, every Square discount is saved onto its applicable products - a searchable label plus a stored record of the discount details - regardless of which mode you pick below. The mode decides whether Squarify also builds a real, working Shopify discount from that saved data.

ModeWhat happens
Save onlyNo Shopify discount is created - the discount details are saved on each product so you can build your own price rules or filter products by discount later.
Discount CodeA real Shopify discount code is created for each Square discount, automatically applied to the right products. Customers enter the code at checkout.
Automatic DiscountApplies on its own at checkout, with no code needed - targeted to the same products.

Creating a discount yourself from saved data

If you chose "Save only," here's how to turn that saved data into a real Shopify discount whenever you're ready:

Automatic discount

  1. In Shopify Admin, go to Discounts → Create discount.
  2. Choose "Amount off products."
  3. Under Method, select "Automatic discount."
  4. Give it a title (e.g. "Spring Sale 20%").
  5. Set the discount value to match your original Square discount.
  6. Under "Applies to," choose "Products with a specific tag" and enter the label Squarify saved on your products for this discount.
  7. Set the active dates and save - every product that had this discount in Square already carries the matching label, so Shopify applies it to exactly the right products.

Discount code

  1. In Shopify Admin, go to Discounts → Create discount.
  2. Choose "Amount off products."
  3. Under Method, select "Discount code."
  4. Enter a code - often just the Square discount's name (e.g. SPRING-SALE-20).
  5. Set the discount value to match Square.
  6. Under "Applies to," choose "Products with a specific tag" and enter the saved label again.
  7. Optionally set usage limits and active dates, then save and share the code.
Want to see exactly which products had a given discount? In Shopify Admin, go to Products, click Filter, search for the discount-details filter Squarify added, and enter part of the discount's name - every matching product appears, ready to bulk-select.

What doesn't carry over automatically

  • Variable-amount discounts - if a Square discount lets your staff type in the amount at checkout rather than using a fixed value, Shopify can't recreate that automatically (it needs a fixed value up front). These are saved as a reference label only - set the actual value yourself when creating the Shopify discount.
  • Day/time schedules - (e.g. weekdays only) - Shopify has no equivalent, so the migrated discount stays active every day within its date range instead of just the scheduled hours.
  • "Apply discount after taxes" - every Shopify discount is calculated before tax, with no setting to change that. The discount itself still migrates; only that timing detail is dropped. If exact tax math matters, a common workaround is letting the order go through at full price and issuing a partial refund afterward.
  • Point-of-Sale-only / Online-only restriction - Shopify has no setting that limits a discount to one sales channel, so Squarify labels the migrated discount " · POS Only" or " · Online Only" in its title and tags it accordingly, so you know it needs a manual channel restriction if that matters to you.
Buy X Get Y ("Buy one, get one") discounts scoped to specific items or a category migrate automatically. One with no restriction at all (applies to everything) still migrates too - Squarify quietly maintains a dedicated collection behind the scenes to make that possible, since Shopify doesn't otherwise offer an "all products" option for this discount type.
A discount restricted to a specific Square customer group is recreated using a matching Shopify customer segment - this works whether you migrate your customers first or afterward; either way, the right customers become eligible automatically.
An already-expired Square discount is skipped by default, so it doesn't clutter your Shopify Discounts list. Turn on "Include expired discounts as well?" to bring it over anyway, with its original (already past) end date.
Re-running discount creation is the one place Squarify doesn't check for duplicates - each run creates brand-new Shopify discounts without checking for ones already created from an earlier run, so avoid creating discounts more than once for the same Square data.

Collections

Square categories become Shopify manual collections. All products assigned to a category are automatically linked to the corresponding collection - created as part of Product Catalog Migration, not a separate step.

What migrates

  • Collection title from Square category name
  • Collection description, if set in Square
  • All products assigned to that category, linked automatically

What doesn't

  • Smart/automated collection rules beyond the tag match Squarify sets
  • Collection sort order - Shopify defaults apply
  • Collection images or banners
  • Subcategory nesting - categories become flat top-level collections
Enable "Create Shopify collections from Square categories" in Migration Settings before running - it's off by default.
Re-running skips collections that already exist in Shopify.
Products must be migrated in the same run so they can be linked to their collections.

Customers

Square customers are imported with full contact details, addresses, marketing preferences, and tags. Existing Shopify customers matched by email are automatically skipped, never overwritten.

Build your Customers checklist

Interactive

Tell us about your Square customer list - we'll tell you exactly what to select on the real Customers settings page.

Do some customers have neither an email nor a phone number?
Bring over saved addresses?
Bring over birthdays, if you collect them?
Bring over staff notes on customers?
Want a ready-to-use Shopify segment for these customers?

Your settings checklist

Migrate customers with no email and no phone
Leave OFF (default)
Customers → Migration Settings
Import addresses
Turn ON
Customers → Migration Settings
Include birthday
Leave OFF (default)
Customers → Migration Settings
Include notes
Turn ON
Customers → Migration Settings
Create customer segment
Leave OFF
Customers → Migration Settings
This is a guide only - it doesn't change anything in your Squarify account. Use it to know exactly what to pick when you get to the real settings page.

What migrates

  • First name, last name, email, and phone number
  • Billing and shipping addresses, including company name
  • Email marketing consent (subscribed / unsubscribed)
  • Customer notes
  • Square customer groups, converted to Shopify customer tags
  • Any global tags you set - added to every migrated customer
  • A label marking the customer as migrated by Squarify, so it can always be found and grouped later

What doesn't

  • Customers with neither email nor phone, unless "Migrate customers with no email and no phone" is on
  • Order history or purchase records
  • Payment methods or saved card data
  • Loyalty points or reward balances
What it remembersWhy it matters
BirthdayCarried over from Square, only if you turn that on in migration settings.
Original signup dateThe date the customer was first created in Square.
Square's own reference IDIf the customer had one in Square, kept for reference.
How the customer was originally addede.g. through a third-party app, or an instant checkout profile in Square.
Automatic segments: enabling the segment option creates a "Square Migrated Customers" segment that automatically includes everyone this app has ever migrated, plus one additional segment per Square customer group (e.g. "VIP"). An existing segment with the same name is left alone, not duplicated.
A customer needs an email or a phone number to migrate by default - whichever one they have is used to avoid creating the same person twice, even if two Square customers happen to share a phone number but have different emails.
Turn on "Migrate customers with no email and no phone" to bring these customers over anyway - each one is labeled so you can find and follow up with them directly in Shopify.
Your global tags are combined with Square group tags on every customer, and the migrated-by-Squarify label is always applied regardless of other tag settings.
Global tags are required if you want to use the automatic segment feature.
Re-sync Customers only imports customers created in Square since your last Customers migration or re-sync - it never re-checks or refreshes info on customers already migrated, since Shopify already prevents duplicate emails on its own. It's available once your first Customers migration completes, and always compares against your most recent run (there's no earlier-checkpoint picker, unlike Re-sync Products).

Gift Cards

Active Square gift cards are imported with their current balances. Customers can use the same codes at checkout immediately after migration.

Build your Gift Cards checklist

Interactive

A couple of quick questions - we'll tell you exactly what to select on the real Gift Cards settings page.

Link gift cards to the matching Shopify customer by email?
If a card can't be linked automatically, save who it belongs to anyway?
Run this migration now, or schedule it?

Your settings checklist

Link to Customer Records
Leave ON (default) - heads up, this can trigger Shopify's gift-card email if notifications are on
Gift Cards → Settings
Add customer details to the gift card note
Turn ON - useful fallback when a card can't be auto-linked
Gift Cards → Settings
Run migration
Click "Migrate Gift Cards" whenever you're ready
Gift Cards page
This is a guide only - it doesn't change anything in your Squarify account. Use it to know exactly what to pick when you get to the real settings page.

What migrates

  • Gift card GAN code from Square
  • Current balance at time of migration
  • Currency
  • Original creation date, as a note attribute

What doesn't

  • Expired or deactivated Square gift cards
  • Zero-balance gift cards
  • Gift card transaction or redemption history
Only ACTIVE cards with a balance greater than $0 migrate - that's all Shopify accepts. PENDING, DEACTIVATED, or BLOCKED cards are skipped automatically.
Codes (GANs) may be reformatted to meet Shopify's code length and format requirements. Re-running skips gift cards that already exist.
Can be scheduled to run at a specific date and time from the Gift Cards page.
"Link to Customer Records" only searches for an existing exact email match - it never creates a new customer, and an unmatched card still migrates, just unlinked.

URL Redirects

Maps old Square product URLs to their new Shopify equivalents, preserving SEO rankings and ensuring saved links land on the right page. Run this after Products, so every product already has a Shopify handle.

Example
Your old Square linkyourstore.com/product/blue-mug/12ab34
Where it now pointsyourstore.com/products/blue-mug
Matching tries, in order: Square's own live product link, a saved copy of your old Square Online link (for anything customized there), the product name turned into a URL-friendly slug, then a close-match fallback - that last one is only ever flagged "Needs review" in the preview, never created automatically, since it could point to the wrong product.
  1. Open the URL Redirects page - a sample of matched redirects is shown automatically.
  2. Download the Full Preview (CSV) to review every product's match before running anything.
  3. Check "Approve URL redirects and ready to migrate" - both this and the download are required before Migrate unlocks.
  4. Click "Migrate to Shopify" to create all matched redirects.
  5. Redirects go live immediately - Squarify then visits each one to confirm it actually works and reports how many are verified.

What doesn't get a redirect

  • Products not yet migrated to Shopify - they have no Shopify page to point to yet
  • Products no longer Active in Shopify (draft or archived), even if a Square match was found
  • A close-but-not-exact match - flagged "Needs review" instead of created automatically
  • Square category or collection page links (handled separately - see Notes)
  • Custom Square Online pages or blog posts

Notes

  • Run this after Products migration, so every product already has a Shopify page to redirect to.
  • The on-screen sample mostly shows product redirects, but reserves a couple of rows for category/collection matches if your store has any.
  • Re-running skips redirects that already exist - safe to run again after migrating more products.
  • Both the CSV download and the approval checkbox are required every visit to this page, including right after clicking Refresh Data.
  • After creating redirects, check the "verified working" summary and the downloaded report for any flagged as needing attention.

Product Weight + Online Price

Square doesn't share product weight or an original/sale price with any app, including Squarify - this is a separate, optional step using a file you export from Square yourself. Only products already migrated through Squarify are matched.

  1. Export your items from Square Dashboard → Items & catalog → Export items (CSV or Excel).
  2. Open the file and keep whichever of these columns you need: "Weight" with numeric values (optionally with a "Weight Unit" column too), and/or "Online Sale Price" - Square's own column for an item's active discounted price. A row only needs one of the two.
  3. For large catalogs, it helps to delete every other column and remove blank rows first - Squarify only ever reads the Token, Weight, Weight Unit, SKU, and Online Sale Price columns, so trimming the rest can shrink the file 10x or more.
  4. Upload the file in Settings → Product Weight Migration. Each row is matched to the right Shopify variant using a hidden tracking value Squarify added when it first migrated that product (the file's Token column) - falling back to matching by SKU for anything that's missing.
  5. If your file has an Online Sale Price column, a toggle appears offering to also update price - off by default, since it changes a live selling price.
  6. Preview the matched variants, then click Apply Weight Updates.
Name this column in your file......and Squarify reads it as
Weight (kg)Kilograms, automatically
Weight (lb)Pounds, automatically
Weight (g)Grams, automatically
Weight (oz)Ounces, automatically
WeightFalls back to your chosen default unit
Only products migrated through Squarify can be matched this way - that hidden tracking value only exists on products Squarify itself created. If it's missing on a variant (e.g. removed after migration, or the product was never migrated through Squarify), Squarify tries matching by SKU instead - but only if your file has a SKU column and that SKU exists on exactly one Shopify variant. Otherwise, that row is simply left unmatched, never guessed.

What doesn't update

  • Rows with no tracking match and no usable SKU fallback
  • Price / compare-at price, unless the price-update toggle is on and your file has a value in Online Sale Price for that row
  • Any other variant field - SKU, inventory, and so on are never touched by this tool

Notes

  • Re-upload and re-apply at any time to correct weights or refresh prices - each upload creates a new job in Recent Migrations.
  • A row is included if it has a value for Weight, Online Sale Price, or both - a blank cell in one column just means that field isn't touched, not that the whole row is skipped.
  • Price updates stay off by default even when your file has an Online Sale Price column, since it's a live selling-price change.
  • When a variant needs both weight and price updated, Squarify applies them together in one update rather than two, and groups multiple variants of the same product to apply faster on large files.
  • Download the report afterward to see which variants updated or failed - rows matched by SKU fallback instead of the usual tracking link are noted as such.
  • If a row's SKU matches more than one Shopify variant, Squarify never guesses - that row is flagged separately in the preview instead.