What the messages mean
Shopify’s documentation lists three related symptoms, and all three point at the first row of your file:
- “Invalid CSV header: missing headers” (sometimes followed by a column name, such as Title). Shopify expects the first line of the file to contain its column headers, and it also asks you to check for extra white space at the end of that first line.
- “Network error: Unexpected token < in JSON at position 0”. According to Shopify, this means your column titles don’t match its template headers exactly. Header names are case-sensitive, and Shopify’s own example is that you should use
Handleinstead ofhandle. - A “Choose column headings” window. Shopify shows this when your headers are incorrect. You can pick the correct header from each drop-down to continue the import.
Shopify Community threads about this error are common, and the usual answers there are the same checks listed below. Examples: one thread and another.
Checks to run, in order
- Compare with Shopify’s sample file. Download the sample product CSV from Shopify’s CSV documentation and put its header row next to yours. Copying your data under Shopify’s header row, without editing the headers, is a simple way to rule out typos.
- Check capitalization.
handle,HANDLEandHandleare different headers to Shopify. - Look for extra spaces before or after a header, and at the end of the first line. A header such as
Variant Price(with a trailing space) can look right in a spreadsheet and still not match. - Make sure the header row is the first line. A title line, a blank line or a note above the headers means Shopify reads the wrong line as the header.
- Check which columns are required. When you create new products, only Title is required, and the handle column is also required if you add variants. When you update products, Handle (URL handle) and Title are required.
- Remove columns Shopify doesn’t know. Shopify’s documentation says the Collection column is the only extra column you can add without breaking the format.
- Don’t mix naming styles for the same field. Shopify’s current documentation uses names such as URL handle and Price, while older templates use Handle and Variant Price. Shopify keeps backward compatibility with the older names, but one file should use one style per field.
- Edit in Google Sheets. In Community threads on this error, Shopify staff have recommended editing CSVs in Google Sheets with Chrome, because other spreadsheet programs can change the file’s format.
Common mismatches and their fixes
| What’s in your file | Why Shopify doesn’t match it | Fix |
|---|---|---|
handle, title | Header names are case-sensitive | Rename to Handle, Title (or the current names) |
Variant Price | Trailing space after the name | Delete the space |
body_html, product_name | Names from another platform or export | Map them to Shopify’s names, such as Body (HTML) and Title |
| A supplier or WooCommerce export | It isn’t in Shopify’s column format at all | Convert it first (see the supplier guide below) |
Both Barcode and Barcodes | Shopify says a file with both columns fails to import | Keep only one of the two |
| A title line above the headers | The first line must be the header row | Delete the extra lines |
When your file came from a supplier
A supplier price list or another platform’s export usually has completely different headers, so the error is expected: nothing in the file matches Shopify’s template. The columns have to be converted or mapped to Shopify’s names before the import can work. Our supplier conversion guide covers this, and Shopify’s “Choose column headings” window can also help map a small number of mismatched headers by hand.
What ShopiClean does with headers
Disclosure: ShopiClean is our own product. Everything in this guide can be done by hand in a spreadsheet; the tool simply automates the checks. The scan and the on-screen 5-row preview are free, and downloading the repaired file needs a 7-Day Pass ($9).
What it does:
- Corrects capitalization and stray spaces on headers it recognizes as Shopify columns. In our test,
handlebecameHandle,TitlebecameTitleandVariant PricebecameVariant Price. - Works with both the current column names (such as
URL handle,PriceandInventory quantity) and the older ones. - Reports columns it doesn’t recognize, so they don’t get dropped silently. In our test,
body_htmlwas listed as a non-standard column that Shopify may ignore or reject.
What it does not do:
- It doesn’t rename arbitrary headers from other systems. For those, use the Supplier Converter, which maps common supplier column names to Shopify’s.
- It can’t see what Shopify’s importer will say about your store, so keep Shopify’s sample file as the reference.
Sources and how this guide was checked
The Shopify behaviors described above were checked against the Shopify Help Center pages below on 19 October 2026. Shopify can change how imports work, so if something here differs from what you see, trust Shopify’s documentation.
- Shopify Help Center: Solutions to common product CSV import problems
- Shopify Help Center: Importing products with a CSV file
- Shopify Help Center: Using CSV files to import and export products
- Shopify Community: “Invalid CSV Header: Missing headers: Title”
- Shopify Community: “Why does a CSV import error occur in my product upload?”