A Shopify export, going back into Shopify
The shape people assume is safe. Two products whose titles slugify to one handle merge into one, and the import reports success.
How you recognise it
- A
Handlecolumn, and aTitlethat is filled on some rows and blank on others. - Rows carrying nothing but a handle and an
Image Src— those are image rows, and they are supposed to look like that. - Around fifty columns, most of them empty on most rows.
What goes wrong
Worst first, and the worst one is nearly always the one that reports nothing.
- Two different products that slugify to the same handle are merged into one product. Nothing is reported. The row count going in is unchanged and a product is gone.
- A file that looks like a finished Shopify export and is not UTF-8. One export in the corpus carries Windows-1252 bytes inside pasted HTML descriptions and stops being readable partway through.
- Handles that are uppercase, or that carry characters the importer normalises. What comes back out is not always what went in.
What we do about it
- Handle groups are found first and every rule is scoped to a row ROLE, so the option rules do not fire on image rows. On one real export that difference is 519 findings that would all have been wrong.
- Collisions are reported as collisions, with both handles named, before you upload.
- Encoding is detected and reported rather than repaired silently, because a description that decodes to the wrong glyph is not a fixable error, it is a decision.
Where this came from
Each of these is a real file in our test corpus, run through the engine on every change. We publish the shape and what it proved, never a cell — these are catalogues with real buying prices in them.
- etsy_to_shopify_export.csv
- 590 rows · 49 columns. Four handle collisions across 67 handles, and 519 well-formed image-only rows — the negative evidence that a naive option rule would report a 99.2% false-alarm rate.
- shopify_products_generated.csv
- 204 rows · 51 columns. A Shopify-shaped export that is not UTF-8 and becomes unreadable partway through.
What we did not measure. We measured what the importer does with these shapes on one development store, in September 2026, on the API version current then. A platform can change its normalisation without telling anybody, and that store has since been deleted.
Other shapes
- A WooCommerce export, going into Shopify — Two grammars that disagree about what a variant is. Woo points a child row at a parent SKU; Shopify groups by a handle that repeats.
- A Magento export, going into Shopify — A workbook that says it has forty rows and physically contains eight thousand. Most tools read the declaration.
All export shapes · Import errors, measured · The Shopify product CSV grammar
Run the file you have.
Whatever shape it arrived in, the Pre-Flight Report names every blocker in it before you upload anywhere. Free, no account.
Check a file free