Why Shopify CSV Imports Create Duplicate Products (and How to Prevent It)

You import a supplier update. The file looks correct. The import finishes without errors. You open Shopify admin and find 300 duplicate products alongside your existing 300: the same products, some with updated prices, some without, creating a catalogue that is now double the size it should be.
This is one of the most disruptive import errors Shopify merchants encounter, and it happens without any warning from the importer. Shopify confirms the import succeeded. From its perspective, it did. But the outcome is not what was intended.
The root cause is almost always the same: the Handle column.
How Shopify Decides Whether to Create or Update
Shopify uses the Handle column as the unique identifier for products during CSV import. When you import a CSV:
- If a row's Handle matches an existing product Handle, Shopify updates that product
- If a row's Handle does not match any existing product, Shopify creates a new product
The Handle is not a database ID that stays fixed regardless of what you name it. It is derived from the product title by default (lowercase, spaces replaced with hyphens, special characters removed) and stored on the product. When you import a CSV where the Handle values do not match the Handles already in Shopify, the importer creates new products rather than updating the existing ones.
For an initial import this is correct behaviour. For re-imports from the same supplier (price updates, stock refreshes, new products added to an existing catalogue), it is a significant problem if the Handle values have drifted between the original import and the update.
Four Reasons Handle Values Stop Matching
1. The supplier changed the product title.
A supplier who updates product titles between catalogue versions changes the Handle that Shopify would derive from those titles. If you imported "Stainless Steel Water Bottle 750ml" with Handle stainless-steel-water-bottle-750ml, and the supplier's updated CSV uses "Stainless Steel Bottle 750ml BPA-Free" as the title, the Handle Shopify would generate from that new title is stainless-steel-bottle-750ml-bpa-free. That is a new Handle. Shopify creates a new product.
2. Your original import used a different column for the Handle value.
If the original import used the supplier's SKU column as the Handle (a common approach when supplier titles are unstable), and the re-import maps the Handle differently, the values no longer match. The mapping that produced the original Handles must be consistent across every re-import from that supplier.
3. The supplier CSV has no Handle column at all.
Many supplier CSVs do not include a Shopify Handle column. When the Handle column is absent, Shopify generates Handles from product titles. If the original import went through a different tool, or through Shopify's native importer with a different column mapping, the Handles already in Shopify may follow a different generation logic than what the current import would produce.
4. Encoding or spacing differences.
Shopify's Handle generation removes non-ASCII characters, trims extra spaces, and lowercases everything. A supplier title with a special character (degree symbol, trademark symbol, or an accented character) that was present or absent in different versions of the catalogue can silently produce a different Handle.

Finding Duplicates Already Created
If a re-import has already created duplicates, the first step is identifying them in the catalogue.
In Shopify admin, go to Products and sort by Title (A-Z). Duplicate products from a CSV re-import have near-identical titles and will appear adjacent in a title-sorted list. Work through the list looking for pairs or groups with matching names.
A faster approach: export your current catalogue using Importier's Full Shopify CSV export preset, then open the exported file and sort the Title column. Duplicates surface more clearly in a spreadsheet where you can also compare the Handle, SKU, and Vendor columns to confirm which rows are duplicates versus intentionally similar products.
Once identified, duplicates can be removed in bulk: select all duplicates in the Shopify admin Products list and use the bulk action to delete. Before deleting, confirm the products have no active inventory or pending orders, and that the version you are keeping has the correct pricing and stock levels.
Preventing Duplicates on the Next Re-Import
The prevention is consistent Handle management across every import from a given supplier.
Option 1: Export current Handles before re-importing.
Before importing a supplier update, use Importier's export to get a CSV of your current products with their Handles. Open both the export and the supplier's update file in a spreadsheet. Add a Handle column to the supplier file by matching on SKU or another stable identifier. Import the updated file with the correct Handles already in place. Shopify matches on Handle and updates rather than creates.
Option 2: Use a stable identifier (SKU) as the Handle anchor.
If the supplier provides a stable SKU or product code across all catalogue versions, that code is more reliable as a Handle source than the product title. Handles in Shopify must be URL-safe (lowercase, hyphens only, no spaces), so a supplier SKU of "BT-750-SS" becomes bt-750-ss. If the SKU is stable across catalogue versions, so are the Handles derived from it.

How Importier's Import Preview Catches This Before It Happens
Importier's 14-step import wizard includes a preview step that shows the products as they will appear in Shopify after the import runs. For a re-import, the preview distinguishes between products that will update an existing record and products that will create a new record.
When the preview shows a large number of new products being created where you expected updates, that is the signal that Handle values are not matching. At that point, no changes have been made to Shopify. You can exit the wizard, investigate the Handle discrepancy, correct the source file, and re-upload before committing anything.
The import preview is the check that the native Shopify importer does not provide. Shopify's built-in importer runs the import and shows you the result. There is no point at which you can review what will happen and choose not to proceed.
For CSV column mapping, Importier's auto-mapper identifies likely Handle source columns from the supplier file: if the file has a SKU, Product ID, or Handle column, the mapper surfaces it for your review. Confirming the correct column for Handle before the import runs is the step that prevents the mismatch before it reaches the preview.
Undoing a Re-Import That Created Duplicates
If duplicates have already been created from a recent import, Importier's Import Undo removes the batch.
Every import run through Importier is logged in the Import History panel with the date, time, filename, and number of products created or updated. Open Import History, find the batch that created the duplicates, and run the Undo operation. Importier removes all products created in that batch from Shopify, leaving the original products untouched.
Import Undo operates on the products created by that specific batch. It does not affect your existing products, and it does not affect orders placed before the undo runs. The operation restores the pre-import state without requiring you to manually identify and delete each duplicate product.

Importier retains up to 20 import snapshots. For merchants who re-import frequently, the most recent batches are always available for undo. The original import file is downloadable for 60 days after the batch, which also provides a reference file for investigating the Handle discrepancy.
Setting Up a Safe Re-Import Workflow
For catalogues that receive regular supplier updates, a consistent workflow prevents duplicate products from accumulating.
The reliable sequence for a supplier CSV update:
- Export current products using Importier's Full Shopify CSV preset. This file contains your current Handles.
- Match the supplier's update file to your export by SKU or product code. Add the Handle values from your export to the supplier update file.
- Upload the updated file through Importier's 14-step wizard. Confirm the Handle column maps to the Handle field during column mapping.
- Review the import preview. Verify that the count of new products matches what you expect (only genuinely new products from the supplier, not updates to existing ones).
- Confirm the import.

For merchants using Importier's Scheduled Imports, the same column mapping configuration is stored with the schedule. A supplier CSV uploaded to the same schedule consistently applies the same Handle mapping without requiring manual review of the column configuration each time.
The duplicate products problem is almost entirely preventable once Handle management is built into the import workflow. The main variable is consistency: the same Handle values must arrive with every import from the same supplier, whether by carrying over the correct values in the source file or by confirming the mapping in the import wizard before the import runs.
Try Importier free at importier.app
Related Articles
Set up your first import in under five minutes.
Importier brings products into Shopify with AI descriptions, category metafields, and data enrichment on every run. Import 10 products for free.


