Shopify Bulk Product Import — CSV Template, Variants, Errors
To bulk import products into Shopify, you either format a CSV to match Shopify's exact template, or use an app that accepts your file as-is. This guide covers both methods, plus the variant formatting and errors you'll hit along the way.
How do I use Shopify's built-in CSV importer?
Shopify has a free CSV importer built into the admin at Products > Import.
What columns does the Shopify CSV template need?
Shopify expects a CSV file with specific column names. The key columns are:
| Column | Required | Example |
|---|---|---|
| Title | Yes | Cotton T-Shirt |
| Body (HTML) | No | <p>Soft cotton tee</p> |
| Vendor | No | Acme Apparel |
| Type | No | T-Shirts |
| Tags | No | cotton, summer |
| Variant Price | No | 24.99 |
| Variant SKU | No | TEE-BLK-M |
| Variant Inventory Qty | No | 50 |
| Image Src | No | https://example.com/tee.jpg |
The full template has over 20 columns. Every column name must match exactly — Variant Price, not Price or variant_price.
How to use it
- Go to Products > Import in Shopify Admin
- Upload your CSV file
- Check "Overwrite existing products that have the same handle" if you're updating
- Click Upload and continue
- Review the preview and click Import
Limitations
- Only accepts CSV (not Excel or PDF)
- Column names must match exactly — no mapping
- Variants must be pre-structured (one row per variant, grouped by Handle)
- No data cleaning (currency symbols, non-standard booleans, etc. cause errors)
- Large files can time out on slower connections
This method works well when you already have data in Shopify's exact format — for example, if you exported from another Shopify store.
What if my file doesn't match Shopify's CSV template?
When your data isn't in Shopify's template format — which is most of the time with supplier files — an import app handles the translation.
Using Csvio
Csvio reads your supplier file as-is and uses AI to map columns to Shopify fields.
- Install from the App Store — Csvio on Shopify
- Upload your file — Excel, CSV, or PDF. No reformatting needed.
- Review the mapping — the AI maps columns like "Trade Price" → Price, "Item Code" → SKU
- Import — products are pushed directly into Shopify Admin
For repeat imports from the same supplier, the mapping is saved. Subsequent uploads skip the mapping step entirely.
How do I format variants for Shopify bulk import?
Variants are the most common source of import errors. Here's how Shopify expects them:
What format does Shopify need for variants?
Each variant gets its own row. All variants of the same product share the same Handle. Only the first row has the product-level data (Title, Body, Vendor). Subsequent rows have only variant-level data:
| Handle | Title | Option1 Name | Option1 Value | Variant Price | Variant SKU |
|---|---|---|---|---|---|
| cotton-tee | Cotton T-Shirt | Size | S | 24.99 | TEE-S |
| cotton-tee | Size | M | 24.99 | TEE-M | |
| cotton-tee | Size | L | 26.99 | TEE-L |
Common variant formats in supplier files
Suppliers rarely structure variants this way. Common patterns:
All sizes in one cell: S,M,L,XL in a single column. This needs to be exploded into separate rows.
One row per variant: Already close to Shopify's format, but columns are named differently and the Handle grouping is missing.
Size columns: Separate columns for each size (QTY_S, QTY_M, QTY_L) where the value is inventory quantity.
Csvio detects all three patterns and handles the conversion automatically.
Why did my Shopify bulk import fail?
"Invalid CSV file"
Your file likely isn't UTF-8 encoded. Open it in a text editor (not Excel), re-save as UTF-8, and try again. Or use an app like Csvio that handles encoding automatically.
Products created without variants
The Handle column is wrong or missing. All variant rows for the same product must have the same Handle value. If Handles don't match, Shopify creates separate single-variant products.
Prices show as $0.00
The price column contains non-numeric characters — currency symbols ($, £, €), thousand separators (,), or spaces. Remove them before importing. Csvio strips these automatically.
Inventory not updating
Make sure you're using Variant Inventory Qty (not Inventory or Stock). Also check that inventory tracking is enabled for the product in Shopify.
Images not importing
Image URLs must be publicly accessible HTTPS URLs. Local file paths (C:\images\tee.jpg) don't work. The image server must not require authentication.
Duplicate products
If you're updating existing products, enable "Overwrite existing products that have the same handle" during import. Without this, Shopify creates duplicates instead of updating.
Which import method should I use?
| Scenario | Best method |
|---|---|
| Data already in Shopify CSV format | Shopify's built-in importer |
| Supplier Excel/CSV with non-standard columns | Csvio |
| PDF supplier catalog | Csvio (Pro plan) |
| Weekly supplier file updates | Csvio (saved mappings) |
| Migrating from WooCommerce/Magento | Matrixify |
| Updating metafields or non-product resources | Matrixify |
Getting started
If you receive product data from suppliers as Excel or CSV files, the fastest way to get them into Shopify is to install Csvio and upload your file. The free plan includes 3 imports per month with up to 100 products — enough to test whether it works for your supplier's format.