How do I fix Shopify product CSV import errors (encoding, prices, handles)? (2026)

Updated · 6 min read

Most Shopify product import errors come from three things a spreadsheet does silently: it saves the file in a non-UTF-8 encoding or with curly quotes ("Illegal quoting", "Missing or stray quote", accents shown as é), it formats numbers for your locale (12,90, $15.00, 1,299.00) when Shopify wants a plain number with a dot, and it lets handles contain spaces, capitals or accents when Shopify accepts only letters, numbers and dashes. Re-save the file as CSV UTF-8, comma-separated, write prices as 12.90, and make every handle lowercase with dashes. The tables below map each Shopify error message to its cause and fix.

Shopify's import error messages and their fixes

From Shopify's common import issues page:

Error shown by ShopifyCauseFix
Illegal quoting on line …A character that isn't UTF-8, or a missing or stray quoteSave as CSV UTF-8; replace curly quotes with straight quotes
Missing or stray quote on line …Spreadsheet inserted "smart" quotes, or a cell like 12" frame isn't quotedUse straight quotes; wrap the cell in quotes and double the inner quote ("12"" frame")
Invalid CSV header: missing headersFirst row doesn't match the template; often trailing spacesCorrect the header row; header names are case-sensitive
Ignored line … because handle x already existsTwo separate products use the same handleGive each product its own handle; keep a product's rows together
Ignored line … because it did not contain product dataFirst row of a handle has no TitlePut the Title on the first row of each handle
Validation failed: options are not uniqueTwo variants of a handle have the same option valuesMake every option combination unique
Validation failed: price can't be blankEmpty price on a variant rowFill the price
Inventory quantity is not a number / can't be blankText or decimals in the quantity, or empty quantity with a tracker setUse a whole number; clear the tracker if you don't track stock
Inventory policy is not included in the listValue other than deny or continueUse deny or continue
Fulfillment service can't be blankEmpty fulfillment serviceUse manual
Not a valid product categoryCategory text doesn't match the Standard Product Taxonomy exactlyCopy the full breadcrumb or the category ID
Validation failed: getaddrinfo … / error while trying to download the imageImage URL wrong or not publicUse a direct, public image URL
Line is invalid (No details)An existing option value moved to another option positionImport once with a temporary option name, then again with the final one

Encoding: accents, symbols and the BOM

Shopify's import guide says "UTF-8 encoding is required to prevent unexpected characters from appearing in your content", and the column guide asks for "UTF-8 format using LF-style linefeeds" (Importing products, Using CSV files).

What you seeWhat happenedFix
é, è, ’ instead of é, è, ’UTF-8 text was opened as Windows-1252 and saved againRepair the text, or go back to the original file and open it as UTF-8
? or � instead of accentsThe file was saved in a non-UTF-8 encoding and the characters were lostRe-type them, or re-export from the source as UTF-8
Whole rows in the first column, separated by ;Excel in a European locale saved with semicolonsSave as "CSV UTF-8 (Comma delimited)" or change the list separator
First header not recognisedA byte order mark (BOM) is stuck to the first headerSave without BOM

In Excel choose File › Save As › CSV UTF-8 (Comma delimited), not "CSV (Comma delimited)" and not "Unicode Text". Google Sheets exports UTF-8 by default.

Prices, weights and quantities

The column guide describes Price, Compare-at price and Cost per item as numbers "without the currency symbol", Weight value (grams) as the number "without the unit of measurement or decimals", and Inventory quantity as an integer (CSV columns).

In the fileWrite insteadWhy
12,9012.90Decimal separator must be a dot
$15.00, 15 €, EUR 1515.00No currency symbol or code
1,299.00 or 1 299,001299.00No thousands separator
950g in the grams column950Number only
0.9 in the grams column, unit kg900The column is always grams; the unit column only changes how the weight is displayed
5.0 in quantity5Whole number
7.61234E+12 in SKU or barcodethe original codeExcel turned the code into a number and dropped digits; format the column as Text before pasting

Compare-at price must be higher than Price for the reduction to show.

Handles

The handle identifies the product and builds its URL. Shopify's rule: letters, numbers and dashes, no spaces; by default it is the title in lowercase with dashes (CSV columns).

Handle in the fileProblemNormalised
Trail Backpack 28LSpaces and capitalstrail-backpack-28l
thé-vert-senchaAccented letterthe-vert-sencha
tee/blackSymboltee-black
mugLeading spacemug

If you change the handle of a product that already exists, the import no longer matches it and creates a second product. Normalise handles on new products; for existing ones, use the handle from your export.

A faster check

Running each table above by hand on a few thousand rows takes time. The checker at Shopify product CSV checker reads the CSV or XLSX in your browser, reports each of these problems with its row and column, and offers ticked fixes: UTF-8 conversion and accent repair, BOM removal, price and number formats, handle normalisation, header spelling, default option values and duplicate image rows. The report is shown in full on the page; the fixed file is the paid part.

FAQ

Why does Shopify show "Choose column headings" when I import? Your header names don't match the template. Shopify then asks you to map them by hand. Correct the header row, respecting capitals and spaces, and the window doesn't appear.

Is the file size limited? Yes. "Your product CSV can't exceed 15 MB." Split larger files and keep the header row in each part, with all rows of a handle in the same part.

Can I import an .xlsx file directly? No. The importer takes CSV. Save the sheet as CSV UTF-8 first.

Why are my images missing after the import? Either the URLs are not public direct links (a Google Drive or Dropbox share page is not an image file), or the file was sorted and image rows were separated from their product. Shopify also advises avoiding image files with _thumb, _small or _medium in their names.

Shopify product CSV checker

  • CSV
  • Excel
  • CSV
  • Excel

Report on screen · fixed CSV $4.99

Check a product CSV