Fix "Validation failed: options are not unique" in a Shopify CSV

Exact error message

  • Validation failed: options are not unique

Shopify shows "Validation failed: options are not unique" when two variants of the same product end up with the same option values, for example two rows with Size M. Usually a row was copied and not changed, or two products share a handle. Drop the file below: the tool lists the colliding rows for each product.

Wording and rules verified on

Fixed in your browser – your file never leaves your device.

Files over 50 rows: 1 credit each ($0.75–$1 depending on pack), no subscription · See prices

Several files? Select or drop them together to fix them all at once.

No file handy? Try a broken sample

Sample files with typical import errors, loaded in your browser. Fixing and downloading them is free.

Why it happens

Shopify builds a product from every row with the same handle (URL handle in the current template). Each of those variant rows needs a different combination of Option1, Option2 and Option3 values, because the combination is what tells the variants apart.

The line in the error can be the line where the product starts rather than the duplicate row. With many variants per product the colliding row can be far below it.

  • A variant row was copied and its option value wasn't changed: two rows say Size M.
  • Two values that look different are the same to Shopify: "M" and "m", or "Blue" and "Blue " with a trailing space.
  • A product has two options (Size and Color), but one column was left empty, so rows that differed only in that option collapse into one combination.
  • The same handle is used again further down the file, so a second product's rows join the first product and their options collide.

How to fix it manually

Excel or Google Sheets

  1. Sort by handle (keep the original order in a spare column if you need it back), so each product's rows sit together.
  2. Add a helper column that joins the handle and the option values, e.g. =A2&"|"&LOWER(TRIM(I2))&"|"&LOWER(TRIM(K2)) with your Option1 and Option2 Value columns.
  3. Use conditional formatting → Highlight duplicate values on the helper column. Every highlighted pair is a collision.
  4. For each pair, delete the row if it's a real duplicate, or correct the option value. If two different products share the handle, give one of them its own handle.
  5. Delete the helper column and save as "CSV UTF-8 (Comma delimited)".

Before and after

Before
Handle,Title,Option1 Name,Option1 Value,Variant Price
organic-tee,Organic Cotton Tee,Size,M,24.90
organic-tee,,,L,24.90
organic-tee,,,m,24.90
After
Handle,Title,Option1 Name,Option1 Value,Variant Price
organic-tee,Organic Cotton Tee,Size,M,24.90
organic-tee,,,L,24.90
organic-tee,,,XL,24.90

The third variant was meant to be XL, but its row says "m", the same size as M. The fixed row gives it its own value.

Fix it automatically

  • Groups the rows into products by handle, the way Shopify does, in both the current and the old template.
  • Compares option values ignoring capitalisation and extra spaces, and lists every variant whose combination is already taken, with its line number.
  • Flags a handle that's reused by a second product further down the file.
  • Doesn't delete or rename variants on its own: whether a row is a duplicate or needs another value is your call.

Checking and the preview are free. Downloads are free up to 50 rows; a larger file costs 1 credit.

Choose a file

The file is read and repaired inside your browser. Nothing is uploaded: only the row count and the platform are ever sent to us, so supplier prices and customer data stay private.

Frequently asked questions

Which row do I fix?

The second one of each pair. The tool reports the row that repeats a combination already used by the product, with its line number, so you don't have to search the product's rows.

Are "M" and "m" really the same option value?

Treat them as the same. The tool compares values ignoring case and extra spaces, so you catch these before Shopify rejects the product.

My file was exported from Shopify. How can it have duplicates?

Usually from edits after the export: a copied row, a new variant added under the wrong handle, or two exports pasted into one file so a handle appears twice.

How much does it cost?

Checking a file and previewing the fixes is free. Downloading the fixed file is free up to 50 rows. A larger file costs 1 credit, and for 24 hours you can download the same file again in another format or encoding at no extra cost. No subscription needed; agencies that fix files every month can choose Pro: 300 files a month for $19.