How do I find duplicate SKUs and barcodes in Shopify?
Updated 2026-10-21. Checked against Shopify's own documentation; links are under Sources.
Shopify doesn't warn you when two variants share a SKU or a barcode, and the admin has no screen that lists them. The reliable way to find them is to export your products to CSV and group the SKU and Variant Barcodes columns. Our free duplicate finder does this in your browser. Once you have the list, fix each variant in the product editor, or in the CSV and import it again.
Why duplicates cause trouble
Shopify identifies variants by their own IDs, so a shared SKU doesn't break the store itself. The trouble comes from everything else that matches products by SKU or barcode:
- Inventory, warehouse and accounting tools can update or count the wrong variant.
- A label printed from the SKU or barcode can end up on the wrong item, and scanning it at the till or in the warehouse picks the wrong product.
- Marketplaces and Google Merchant Center expect each product to have its own GTIN, so a shared barcode makes one listing look like another.
Duplicates usually come from copying a product to make a new one, from CSV imports where rows were filled down in a spreadsheet, or from a supplier reusing a code across sizes.
Step 1: Export your products
- In your Shopify admin, go to Products and click Export.
- Choose All products and a CSV format. Shopify emails the file to you if it's large.
- Don't open the file in Excel and save it again before checking it, because spreadsheets can strip leading zeros from barcodes (more on that).
Step 2: List the duplicates
Open the duplicate SKU and barcode finder and choose the file. For each SKU or barcode used more than once, it lists the CSV row, the product and the variant. It understands Shopify's current column names (URL handle, SKU, Variant Barcodes) as well as the older ones (Handle, Variant SKU, Variant Barcode).
Barcodes are compared as GTINs, not as text. A 12-digit UPC-A and the same number with a leading zero added (the 13-digit EAN form) are the same code. GS1 notes that GTINs are typically stored as 14 digits with leading zeros. So 036000291452 and 0036000291452 count as one duplicate, even though a plain text comparison would miss it.
If you prefer a spreadsheet, sort by the SKU column and look for neighbouring rows with the same value, then do the same for barcodes. This won't catch the UPC/EAN case, and it's slow on large catalogs.
Step 3: Decide which variant keeps the code
- Barcodes: a real GTIN belongs to one specific item, meaning a size, colour or pack size. Check the packaging or the supplier's sheet to see which variant it belongs to, and find the correct barcode for the others. Never make one up.
- SKUs: SKUs are your own codes, so you can choose. Keep the SKU on the variant your other systems already use (your warehouse, accounting or POS), and give the other variants new SKUs.
Step 4: Fix them
For a handful of variants, open each product in Products, click the variant, and edit the SKU or barcode. For many variants:
- Edit the
SKUandVariant Barcodescells in the exported CSV. Keep the barcode column formatted as text. - Import the file from Products › Import with the option to overwrite existing products turned on, so rows match your products by their handle.
- Export again and run the finder once more to confirm the list is empty.
A SKU scheme that avoids duplicates
Duplicates are less likely when a SKU is built from the product and its options, for example LINEN-SHIRT-WHT-M: a short product code, then the colour, then the size. Use the same order every time, stick to letters, digits and hyphens, and don't start a SKU with zeros (spreadsheets strip them). Some systems treat ls-03 and LS-03 as different SKUs and some don't, so use one case throughout. The finder has an option to compare SKUs regardless of case.
Keeping it clean
Duplicates come back whenever products are copied or imported. Running a fresh export through the product CSV checker after each big import catches them early, along with missing weights and bad barcodes.