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.
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.
Choose what to migrate
Pick which data types you want - Products, Customers, Gift Cards, and/or URL Redirects. Change this anytime later from Settings.
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.
Configure each migration
Choose fields, locations, and settings for each migration type. Review counts and summaries before running.
Run the migration
unSquared creates or updates records in Shopify with real-time progress. Pause, resume, or cancel at any time.
Review the report
Download a detailed Excel report for every run - see exactly what was created, updated, skipped, or failed.
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
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.
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.
| Status | Meaning |
|---|---|
| Mapped - Manual | You selected a Shopify taxonomy match yourself. |
| Mapped - Auto | unSquared found a close match automatically via Auto-suggest. |
| Uncategorized | Explicitly set to Shopify's Uncategorized category - a deliberate choice, not a skipped row. |
| Not Mapped | Nothing 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)
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.
| Mode | What happens |
|---|---|
| Save only | No 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 Code | A real Shopify discount code is created for each Square discount, automatically applied to the right products. Customers enter the code at checkout. |
| Automatic Discount | Applies 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
- In Shopify Admin, go to Discounts → Create discount.
- Choose "Amount off products."
- Under Method, select "Automatic discount."
- Give it a title (e.g. "Spring Sale 20%").
- Set the discount value to match your original Square discount.
- Under "Applies to," choose "Products with a specific tag" and enter the label unSquared saved on your products for this discount.
- 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
- In Shopify Admin, go to Discounts → Create discount.
- Choose "Amount off products."
- Under Method, select "Discount code."
- Enter a code - often just the Square discount's name (e.g. SPRING-SALE-20).
- Set the discount value to match Square.
- Under "Applies to," choose "Products with a specific tag" and enter the saved label again.
- Optionally set usage limits and active dates, then save and share the code.
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.
Inventory Sync
Refreshes stock quantities in Shopify for products already migrated from Square - without touching titles, prices, images, or any other field.
Find already-migrated products
unSquared looks through Shopify for every variant it recognizes as one it migrated from Square.
Check Square's current stock
For each matched variant, the current stock level is fetched fresh from Square.
Compare before writing
unSquared checks what Shopify currently has on hand at each mapped location before writing anything.
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.
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.
| Mode | What happens |
|---|---|
| Only what changed since last sync | Asks Square for just the items it recorded a change to since your last full check - much faster on a large catalog. |
| My entire catalog | Checks 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.
- Export your items from Square Dashboard → Items & services → Items → Item Library, then Actions → Export Library (CSV or Excel).
- 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.
- 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.
- 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.
- 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.
- 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 |
| Weight | Falls back to your chosen default unit |
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)
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 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 remembers | Why it matters |
|---|---|
| Original Square product & variant | Lets 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 migration | A record of how the item looked in Square when it was brought over. |
| Archived / deleted flags | Tracked separately, since an item can be archived, deleted, both, or neither in Square. |
| Taxable status | Carried over from Square for reference. |
| Item type | Physical 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 Online | Used as a fallback match when creating URL Redirects. |
| Discount tags that apply to this product | So you can filter for exactly which products carry a given Square discount. |
| Modifier & option details | Group 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 components | For items built from other items in Square. |
| Every Square sales channel this product was assigned to | Saved 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 description | Square'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 settings | Square's online visibility, location fulfillment flag, and each category's online visibility, kept for reference. |
| Stock and location settings per variant | The 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 variant | The 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 & version | When 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
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.
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 remembers | Why it matters |
|---|---|
| Birthday | Carried over from Square, only if you turn that on in migration settings. |
| Original signup date | The date the customer was first created in Square. |
| Square's own reference ID | If the customer had one in Square, kept for reference. |
| How the customer was originally added | e.g. through a third-party app, or an instant checkout profile in Square. |
Gift Cards
Active Square gift cards are imported with their current balances. Customers can use the same codes at checkout immediately after migration.
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
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 link | yourstore.com/product/blue-mug/12ab34 |
| Where it now points | yourstore.com/products/blue-mug |
- Open the URL Redirects page - a sample of matched redirects is shown automatically.
- Download the Full Preview (CSV) to review every product's match before running anything.
- Check "Approve URL redirects and ready to migrate" - both this and the download are required before Migrate unlocks.
- 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.
- 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.