Fix Shopify CSV Import Errors — Every Common Cause
Shopify CSV imports fail for a small set of reasons: wrong encoding, bad column names, unclean price data, or misformatted variants. This guide covers every common error with the exact fix for each.
Why does Shopify say "There was an error with the CSV file"?
This is Shopify's generic CSV parsing error. It means the file itself is malformed before Shopify even reads the product data.
Cause 1: Wrong encoding
Shopify requires UTF-8 encoding. Files saved from Excel on Windows default to ANSI or Windows-1252, which breaks on special characters (accents, currency symbols, smart quotes).
Fix: Open the file in a text editor (Notepad++, VS Code, or Sublime Text). Look at the encoding in the bottom status bar. If it's not UTF-8, use "Save As" and select UTF-8 encoding.
Cause 2: Wrong line endings
Some systems save CSV files with \r (old Mac) line endings instead of \r\n (Windows) or \n (Unix). Shopify can choke on bare \r endings.
Fix: Open in a text editor that shows line endings (VS Code: bottom-right, click "CRLF" or "LF"). Convert to LF or CRLF.
Cause 3: Unescaped quotes in fields
If a product description contains double quotes and the CSV doesn't escape them properly, the parser loses track of field boundaries.
Fix: In a properly formatted CSV, double quotes inside a field must be escaped as two double quotes: "This is a ""quoted"" word". Most spreadsheet apps handle this when you "Save As CSV" — the problem usually comes from manual editing or script-generated files.
Why are my imported products showing wrong data?
The import "succeeds" but products are mangled. These are the sneaky errors.
Why are prices $0.00 after import?
The Variant Price field contains non-numeric characters.
Bad: $24.99, £24.99, 24,99 (European decimal), 1,299.00 (thousand separator)
Good: 24.99, 1299.00
Fix: Strip all currency symbols, spaces, and thousand separators. Use only a period as the decimal separator. Or use Csvio, which normalizes prices automatically (removes $, £, €, converts 24,99 → 24.99).
Why does inventory show 0 after import?
Two possible causes:
-
Wrong column name. Shopify expects
Variant Inventory Qty, notInventory,Stock,Qty, orQuantity. The name must match exactly. -
Inventory tracking disabled. If
Variant Inventory Trackeris blank or the product's tracking was previously turned off, the quantity value is ignored.
Fix: Use the exact column name. Set Variant Inventory Tracker to shopify to enable tracking.
Why are descriptions plain text instead of HTML?
The column is called Body (HTML). If your description is plain text like Soft cotton tee, it works but renders as a single block with no formatting.
Fix: Wrap in basic HTML: <p>Soft cotton tee.</p> or <ul><li>100% cotton</li><li>Machine washable</li></ul>. You don't need a full HTML document — just inline tags.
Why are tags duplicated or wrong?
Tags are comma-separated in a single field: cotton, summer, sale. If your CSV has separate columns for each tag category, you need to merge them into one Tags column.
Fix: Concatenate tag columns into a single comma-separated field before importing.
Why are my variants not grouped correctly?
Variants cause more import failures than everything else combined.
Why are variants created as separate products?
Every variant of the same product must share the same Handle. The Handle is a URL-friendly slug like cotton-t-shirt.
Common mistake: Leaving Handle blank on variant rows. If Handle is empty, Shopify creates a new product for each row.
Fix:
| Handle | Title | Option1 Name | Option1 Value | Variant Price |
|---|---|---|---|---|
| cotton-tee | Cotton T-Shirt | Size | S | 24.99 |
| cotton-tee | Size | M | 24.99 | |
| cotton-tee | Size | L | 26.99 |
Note: Title is blank on variant rows 2 and 3. Handle is the same on all rows.
"What if a product has too many variants?"
Shopify allows up to 2,048 variants per product (the limit was 100 until 2024). If your product has 20 colors × 20 sizes × 6 lengths, that's 2,400 combinations — over the limit.
Fix: Split into separate products ("Cotton Tee — Warm Colors" and "Cotton Tee — Cool Colors"), or remove option combinations that don't exist.
"Products can have at most 3 options"
Shopify supports up to 3 option types (e.g., Size, Color, Material). If your file has 4+ option columns, the import fails.
Fix: Merge the least important options into tags or metafields instead of product options.
Why are images not importing?
Why are images not appearing after import?
The Image Src column must contain a publicly accessible HTTPS URL. Shopify downloads the image from that URL during import.
Common mistakes:
- Local file paths (
C:\images\tee.jpg) — Shopify can't access your computer - HTTP URLs (without S) — some of these work, but HTTPS is more reliable
- Password-protected or CDN-gated URLs — Shopify's importer can't authenticate
- URLs that redirect — some redirects work, many don't
Fix: Host images on a public server (Google Drive shared links don't always work — use a proper image host or your supplier's public CDN).
Why are images showing on the wrong product?
Each image row must have the same Handle as its product. The Image Position column sets the display order (1 = featured image).
Can I skip CSV formatting entirely?
Every error above comes from the same root cause: Shopify's importer expects one exact format, and your data isn't in that format.
If you're spending more than 5 minutes reformatting a supplier file, consider using Csvio instead. It reads your file as-is — no column renaming, no price stripping, no variant restructuring. The AI handles the mapping and cleans up data formatting automatically.
The free plan includes 3 imports per month — enough to test whether it works for your supplier's file format.