A practical retail guide

How to migrate a product catalog between POS systems

Export the right records, map products and variants, then prove the receiving catalog is ready for your stores.

To migrate a product catalog, first define which products and variants belong in the destination. Keep the original export, map fields and identifiers, test representative records and reconcile the receiving catalog before relying on it for sales or stock updates.

Download the product catalog field-map template to record source fields, receiving decisions and acceptance checks. It uses fictional examples and destination concepts rather than vendor-specific headers. It is a planning aid, not an import-ready file for every POS.

1. Define the catalog you intend to move

List active products, archived products, parent styles and sellable variants separately. Decide whether an archived product must remain available for historical lookup, become sellable or stay outside the new POS. Confirm stores, warehouses, sales channels and any existing receiving records.

A catalog with 100 styles and 300 variants has two different counts to reconcile. The source may export one row per variant or split families across files. Record the source structure before treating a row count as a product count.

2. Export and preserve the original

Use the source edition’s supported export and record its filters, included locations and extraction time. Check whether the export includes archived items and the complete record set. Save an untouched copy, then prepare working files separately.

Keep source product and variant IDs in a crosswalk. They let you trace a receiving record back to the source; they are not automatically valid IDs in the destination. Review image access separately so the new catalog does not rely on links that disappear when the old account closes.

3. Clean identifiers without changing their meaning

Inspect duplicate SKUs, missing barcodes, inconsistent categories and variant families that use different names for the same option. Treat barcode and SKU columns as text where leading zeros matter. Agree how missing or conflicting values are handled rather than silently replacing them.

Avoid collapsing products solely because they share a name. Two pieces can have the same description and still be distinct sellable items. The SKU and barcode guide and data-cleaning guide explain these checks in more detail.

4. Map products and variants

Source evidenceReceiving decisionTest
Product family and variant identityIntended parent product and sellable combinationsFind the full family without duplicate listings
SKU and barcodeSupported identifier fields, stored with their full textScan the intended variant
Category and supplierApproved field, collection or retained referenceInspect a category and vendor example
Price, cost and unitRequired value, currency and unit contextCompare expected selling and purchasing values
Active/archive statusIntended selling availabilityCheck what staff and online shoppers can see
Image referencePermitted asset and destination relationshipOpen the image on the receiving product

Use the current receiving template for the selected method. Shopify product CSVs and Square’s item library have different rules. Do not rename fields in a source file intended for a tool that requires the original export unchanged.

5. Test existing-record behavior

Choose a family with several variants, a leading-zero barcode, an archived item, an image and a product already in the destination. Write the expected create, match or update operation for each. Load the sample with the current method, inspect the result and record rejects.

For a fictional shirt, source style A17 has sizes S and M with SKUs 0017-S and 0017-M. The receiving catalog should retain both combinations and their full identifiers. If size M already exists, decide how it is matched; creating another copy is not an acceptable substitute.

6. Load inventory through the right workflow

Catalog identity must be established before location stock can be matched reliably. Preserve the location map and stock-state meaning. A quantity labeled available is not necessarily the same as on hand, and an operation that adds stock behaves differently from one that replaces it.

For Shopify, review its separate inventory CSV guidance. Customer contacts also have their own method. The product catalog file should not be treated as evidence that customer history or liabilities moved.

7. Reconcile and cut over

Compare expected parent products, variants, matched records, rejects and exclusions. Inspect identifiers, prices, selling availability and images as well as counts. Then reconcile inventory by location against the agreed snapshot and account for later trading changes.

Keep a receiving baseline and a recovery plan for partial imports or retries. Retain approved exceptions in the handover. The sample acceptance report shows how a mismatch remains visible rather than disappearing into a total.

For managed preparation and testing, see product catalog migration services or check my migration.

Move with a clear plan.

Retail data migration for $2,999, with scope confirmed before booking.

Check my migration

Good questions

Before you make the move.

How do I keep variants together?
Retain family and individual variant identities and map each sellable combination to the receiving structure. Count parents and variants separately and test a complete family before loading the full catalog.
Will barcodes with leading zeros be preserved?
Preserve identifier columns as text during preparation and check their full values in the destination. Test an actual scan of a representative item before accepting the result.
How do I avoid duplicate products?
Inspect existing destination products before importing, agree a reliable match key and record whether each sample is created, matched or updated. A matching product name alone may not identify the intended variant.
Does a product import include location inventory?
Not necessarily. Inventory can require its own location-aware operation after product identity is established. Confirm the selected platform and method, stock state and set-versus-add behavior.