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 unSquared keeps track of behind the scenes so nothing is left unexplained.

Golden Rules

Before you migrate anything

  • Bring everything over while your Square account is still open. Once it's deactivated, Square no longer gives access to your items, customers or history, and nothing can bring them back - while anything you don't need can be removed from Shopify in minutes. The one exception is gift cards: Shopify never lets an imported card be deleted, only deactivated.
  • unSquared 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. unSquared 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

Seven 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. unSquared 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

Finish setup: Preview Data or Skip to Dashboard

On the Get Started screen, finish setup with one of two buttons. Preview Data shows how a small sample of your own products, customers, gift cards and URL redirects would look in Shopify - free, read-only, nothing is created and no plan is needed - and finishes setup when you click the button at the bottom of the preview. Skip to Dashboard finishes setup straight away. After setup you can open it again from Settings > Preview Data. That second look is view only: it has a Back to Settings button and nothing else.

04

Configure each migration

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

05

Run the migration

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

06

Review the report

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

07

Migration complete

Once every data type you selected shows Completed on your dashboard checklist, you'll see a confirmation your one-time migration finished. You still have one use each of Inventory Sync and Re-sync Products available afterward.

Important to know

Get Started ends with two buttons: Skip to Dashboard, or Preview Data - a free, read-only look at a small sample of your own data, laid out the way Shopify would show it. Preview Data finishes setup when you click the button at the bottom of the preview. It uses default settings and creates nothing, so it is a picture of what unSquared would send, not a guarantee of the final result. After setup you can open it again from Settings > Preview Data. That second look is view only: it has a Back to Settings button and nothing else.
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 unSquared 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.
Counts and previews come from a saved copy of your Square data to keep pages fast, and each page's footer shows when it was last synced. If you add or change something in Square later, click Refresh Data on that migration page to pull the latest numbers - see Notes & edge cases under Product Catalog for the confirmation message you'll see.
When you click Migrate on Product Catalog, Customers, Gift Cards, or URL Redirects, unSquared first checks Square live. If something changed since the saved copy, a "Square data has changed" window lets you refresh and review, or (in most cases) continue with the latest data - nothing starts until you choose.

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.

Whatever your Square catalog looks like - however you store barcodes, whatever discounts or categories you use - unSquared checks your setup and shows you exactly which settings apply once you connect your store.

Included

  • Product title, description, and body HTML
  • Regular price and the crossed-out 'was' price shown for items on sale (Shopify calls this the compare-at price)
  • SKU and barcode per variant - sourced from Square's barcode number (UPC/EAN format) 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
  • Price & compare-at price
  • Variants

Configurable (on/off)

  • Description
  • 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
  • Sales channels - which channels (Online Store, POS, and so on) the product is published to
  • Inventory quantities
  • Search-engine (SEO) title & 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

