Shopify product CSV import errors, explained

Shopify's importer is picky and its error messages often point at the wrong line. Here are the errors merchants actually hit, what each one means, and how to fix it — based on Shopify's published CSV rules.

Why the importer fails on "valid-looking" files

The product CSV has strict rules: specific accepted values for certain columns, a bare-number format for prices, and a structure where the first row of each product carries the full details and later rows (variants) only repeat the handle. Break any of these and the import either fails or silently does the wrong thing. Worse, Excel and Google Sheets quietly add currency symbols, smart quotes, and stray line breaks that the importer chokes on.

The common errors and their fixes

ErrorWhat it meansFix
Handle is invalidThe Handle has spaces, capitals, or symbols. Handles allow only lowercase letters, numbers and hyphens.Blue Widget!blue-widget
Missing / wrong pricePrices must be a bare number. $1,299.00 fails because of the symbol and comma.Write 1299.00. Same for Compare-at price and Cost per item.
First row has no titleThe first row of a product (a new handle) must include the Title. Only variant rows skip it.Put the title on the product's first row.
Invalid booleanColumns like Published, Gift Card, Taxable must be TRUE/FALSE (or true/false). yes/1 won't do.yesTRUE
Invalid option valueInventory Policy must be deny or continue; Weight Unit must be g/kg/lb/oz; Status must be active/draft/archived.Use the exact lowercase value.
Duplicate variantTwo rows under one handle share the same option combination — Shopify rejects duplicate variants.Make each variant's options unique, or remove the duplicate row.
Weight has units/decimalsThe grams column wants a whole number, no text. 1.5kg is invalid.Convert to grams as an integer: 1500.
Encoding / line breaksThe file must be UTF-8 with LF line endings. A BOM or a description with an unescaped line break can derail the parse.Save as UTF-8 CSV; keep multi-line HTML inside quotes.
Src cannot be blankImage Alt Text or Image Position is filled in on a row where Image Src is empty.Add the image URL, or clear the alt text and position. More →
failed to downloadShopify fetched your image URL and didn't get an image — usually a Google Drive/Dropbox share page, a local path, or a slow supplier host.Host the file so the URL returns the image itself. More →
The variant 'Default Title' already existsSeveral rows share a handle but have no option values, so Shopify sees the same variant twice.Unique handles, or distinct Option1 values. More →
Inventory management is 1, so fulfillment service must also be 1The tracker column holds a number/boolean, or stock was typed into it instead of the quantity column.shopify or blank; quantity goes in Variant Inventory Qty. More →
Unquoted fields do not allow \r or \nA blank row, or a line break in an unquoted cell. The line number counts physical lines, not products.Delete empty rows; quote multi-line cells. More →
Invalid CSV Header: Missing headers: TitleThe header row is damaged — usually a BOM or a bad encoding from Excel.Re-save through Google Sheets as UTF-8 CSV. More →

Deep dives

The three error families that account for most failed imports, each with the exact message, the cause, and the fix:

The reliable workflow

  1. Export or build your product CSV.
  2. Check it before importing — catch every error with its real row number, not Shopify's guess.
  3. Fix the structural issues (missing titles, duplicate variants) by hand; let a tool normalize the mechanical ones (handles, prices, TRUE/FALSE, units).
  4. Import the corrected file with confidence.

Check your file now

Our free browser tool runs every check above on your CSV — nothing is uploaded, it all runs on your device — lists each issue with the real row and a suggested fix, and hands you a corrected, import-ready file.

Open CSV Preflight for Shopify →

Drop your product CSV, see every error and warning free, download the fixed file. Name your price — free if you need it.