The Shopify product CSV isn't really a spreadsheet — it's a set of instructions the importer applies directly to your live catalog. When an instruction is ambiguous, the importer doesn't pause to ask; it picks an interpretation, runs it across every matching row, and offers no built-in undo afterward. Most "Shopify CSV import errors" trace back to one of the mechanics below.
Check your file first. Our free Shopify CSV Validator scans a product CSV for every trap on this page — right in your browser, with nothing uploaded.
1. The Handle column decides which product gets overwritten
Per Shopify's CSV documentation, the Handle is what uniquely identifies a product during import — not the title or SKU. With "Overwrite products with matching handles" selected, any row whose Handle matches an existing product overwrites that product's fields. That one column is the difference between "update this product" and "create a brand-new one."
Two failure modes follow from this:
- Wrong or changed Handle → the wrong product is edited. If you rename a handle or a tool re-slugs your titles, the row no longer points at the product you intended.
- Blank or non-matching Handle → duplicates. A row whose handle matches nothing is treated as a new product, so you end up with two near-identical listings instead of one updated one — a frequent complaint among merchants importing supplier feeds.
summer-tee, Summer-Tee, and summer_tee are three different identities to the importer.2. Missing Option columns delete your variants
This is the one that produces the dreaded "Shopify bulk editor deleted variants" moment — except it's usually the CSV importer, not the bulk editor. Shopify's docs are explicit: when you update a product that has variants, you must include the Option1 Name and Option1 Value columns. If those columns are missing, Shopify creates a single new default variant and deletes the existing variants.
It gets subtler. Shopify also notes that changing an Option value deletes the existing variant IDs and creates new ones — which can detach inventory levels and orphan anything keyed to the old IDs. A correctly structured multi-variant product looks like this: the first row carries the full product, and each following row repeats only the Handle plus the next Option value.
| Handle | Title | Option1 Name | Option1 Value |
|---|---|---|---|
| summer-tee | Summer Tee | Size | Small |
| summer-tee | (blank) | (blank) | Medium |
| summer-tee | (blank) | (blank) | Large |
Drop the Option columns entirely, and Shopify reads "this product has no options" — collapsing three variants into one default.
3. Blank cells overwrite real data with nothing
There's a counter-intuitive distinction in Shopify's overwrite logic that trips up almost everyone. When you overwrite by matching handle:
- A non-required column that is present but blank overwrites the existing value with blank. Per Shopify's example, an existing Vendor of "John's Apparel" becomes empty if your CSV has a Vendor column left blank.
- A column that is omitted entirely from the file leaves the existing value untouched.
So "Shopify import deleted my descriptions" usually means a Body (HTML) column was present but empty. The cure: only include columns you intend to change — every column you keep is one you're authorizing to be rewritten, blanks included.
4. Encoding and locale mangle your characters
Shopify accepts only UTF-8 encoded CSV files. Open an export in a program that saves in a different encoding, and accented letters, currency symbols, and quotation marks can come back garbled. Curly "smart" quotes are a frequent culprit and can trigger an "illegal quoting" error that fails or distorts the import. Two limits worth knowing: a product CSV can't exceed 15 MB, and Google Sheets defaults to UTF-8 — part of why editing in Sheets sidesteps the re-encoding trap.
5. The real problem: no preview, no undo
Each mechanic above is survivable on its own. What makes them dangerous together is that, as of 2026, Shopify's admin gives you no dry-run preview of what an import will change and no native undo once it runs. Shopify's documentation states that an import can't be cancelled after it begins and that there's no history of past imports — which is why their guidance is to back up your data before you import. By the time you see the damage, the previous state is gone unless you saved it yourself.
A prevention checklist
Run through this before every import, especially on a live store:
- 1
Export a backup first
Export the products you're about to touch and save the file untouched. That export is your only realistic rollback path if the import goes sideways.
- 2
Confirm every Handle matches
Spot-check that handles in your file exactly match existing products. Mismatches create duplicates; renames overwrite the wrong product.
- 3
Keep Option columns intact
If a product has variants, always include Option1 Name and Option1 Value (and Option2/3 where used). Don't change Option values unless you mean to regenerate variant IDs.
- 4
Only include columns you mean to change
Remove columns you don't intend to edit rather than leaving them blank — blanks overwrite, omissions don't.
- 5
Save as UTF-8 and test small
Confirm UTF-8 encoding, replace smart quotes with straight quotes, and import a handful of rows as a trial before running the full file.
How a validate-before-write design closes these gaps
A manual checklist helps, but it still leans on you to catch every blank cell and stray handle by eye. SheetBridge is a pre-launch Shopify app being built around the failure modes above, with safety as the core design principle. It's waitlist-only — no live customers yet — but here's how its intended design maps onto each problem on this page:
Snapshot before every write
SheetBridge is designed to snapshot the affected products before each sync, so a bad edit is built to be reversible in one click — not dependent on a backup you remembered to take.
Validate before applying
It's built to check rows for the exact traps above — mismatched handles, missing Option columns, blanks that would clear fields — and flag them before anything is written, rather than after.
Identity by product, not slug guessing
SheetBridge is designed to map rows to real product records so an edit lands on the product you meant, instead of relying on a fragile handle string.
One-click rollback
Because it keeps versioned backups, the plan is to let you restore the previous state of the affected products if a sync isn't what you expected.
If you'd rather edit your catalog in a familiar spreadsheet without the CSV minefield, our guide to editing Shopify products in Google Sheets walks through a safer workflow, and how to undo a bulk edit in Shopify covers your options when a change has already gone live.
FAQ
Can I undo a Shopify CSV import?
As of 2026, Shopify's admin has no native undo for a product CSV import. Once an import begins it can't be cancelled, and there's no built-in history of past imports to roll back to. The reliable safeguard is to export a backup CSV of the affected products before you import, so you can re-import the old values if something goes wrong.
Why did my Shopify CSV import delete variants?
When you update a product that has variants, Shopify's CSV format requires the Option1 Name and Option1 Value columns. According to Shopify's help docs, if those columns are missing, a new default variant is created and the existing variants are deleted. Changing an Option value also deletes the old variant IDs and creates new ones.
Why did my CSV import create duplicate products?
Shopify uses the Handle column to identify each product. If a row's Handle doesn't match an existing product — because it's blank, misspelled, or changed — Shopify treats it as a new product and creates a duplicate instead of updating the one you meant to edit.
Why did blank cells in my CSV erase product data?
With "Overwrite products with matching handles" selected, Shopify's docs state that if a non-required column is present but blank, the matching value on the existing product is overwritten as blank. A column that is omitted entirely is left untouched. So an empty cell is treated as "set this to nothing," which can wipe descriptions, vendors, or tags.