When Taxonomy Mapping is turned on (it's off until you turn it on), Square categories are matched to Shopify's standard product categories (Shopify calls this system its 'taxonomy') on the Products page. Review and adjust before running. Unmapped categories default to the Square category name as the product type.

StatusMeaning
Mapped - ManualYou selected a Shopify taxonomy match yourself.
Mapped - AutounSquared found a close match automatically via Auto-suggest.
UncategorizedExplicitly set to Shopify's Uncategorized category - a deliberate choice, not a skipped row.
Not MappedNothing selected yet - falls back to the Square category name as the product type.

Collections

Square categories become real Shopify automated (smart) collections. Products are added to the matching collection automatically, based on a category tag - created as part of Product Catalog Migration, not a separate step.

What migrates

  • Collection title from Square category name
  • Collection image, when the Square category has one
  • SEO title and description, when set on the Square category
  • Category path saved as a metafield, used as the collection's description for a nested category
  • Every product tagged with that category's name, added as a collection member automatically

What doesn't

  • Collection sort order - Shopify defaults apply
  • Subcategory nesting as a real parent/child structure - every category becomes its own flat, independent collection (the original hierarchy is preserved as a metafield and in the description text for nested categories)
Enable "Create Shopify collections from Square categories" in Migration Settings before running - it's OFF by default.
Collections are automated (smart), not manual - Shopify keeps them updated on its own as more tagged products are migrated.
Re-running finds an already-existing collection (matched by its tracked Square category ID first, then by handle) and adds any not-yet-included products to it, instead of creating a duplicate.
Products must be migrated in the same run so they can be tagged into their collections.
Keep "Tags" checked in Field Mapping - the category tag is what adds a product to its collection, so without it the collections are created empty.
Shopify's newer collection options (excluding products, sub-collections, or more than one source) aren't supported yet. A collection that uses them is invisible to unSquared, so a re-run creates a duplicate and URL Redirects can't match that category.

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 unSquared 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. Two kinds of Square discount are the exception and are always created as discount codes instead: ones your staff apply by hand, and ones that only run on certain days or hours.

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 unSquared 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 unSquared 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 can't limit a discount to certain days or hours, so the schedule itself is dropped. To stop the discount applying around the clock, unSquared always creates it as a discount code (never automatic), so it only applies when the code is used, at any time within its date range.
  • "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 unSquared reads which boxes were ticked under "Apply automatic discount" in Square, labels the discount " · POS Only" or " · Online Only" in Migration History and the downloaded report, and tags it in Shopify accordingly, so you know it needs a manual channel restriction if that matters to you.
A Square discount your staff apply by hand ("Apply automatic discount" turned off) is always created as a Shopify discount code, even if you picked Automatic. As an automatic discount it would apply to every cart straight away. The code is the discount's name in capitals with dashes (for example STAFF-10).
If Square limited a discount to specific products or categories and none of them exist in Shopify yet, that discount is not created - it shows as Failed with an explanation instead of becoming a discount on your whole store. Migrate those products first, then create discounts again.
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 - unSquared 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 safe - each discount is tagged with a reference back to its Square discount, so a repeat run recognizes one already created and skips it instead of creating a duplicate.

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

unSquared 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

unSquared 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 unSquared 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 unSquared 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, and at least one location mapping has been saved - 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 unSquared's servers as well as on screen. A standalone Collections or Discounts job running on its own also blocks Re-sync Products until it finishes (Manage Inventory isn't affected by those).

