Shopify Product Migration Secrets: What Silently Breaks and How to Fix It
The Main Approaches to Product Copying
- CSV or Excel as a Middleman: Tools like Matrixify export data to a spreadsheet for editing, then import. Great for bulk changes, but flat formats can lose fidelity on nested data.
- Direct Cross-Store Copy: Apps like Duplify install on both stores and transfer data directly, without an intermediate file. Faster if no inspection or editing is needed.
- Structured-Format Export with Transfer: My app, Product Save & Sync, uses JSON snapshots. This preserves intricate relationships and nested data, and snapshots can be downloaded or transferred directly.
Manual rebuild is an option for very few products, but quickly becomes painful for more.
Most tools handle standard product fields, variants (SKUs, prices), basic images, and simple metafields reliably. If your catalog is straightforward, many tools will work, and choice often comes down to price or workflow preference.
However, when your catalog has any of the following, tool choice starts to matter significantly:
The Five Sneaky Things That Quietly Break
These are common culprits I’ve seen cause headaches. Knowing them upfront can save you frustration.
1. Metafield References to Metaobjects
The Symptom: Imported products have missing or null metafield values that should link to metaobjects.
What’s Happening: A metafield points to a metaobject by its handle. If the metaobject isn't pre-existing on the target store with the same handle, the reference breaks and saves as null, often without warning.
How to Check: Import one product using a metaobject reference. Check its metafield in the target store admin. If empty, the metaobject wasn’t brought across.
What to Do: Pre-create metaobjects manually or via GraphQL Admin API, or use a tool that transfers metaobject definitions and instances with products.
2. Metafield Definitions Not Following Their Values
The Symptom: Metafield values appear in the admin but are invisible on your theme, Storefront API, or Liquid.
What’s Happening: Metafields have both a value and a definition (schema). Values can import without their definition on the target. Themes and APIs need the definition to read the value.
How to Check: After import, go to Settings > Custom Data on the target store and compare metafield definitions with the source.
3. Variant Option Structure Getting Garbled
The Symptom: Multi-variant products become single-variant, or variants are dropped.
What’s Happening: CSVs represent variants as rows. Missing or mislabeled columns can silently collapse the variant structure during import.
How to Check: Compare variant counts for a multi-variant product on source vs. target after import.
4. Image URLs That Go Nowhere
The Symptom: Products import with image placeholders, but actual images don’t load.
What’s Happening: CSV imports use image URLs. If these URLs are stale, deleted, or unreachable during import, blank image records are created silently.
How to Check: Before a large import, open one image URL from your export file in a browser. A 404 or redirect indicates a problem.
What to Do: If URLs are stale, use tools that transfer actual image files, not just URLs.
5. Collection Memberships Without Collection Details
The Symptom: Products are in the right collections, but the collections themselves lack titles, descriptions, images, or smart rules.
What’s Happening: Some tools only copy product-collection relationships, not the collection’s own properties. You’re left rebuilding collection pages manually.
How to Check: After import, open a collection in the target store admin and compare its fields to the source.
Things That Genuinely Won't Transfer (Shopify's Limits)
These are platform limits, not tool limits:
- GIDs (Global IDs): Every Shopify resource gets a new GID on creation in a new store. External systems referencing by Shopify ID (not SKU/handle) will break.
- Customer Passwords: Encrypted and not exportable. Migrated customers must reset their passwords.
- App Installations and Their Internal State: App installs are per-store. Reinstall apps on the target store; their data starts fresh.
A Quick Note on Pricing Models
App pricing varies structurally:
- CSV/Excel Tools: Often tiered by volume processed per file. Good for very small or very large needs.
- Direct-Copy Apps with Per-Job Caps: Priced by volume per run, scaling with catalog size.
- Flat-Monthly Tools: Consistent fee regardless of volume. Predictable, especially for larger transfers.
For development stores: apps using Shopify’s managed billing won’t charge dev stores (test subscriptions). Apps handling their own billing might, though some offer free dev store policies.
Which Tool for Which Situation?
Here are a few tools often discussed:
- Matrixify: CSV/Excel-based. Mature, broad scope (products, orders, customers, metafields). Ideal for workflows needing spreadsheet inspection/editing.
- Duplify: Direct cross-store cloning, broader scope (pages, blogs, customers, orders, themes). Per-job tiered pricing.
- Product Save & Sync: (My app) Product-scope copy via JSON snapshots. Transfers metafield values with definitions, metaobject definitions with instances, and actual image files. Flat monthly pricing.
The bottom line: most quiet migration failures stem from those five tricky areas. If your catalog is simple – no complex metafields, metaobjects, or elaborate collections – almost any tool will work. But if you have metaobjects, custom metafield definitions, complex variants, or detailed collections, your tool choice is critical. My best advice? Always test with just one product first. Move a single complex product, then thoroughly check those five problematic areas on your target store before a full migration. It’ll save you a world of hurt. Happy migrating!