Shopify CSV Import Errors, Decoded — What Each Message Means and How to Fix It
Almost every failed Shopify product CSV import comes down to one of four causes, and the error message tells you which one you hit: “Invalid CSV header: missing headers” means Shopify could not recognise your column row — usually a semicolon delimiter or the wrong encoding, not a genuinely absent column; “The variant ‘Default Title’ already exists” means two rows share a Handle with no option values to tell their variants apart; and a file over 15 MB is refused on upload. The fourth failure is quieter: the import succeeds, but barcodes arrive as 8.85909E+11, SKUs lose their leading zeros and é becomes é — damage Excel did before you uploaded. This page decodes each error in turn and gives you the exact fix.
Which Shopify CSV import error do you have?
Find your message or symptom in the first column, then jump to the matching section for the full decode. Two of these are structural problems Shopify reports loudly; the other two fail silently or before the import even starts.
| Error or symptom | What it really means | Fix |
|---|---|---|
Invalid CSV header: missing headers | Shopify couldn’t split row 1 into recognised column names — wrong delimiter, wrong encoding, or Title truly absent | Re-save as comma-delimited CSV UTF-8 with a Title column |
Validation failed: The variant 'Default Title' already exists | Two or more rows share a Handle with no option values to distinguish them | Add unique Option1 Values, or delete the duplicate rows |
| Upload refused — file too large | The CSV is over Shopify’s 15 MB import cap | Split it into parts, each keeping the header row |
| Import succeeds, data arrives broken | Excel rewrote barcodes, SKUs or accents before upload | Repair the file, re-import with overwrite ticked |
What does “Invalid CSV header: missing headers” actually mean?
It means Shopify read your first row and could not find the column names it needs — which is not the same as those columns being absent. The importer takes row 1, splits it on commas, and matches each piece against its documented header names. Note that Shopify has renamed those headers: today’s template uses Title, URL handle, Description, SKU and Barcode, while the older Handle, Body (HTML), Variant SKU and Variant Barcode names still import — Shopify keeps backward compatibility with them. If the split fails, every header comes up “missing” at once, even though you can see them plainly in the file. The three usual culprits:
- Semicolons instead of commas. Excel on European regional settings saves CSV with
;separators, so Shopify sees one giant header calledHandle;Title;Body (HTML)…and matches nothing. Our guide to why Excel saves CSV with semicolons explains the locale rule; the delimiter converter rewrites the file with commas in seconds. - The wrong encoding. Saving from Excel as “Unicode Text” produces a tab-separated UTF-16 file — two strikes in one. Shopify expects UTF-8, and a UTF-16 header row doesn’t decode into anything recognisable. Re-save as CSV UTF-8 (Comma delimited), or see how to change a CSV’s encoding to UTF-8.
- Row 1 isn’t your header. A blank first line, or a decorative title like “Products — July” someone typed above the real headers, becomes the header row as far as Shopify is concerned. Delete everything above the actual column names.
And when a column genuinely is missing: for creating products, Title is the only header Shopify strictly requires — it generates the URL handle from the title if you leave that out, though Shopify notes the handle column becomes required as soon as a product has variants. For updating existing products, Shopify documents Title and the URL handle as the two required columns, because the handle is the key it matches rows on. Shopify’s reference also warns that Collection is the only extra column you can add without breaking the format, so don’t rely on a mistyped header simply being ignored — check the spelling of every variant column before you upload, or the data quietly never lands.
Why does Shopify say “The variant ‘Default Title’ already exists”?
Because two rows in your file claim to be the same product’s only variant. A Shopify product with no options still has exactly one variant behind the scenes, and its name is literally Default Title. In CSV terms, that’s a row whose Option1 Name and Option1 Value are blank — Shopify’s docs note that leaving those columns out is what creates a new default variant. When the importer meets a second row with the same Handle and still no distinguishing option value, it tries to create the product’s single hidden variant a second time — and fails with this error.
Three ways files end up in that state:
- Accidental duplicate rows, usually after merging several exports or copy-pasting in a spreadsheet. Deduplicate before importing — our guide to removing duplicate rows from a CSV shows a safe way that doesn’t reorder anything.
- Variant rows with the option columns left empty. If a product comes in Small, Medium and Large, the first row of the group must set
Option1 NametoSize, and every row of the group needs its ownOption1 Value(S,M,L). Leave those blank and each row looks like another Default Title. - Handle collisions you can’t see. Every product needs its own handle, and Shopify’s own error list includes
Ignored line #-## because handle `example` already exists. Normalise your handles to lowercase before importing rather than trusting near-identical spellings likeBlue-Mugandblue-mugto stay distinct.
The fix follows from the cause: give real variants real option values, delete true duplicates, and rename colliding handles. One row per single-variant product, one row per variant otherwise — that is the entire contract.
How do you get around Shopify’s 15 MB CSV limit?
Shopify documents a hard cap on product CSV imports: your product CSV can’t exceed 15 MB. A larger file errors on upload or times out — Shopify’s own advice is to split it into smaller files and upload each one.
The cap is per file, not per catalogue, so the workaround is simple: split the CSV into parts that each stay under the limit and import them one after another. The only rule that matters is that every part must carry the header row, because each part is a complete, standalone import. Keep all rows belonging to one handle in the same part, so a product’s variants aren’t torn across two files.
Split a big product CSV in your browser
Our CSV splitter cuts the file by row count or into a set number of parts, copies the header into every part and hands you the lot as one zip. Being honest about our own limits too: it accepts files up to 60 MB and warns above 12 MB, because the whole split runs in a single browser tab. Bigger than that? Export from your platform in chunks — by collection or vendor — instead.
Open the CSV splitter →Aim for parts around 10 MB rather than 14.9 — descriptions in the Description column (Body (HTML) in older templates) make Shopify CSVs bulky, and a little headroom saves a re-split. When importing part two onwards of an update, tick “Overwrite products with matching handles” so repeated handles update rather than error.
Why did the import succeed but the data arrive broken?
Because Shopify faithfully imported a file that was already damaged. This is the failure mode with no error message. Somewhere between exporting the CSV and uploading it, the file was opened in Excel — and Excel rewrites data on open and save. The three signatures, in the order you’ll notice them:
- Barcodes as scientific notation.
Variant Barcodevalues like885909457123become8.85909E+11, which Shopify stores verbatim — and every channel that validates GTINs starts bouncing your products. The mechanics are in why Excel converts numbers to scientific notation. - SKUs missing their leading zeros.
0071589ships as71589, and inventory lookups quietly stop matching. See why leading zeros disappear from CSV files. - Mojibake in titles and descriptions.
Caféarrives asCaféon your live storefront — the UTF-8 file was read as ANSI along the way. Full decode in fixing garbled characters in a Shopify CSV.
Repair all three at once, then re-import
The Shopify CSV repair tool scans your file, reports how many cells are affected in each category, and fixes them together — entirely on your device, so your catalogue never leaves your browser. It won’t flag a value as Excel damage on shape alone — 2E5 can be a genuine part number — so you confirm which columns get repaired. Leave Excel-safe export ticked so barcodes can’t re-collapse, keep the UTF-8 BOM so accents survive, and re-import with overwrite on.
8.85909E+11 restores the digits the notation still encodes, but nothing can regenerate the ones Excel discarded. Re-export those specific rows from your source system; a GTIN’s check digit will usually expose any barcode that was padded rather than recovered.How do you stop these errors before the next import?
Five habits cover essentially every failure on this page:
- Keep an untouched copy of every export. Repairs work on what survives; the original is the only perfect backup.
- Never double-click a CSV into Excel. Open a blank workbook and use Data → From Text/CSV with the
SKUandBarcodecolumns (Variant SKU/Variant Barcodein older exports) typed as Text — or edit in Google Sheets, which stays UTF-8 throughout. - Save as CSV UTF-8 (Comma delimited), never plain CSV on a semicolon locale and never “Unicode Text”.
- Sanity-check the structure before uploading: real headers on row 1, one row per variant, unique option values within each handle, file under 15 MB.
- Import updates with overwrite ticked, and preview the first rows Shopify shows before confirming.
Frequently asked questions
What headers does a Shopify product CSV actually require?
For creating new products, Title is the only column Shopify strictly requires — the URL handle is generated from the title if you leave it out, and becomes required once a product has variants. For updating existing products, Shopify documents Title and the URL handle as the two required columns, because the handle is the key it matches on. Shopify also states that Collection is the only extra column you can add without breaking the format, so check every header’s spelling rather than assuming a typo like Varient SKU will simply be ignored.
Why does Shopify say headers are missing when I can see them in the file?
Because Shopify could not split the first row into separate column names. A semicolon-delimited file (common with European Excel settings) turns the whole header row into one unrecognised name, and a tab-delimited or UTF-16 file does the same. Re-save the file as comma-delimited CSV UTF-8 and the very same headers are suddenly found.
How do I fix “The variant ‘Default Title’ already exists”?
Your CSV has two or more rows with the same Handle and no option values to tell them apart, so Shopify tries to create the product’s single hidden Default Title variant twice. If the rows are real variants, put an Option1 Name such as Size on the first row of the group and a unique Option1 Value on every row. If they are accidental duplicates, delete the extra rows and re-import.
How do I import a Shopify CSV bigger than 15 MB?
Split it into parts that are each under 15 MB and import them one after another — each part must carry the header row so it imports on its own. Our free splitter does exactly this, repeats the header in every part and hands you a zip; it accepts files up to 60 MB and warns above 12 MB, because the whole split runs in a single browser tab.
Why did my import succeed but barcodes show as 8.85909E+11?
Shopify imported exactly what the file contained — Excel had already rewritten the barcodes as scientific notation before you uploaded. Repair the file, then re-import it with the overwrite option ticked. One honest caveat: Excel keeps at most 15 significant digits, so any digits it truncated past that and saved are gone for good, and those rows need a fresh export from your source system.
Sources: the column requirements and the Default Title variant model come from Shopify’s product CSV reference; the 15 MB cap and the overwrite option from Importing products with a CSV file; the error strings from Solutions to common product CSV import problems — except the Default Title message, which Shopify has not published in its error list and which we quote as merchants report it. The silent-damage patterns are the same Excel behaviours covered throughout the CSVUndo guides.