Product Weight + Online Price

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

  1. Export your items from Square Dashboard → Items & services → Items → Item Library, then Actions → Export Library (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 - unSquared 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 unSquared 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 unSquared 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 unSquared can be matched this way - that hidden tracking value only exists on products unSquared itself created. If it's missing on a variant (e.g. removed after migration, or the product was never migrated through unSquared), unSquared 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.
  • If the price toggle is on but that column is empty in every row, the preview shows an info banner saying no data was found there - no prices change and only weights are updated.
  • When a variant needs both weight and price updated, unSquared 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, unSquared never guesses - that row is flagged separately in the preview 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 batches of 500 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 whether the product shows up on your Online Store, POS, and other sales channels are still applied one product at a time right after, with their own progress count. While it runs, the progress card shows "Importing N products…" for the whole job with a live count that climbs as Shopify creates them (rather than the current batch's "X of Y"), and only Cancel is available (no Pause) - cancelling waits for the batch already underway (at most 500 products) to finish first. If Shopify won't accept a product's stock at a location, that product's report row says so - run Sync Inventory to retry. And if unSquared's servers restart mid-batch, it checks with Shopify which products were already created, finishes them, and carries on by itself. If Shopify's own daily cap on new products is reached partway through (only relevant for very large catalogs on plans other than Shopify Plus), unSquared 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.
See every Shopify limit that can affect a large catalog

Time estimates

Any estimate you see before a migration starts is a rough guide, not a promise. Your own catalog decides how long it really takes.

What affects the time. How many products and variants you have, how many images each one carries, how many locations hold stock, and how quickly Shopify and Square respond at that moment. Both platforms limit how fast apps can send requests, and unSquared stays within those limits to keep your store running smoothly.
Products take the longest. Each product is built from several parts - the product itself, its variants, its images, and its stock at every location. A few hundred products usually finish in well under 30 minutes, while a catalog in the thousands can take a couple of hours. Customers, gift cards, discounts, and collections are much quicker, typically finishing in minutes even for a few thousand records.
Large catalogs. Migrations over 2,000 products switch to a faster import mode (see Large migrations above). If your store is already very large, Shopify also limits how many new products and variants it accepts per day - unSquared pauses, tells you, and continues automatically about 24 hours later. Nothing already migrated is lost.
Once it starts, you can follow it for real. The progress card shows how many items have been created, skipped, or failed so far, based on your own data, and you can pause or cancel at any time (in the faster import mode only Cancel is available).

What unSquared remembers about each product

Behind every migrated product, unSquared quietly keeps a set of hidden details from Square - so nothing about its original source is lost, duplicate migrations are recognized automatically, and other unSquared 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.
Every Square sales channel this product was assigned toSaved as square-channel-[name] tags (or no-square-channel-assigned if Square gave no channel data) and as square.channel_names/square.channel_types metafields, so you can see exactly what drove its Online Store/POS placement.
Buyer-facing name & HTML descriptionSquare's buyer-facing name and the HTML version of the description are kept as extra details, while the Shopify title and description use the item name and plain description.
Online visibility & fulfillment settingsSquare's online visibility, location fulfillment flag, and each category's online visibility, kept for reference.
Stock and location settings per variantThe low-stock alert level, per-location inventory tracking and alert settings, and which locations each variation is available at (by location name).
Vendor details per variantThe vendor's name, ID, status, account number, note, address and contacts, plus your vendor's own SKU for that variation, so supplier information stays with the product.
Variation timestamps & versionWhen each variation was created and last updated in Square, its version number, and its deleted flag.

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 group of add-on options (a 'modifier set' in Square) 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 unSquared 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, or Shopify page URL (Shopify calls this a 'handle') before anything new is created. A match is skipped by default. If a SKU or barcode matches more than one existing Shopify product, unSquared never guesses - a new product is created instead, flagged on that row of the report so you can review it.
One matching variant matches the whole Square product. If a product has several variants and only some of them match an existing Shopify variant (by SKU or barcode), the whole product is skipped by default - so its other variants are not migrated either. The report row says how many were left behind, the downloaded report adds a "Skipped - Other Variants Not Migrated" count, and View Report shows a banner. Turn on "Overwrite existing Shopify product with matching Square SKU, barcode, or handle" to bring the complete product over (this replaces the matched Shopify product's data, so back it up first).
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 saved point in time 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 unSquared'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.
"Continue selling when out of stock" is off for every migrated variant unless you turn it on: it is a Product Settings toggle (off by default, saved with Save Settings), because Square has no matching setting to copy. Off, Shopify's own default applies and a variant stops selling when its stock reaches zero. On, every variant that run creates or overwrites is set to keep selling at zero stock - the right choice for made-to-order or backordered items. It applies to the whole run, and variants whose stock isn't tracked are always sellable. To change products already in Shopify, run Re-sync Products on your entire Square catalog after saving the setting, or edit them in Shopify admin.
To keep pages fast, the counts and previews on the Product Catalog page (discounts, active, archived, and deleted products, products already in Shopify, locations) come from a saved copy of your Square data, and the footer shows when it was last synced. If something changes in Square after the page loaded - say someone creates more discounts - the page keeps showing the older numbers until you click Refresh Data, which reloads everything straight from Square. When the fresh counts finish loading, a short message tells you what changed (for example "Data refreshed. Updated counts - Discounts: 3 to 5, Active products: 120 to 122") or, if nothing did, "Data refreshed. No changes found in Square." This message appears on the Product Catalog page only for now; the other migration pages reload on Refresh Data without it.
When you click Migrate, unSquared first does a quick live check against Square. If Square still matches the numbers on the page, the migration starts normally. If something differs - Products to migrate, Discounts, Categories, or a Square location (for example "Discounts: 4 to 5" or "New Square location: Pop-up") - the migration does not start yet, and a "Square data has changed" window offers "Refresh and review" (same as Refresh Data, starts nothing) or "Continue with latest data" (starts the migration with the latest data from Square, changes included). Only Refresh and review is offered if there's a new Square location (it has to be mapped to a Shopify location first or its inventory would be skipped), or if Square now has discounts but the page had found none (the discount option is switched off in that case, so continuing would skip them). If the check can't run, the migration just starts as usual. Re-sync Products, Manage Inventory, Product Weight, and scheduled runs aren't checked this way.
Online Store/POS publishing follows the real sales-channel assignment you set on each item in Square whenever Square provides it - the "Publish ECOM products to Online Store" and "Make all products available for POS" toggles only apply to products Square gave no channel data for. If your Square account has no Online Store channel at all, the first toggle instead becomes a blanket switch: on publishes every migrated product to Shopify's Online Store, since there's no per-product Square signal to go by.

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.

However your Square customer list is set up - addresses, birthdays, notes, whatever you collect - unSquared shows you exactly which Customers settings apply once you connect your store.

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 unSquared, 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 - a saved, auto-updating customer list (Shopify calls this a "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. Segments are built entirely from your Square data (customer groups + the migrated-by-unSquared tag), independent of the separate Global Customer Tags field - though that field is still required before you can migrate, just not for this.
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.
Global Customer Tags is your own free-text field, applied to every customer migrated in that run in addition to their Square group tag(s) and the migrated-by-unSquared label - e.g. a customer in Square's "Wholesale Buyers" group with "square-import" set as a global tag ends up with both tags side by side in Shopify.
At least one Global Customer Tag is required before you can migrate - Migrate stays disabled with a warning until it's filled in and saved, even though Save Migration Settings itself still allows it to be blank. Also checked against Shopify's own tag limits - 255 characters per tag, 250 tags per customer.
Clicking Migrate first runs a quick live check of your total customer count in Square. If it changed, a "Square data has changed" window (for example "Customers: 1,200 to 1,230") lets you "Refresh and review" or "Continue with latest data" - continuing is always allowed. Which of the new customers are eligible is worked out by the migration itself using your saved settings, so the Eligible number on the page may differ afterward. If the page shows 0 eligible customers, Migrate stays disabled until you click Refresh Data.
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.

Gift Cards has just a couple of settings - linking cards to a matching Shopify customer, and whether to run now or schedule it - and unSquared walks you through both once you connect your store.

What migrates

  • Gift card code (Square calls this the GAN, short for Gift Account Number)
  • Current balance at time of migration
  • Currency
  • Original creation date, as a note attribute

What doesn't

  • Expired or deactivated Square gift cards
  • Gift cards over $2,000 (Shopify's limit for creating a single gift card)
  • Gift card transaction or redemption history
Only ACTIVE cards migrate - that's all Shopify accepts. PENDING, DEACTIVATED, or BLOCKED cards are skipped automatically. A $0-balance ACTIVE card still migrates, just with a $0 balance in Shopify - only the ACTIVE status matters, not how much is left on the card.
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 Gift Cards to Customers by email" only searches for an existing exact email match - it never creates a new customer, and an unmatched card still migrates, just unlinked. You also choose whether linked customers get Shopify's gift-card email: "Link silently, do not email" (recommended, the default) or "Link and email the customer".
Migration Settings must be saved at least once before Migrate or Schedule Migration will run, even if every toggle is left at its default - a deliberate confirmation step, not a bug.
Clicking Migrate to Shopify first runs a quick live check of your gift card counts in Square. If they changed, a "Square data has changed" window (for example "Gift cards: 10 to 12") lets you "Refresh and review" or "Continue with latest data" - continuing is always allowed and uses the latest data from Square.

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 web-friendly version of its link (the same way Square Online builds it, so "10.2-inch" matches "10-2-inch"), 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. Leave "Include collection redirects" on (the default) to also redirect your old Square category pages to the collections unSquared migrated, then click "Migrate to Shopify" to create all matched redirects.
  5. Redirects go live immediately - unSquared then opens each new one on your store to confirm it works (the progress card shows this as "Verifying…") 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 pages whose collection unSquared didn't migrate (or when "Include collection redirects" is off) - they're listed in the Full Preview (CSV), but a category page only gets a redirect to a collection unSquared created
  • 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, plus up to 10 of your Square category pages with the collection each one goes to.
  • The "Include collection redirects" switch (on by default) adds a redirect from each Square category page to the collection unSquared migrated for it. It's switched off, with a note, when no collections have been migrated yet.
  • The green "Already in Shopify" boxes show how many eligible product and collection pages already have the right redirect in Shopify.
  • Re-running never makes duplicates: products that already have the right redirect are skipped and changed ones are updated, so it's safe to run again after migrating more products - and quick when most redirects already exist.
  • Skipped products come with a reason: not on your Square Online site, only a close URL match, or already redirected. The report shows the reason for each one.
  • Both the CSV download and the approval checkbox carry over to later visits - you only need to redo them after clicking Refresh Data, or if Square's data changes before you migrate.
  • After creating redirects, check the "verified working" summary and the downloaded report for any flagged as needing attention. A password-protected online store (every development store, or one not launched yet) can't be checked, so the page says so instead of flagging the redirects.
  • Clicking Migrate to Shopify first runs a quick live check of the redirect counts in Square. If anything changed, a "Square data has changed" window appears with only "Refresh and review" - never Continue - because the CSV you downloaded and approved no longer matches. Refreshing re-locks the CSV download and approval checkbox, so you download and approve the updated CSV again before Migrate is available.