Guide + converter
Shopify CSV import, without the guesswork.
Shopify’s importer is strict about column names and forgiving about almost nothing else. This page explains the fields that matter, then lets you convert a supplier file and download a valid one — in the browser.
Convert your file first
Or paste CSV text
Load a supplier CSV above, or use the example button.
- Handle generated from the title; duplicates get a number suffix.
- Prices stripped of currency symbols and rounded to two decimals.
- Extra image URLs become additional image rows on the same handle.
- Plain-text descriptions become safe HTML paragraphs.
Upload the file in Shopify under Products → Import. Import a small batch first and check the result.
The format
Columns that carry the product.
You do not need every column. These are the ones that decide whether the import works and the product is sellable.
| Column | Required | What it does | Common mistake |
|---|---|---|---|
| Handle | Yes, to group rows | The URL slug and the key that ties variants and images to one product. | Using a handle that already exists; Shopify may update that product instead of creating one. |
| Title | Yes, on the first row | The product name shown in the admin and on the storefront. | Repeating the title on every variant row with conflicting text. |
| Body (HTML) | No | The description. Plain text is allowed; HTML gives you paragraphs and lists. | Pasting unescaped HTML with stray quotes that break the CSV row. |
| Variant Price | Effectively yes | The selling price, as a number with a dot decimal. | Leaving a currency symbol or a comma decimal in the cell. |
| Variant Inventory Qty | No, but recommended | Stock count for the variant. | A decimal or a unit suffix; Shopify expects a whole number. |
| Image Src | No, but recommended | A public http(s) URL. Additional rows with the same handle add more images. | A local path or a page URL instead of a direct image file. |
| Option1 Name / Value | Only for variants | Defines the variant axis, such as Size / Medium. | Using a different option name on rows that share a handle. |
The import
Five steps in Shopify.
- In Shopify admin, open Products and choose Import.
- Select the CSV you downloaded above. Shopify previews the first rows before committing anything.
- Choose whether to overwrite products with matching handles. For a first import, leave it off.
- Run the import and open the result summary. Shopify lists every row it skipped and why.
- Open two or three imported products and check price, image, inventory and description on the storefront.
Troubleshooting
Why an import gets rejected.
“Handle has already been taken”
Another product already uses that handle. Change the source title so the slug changes, or edit the Handle cell to a unique value. Do not reuse a handle for a different product.
“Price is invalid”
Remove currency symbols, spaces and thousands separators. Use a dot decimal: 24.90, not €24,90. The converter above does this automatically.
Images do not appear
The URL must point to the image file itself and be publicly reachable. Google Drive share links, supplier product pages and local paths will not work. Open the URL in a private window to confirm it loads without a login.
Variants split into separate products
Rows only group when they share the exact same Handle. Check for trailing spaces, capitalisation differences and duplicated rows that each carry a different title.
The description shows raw HTML
Either the HTML is malformed or the cell was not quoted correctly. The converter’s “Descriptions already contain HTML” option keeps existing markup; otherwise plain text is converted into safe paragraphs.
Next
After the import.
A valid file gets products into the admin. These tools help with the part buyers actually read.