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.
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.
| Error | What it means | Fix |
|---|---|---|
| Handle is invalid | The Handle has spaces, capitals, or symbols. Handles allow only lowercase letters, numbers and hyphens. | Blue Widget! → blue-widget |
| Missing / wrong price | Prices 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 title | The 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 boolean | Columns like Published, Gift Card, Taxable must be TRUE/FALSE (or true/false). yes/1 won't do. | yes → TRUE |
| Invalid option value | Inventory 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 variant | Two 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/decimals | The grams column wants a whole number, no text. 1.5kg is invalid. | Convert to grams as an integer: 1500. |
| Encoding / line breaks | The 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 blank | Image 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 download | Shopify 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 exists | Several 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 1 | The 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 \n | A 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: Title | The header row is damaged — usually a BOM or a bad encoding from Excel. | Re-save through Google Sheets as UTF-8 CSV. More → |
The three error families that account for most failed imports, each with the exact message, the cause, and the fix:
Src cannot be blank, failed to download, share links, missing additional images. The biggest single cause of failed product imports.The variant 'Default Title' already exists, missing option values, duplicate variants, inventory/fulfillment mismatches.Unquoted fields do not allow \r or \n, stray quotes, Missing headers: Title, and why Excel keeps breaking your file.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.