How to Fix Shopify CSV Import Errors (Every Common One, Explained)
Last updated: August 2026
If Shopify rejected your product CSV, you're not alone — it happens to nearly every store that's grown past a handful of products. The good news: almost every import error comes down to a handful of root causes, and each one has a specific, mechanical fix. This guide walks through all of them.
Prefer to skip the manual work? You can upload your file and get it fixed automatically — but if you'd rather understand and fix it yourself, everything you need is below.
"We couldn't import your product CSV"
This is Shopify's catch-all message when the file itself is malformed before it even gets to checking individual products. Three things cause it almost every time:
Wrong delimiter. Shopify expects a standard comma-separated CSV. If your file was exported from certain European locales of Excel, or from some ERP/inventory systems, it may use semicolons instead. Open the file in a plain text editor (not Excel) and check — if you see semicolons between fields instead of commas, that's your problem.
Header row mismatch. Shopify matches columns by exact header name (Handle, Title, Variant Price, etc.). If a column was renamed, has extra spaces, or is missing entirely, the whole file can be rejected rather than just that column.
Quote-wrapping corruption. Some export tools wrap every field in quotes and don't escape internal quotes correctly, which merges every column in a row into one field. If your file looks fine in Excel but fails on import, open it in a plain text editor (Notepad, TextEdit, or VS Code) — if entire rows look like one giant quoted blob instead of clean comma-separated values, this is why.
Manual fix: Open the raw file in a text editor and check the delimiter and header row match Shopify's own template exactly (Shopify admin → Products → Import → Download sample CSV is the safest baseline to compare against).
"Handle can't be blank"
The Handle column is the one field every single row needs — Shopify uses it to know which rows belong to the same product. It has to be lowercase, use hyphens instead of spaces, and contain no special characters.
This error means at least one row has an empty Handle cell. Common causes:
- A blank row got included at the bottom of the sheet (easy to miss — scroll to the very end)
- A formula or paste operation left a Handle cell empty
- Variant rows (extra rows for the same product's different sizes/colors) are missing the Handle that should repeat down from the parent row
Manual fix: Sort your sheet by the Handle column — any row that floats to the top or bottom with a blank Handle is your culprit. Every row for a product, including its variant rows and any extra image rows, needs the exact same Handle value.
The variant "Default Title" already exists
This one trips people up more than any other, because the file often looks correct. It happens two main ways:
Extra image rows aren't formatted as image rows. If a product has multiple photos, Shopify wants one extra row per additional image — but that row should have only the Handle, Image Src, and Image Position filled in. If Option Name, Option Value, or Variant fields are also filled on that row, Shopify reads it as a second variant with no distinguishing option — which collides with the first "Default Title" variant that's created automatically for single-variant products.
A duplicate Handle appears more than once with conflicting variant data. If the same Handle shows up in two separate places in the file (not as sequential variant rows), Shopify may try to create the "Default Title" variant twice for what it thinks are two different update instructions for the same product.
Manual fix: For any row that's just adding an extra photo, clear out every column except Handle, Image Src, and Image Position. For duplicate handles, remove "Default Title" (or the option values) from every variant row after the first one for that product — only the first row should establish the variant.
Import shows "success" but no products appear
This is the most frustrating version, because Shopify doesn't always throw a visible error — it just quietly skips rows it can't process. A few known causes:
Title missing on the first row of a product. Variant rows after the first can leave Title blank, but the very first row for a given Handle must have a Title. If it doesn't, Shopify may drop the entire product silently.
Handle mismatch on an update. If you're updating existing products and the Handle in your file doesn't exactly match an existing product's Handle, Shopify may treat it as a new product attempt that fails validation elsewhere — or skip it.
Daily variant limit. Non-Shopify Plus stores are capped at roughly 1,000 new variants created via CSV within a 24-hour window. If you're bulk-uploading a large catalog, hitting this cap can cause the tail end of your file to fail without a dramatic error on the summary screen.
Manual fix: Check that every product's first row has both Handle and Title filled in. If you're updating existing products, export your current catalog first and confirm your Handles match exactly. If your file has more than ~1,000 new variants, consider splitting it into batches and waiting 24 hours between uploads.
UTF-8 encoding error / garbled characters
If accented letters, curly quotes, or special characters (é, ñ, "smart quotes," em dashes) show up as strange symbol clusters after import, your file wasn't saved in UTF-8 encoding.
This happens almost exclusively when a CSV is saved from Excel using the default "CSV (Comma delimited)" format, which on Windows saves in a legacy Windows-1252 encoding instead of UTF-8. Shopify expects UTF-8.
Manual fix (Excel): Use File → Save As, and choose "CSV UTF-8 (Comma delimited)" specifically — not the plain "CSV (Comma delimited)" option. Older Excel versions may not have this option; if so, open the file in Google Sheets and use File → Download → Comma Separated Values (.csv), which exports as UTF-8 by default.
Manual fix (already-broken file): If you no longer have the original source and the garbled characters are already baked in, this is much harder to reverse cleanly by hand — you're essentially guessing at what the original character was meant to be.
"Variant Inventory Policy is not included in the list"
This is one of the most common — and most confusing — Shopify import errors, because the fix is stricter than it looks. The Variant Inventory Policy column controls whether customers can order a product when it's out of stock, and Shopify only accepts two exact values: deny (stop selling at zero) or continue (keep selling past zero).
The catch: it must be lowercase, with no extra spaces. A capital D in "Deny," a trailing space, or any other word ("yes," "no," "true") will fail the import.
Manual fix: Select the entire Variant Inventory Policy column and confirm every cell contains exactly deny or continue — lowercase, nothing else. If you're not tracking inventory at all, this column can be left blank, but if it has any value, it must be one of those two exact words.
"Image src is not valid" / products import with no images
Shopify fetches every image URL live during the import, making a real request to each Image Src link. If that link returns anything other than a working image, the product still imports — but with no photo. This is why you sometimes get a "successful" import where half your products are missing images.
Common causes:
- The URL is missing
http://orhttps://at the front - The link points to a login-protected or private location (Shopify can't access it)
- The URL uses a temporary/expiring link (common with some cloud storage and CDN links)
- The file isn't a supported type — Shopify accepts
.jpg,.jpeg,.png,.gif, and.webp
Manual fix: Open each image URL in a private/incognito browser window. If it doesn't show the image directly (or asks you to log in), Shopify can't use it. Replace it with a permanent, public, direct link to the image file.
"Too many variants" / variants missing after import
Shopify allows a maximum of 100 variants per product (across all option combinations). If a product's size/color/style combinations exceed 100, the extra variant rows are dropped silently — the import "succeeds" but some variants simply vanish, with no error on the summary screen.
This bites apparel and footwear catalogs most, where sizes × colors × styles multiply fast. A product with 5 sizes, 6 colors, and 4 styles is 120 combinations — 20 of which Shopify quietly discards.
Manual fix: Group your rows by Handle and count how many rows each product has. Any product over 100 rows will lose variants. Either remove combinations that don't actually exist as sellable products, or split the product into two separate listings (e.g., "Jacket — Sizes XS–M" and "Jacket — Sizes L–XXL") with distinct Handles.
Quick pre-import checklist
Before you upload, it's worth a fast pass through these:
- File saved as UTF-8, comma-delimited
- Header row matches Shopify's exact column names
- Every row has a Handle; every product's first row has a Title
- Every variant row's Handle matches its parent product exactly
- No stray blank rows at the end of the sheet
- Image-only rows have nothing filled in except Handle, Image Src, Image Position
- Variant Price is filled on every variant row
When it's faster to just fix it automatically
Working through all of this by hand in Excel is very doable for a 20-product file. It gets tedious fast once you're past a few hundred rows, or when the errors are the kind that don't show you exactly which row is the problem.
That's what fixmyimport.com does — upload your broken CSV, and it automatically fixes the encoding, delimiter, handle, and formatting issues covered above, flags the ones that need a human judgment call (like true duplicate products or genuinely broken image URLs), and gives you a plain-English report of exactly what changed. The report itself is free; downloading the fixed file is $7.
Frequently asked questions
Why does Shopify say "we couldn't import your product CSV" with no other detail?
This is always a structural problem with the file itself, not the product data — usually a wrong delimiter (semicolons instead of commas), a non-UTF-8 encoding, or a missing/renamed required column header. Open the file in a plain text editor and compare its first row against Shopify's official sample CSV.
Can I update existing products with a CSV without erasing their other data?
Yes, but carefully: any column present in your file overwrites the matching field on the existing product, and blank cells erase live data — they're not treated as "leave unchanged." To update only specific fields, include only those columns (plus Handle) in your file and remove all others.
Does Shopify have a CSV file size or row limit?
Shopify recommends keeping product CSVs under about 15 MB and importing in batches of around 1,000 products for reliability. Larger files can time out or import partially. Split big catalogs into smaller files and import them one at a time.
Why did my import succeed but some products are missing?
Most often: the first row of a product was missing a Title, an image URL failed to load, or you hit the ~1,000-new-variants-per-24-hours limit on a large upload. Check that every product's first row has both a Handle and a Title.
Is it safe to use an online tool to fix my CSV?
It depends on the tool. fixmyimport.com runs entirely in your browser — your product file never gets uploaded to any server, so your catalog data stays on your own computer.