← Back to Blog

The Complete Shopify CSV Import Template (Free Download)

Overhead view of person working on laptop with notebook and coffee

Every Shopify CSV import fails the first time. Usually the second time too. The template is confusing, the documentation skips critical details, and one wrong column silently breaks the whole upload.

I built a CSV template that actually works. It has every required column, 3 example products with realistic data, and properly formatted variant rows. Download it below, delete the example rows, and start adding your own products.

Free Shopify CSV Import Template
Ready-to-use CSV with all required columns, 3 example products, and properly formatted variant rows. Delete the examples and start filling in your data.

Why imports fail

Four reasons, in order of how often I see them:

Variant rows are wrong. Every size, color, or pack-size combination needs its own row. The Handle column ties variant rows to their parent product. If the Handle is blank or doesn't match exactly, Shopify creates a duplicate product instead of a variant. This is the cause of most failed imports.

Variant Inventory Tracker is missing. If you leave this column blank, Shopify ignores your inventory quantities entirely. Your products show up with zero stock. Set it to shopify on every row. It's not optional, and Shopify does not warn you when you leave it blank.

Wrong encoding. Excel on Windows saves CSVs as Windows-1252 by default. Shopify needs UTF-8. The symptom is garbled characters or a silent import failure. Build your file in Google Sheets, which exports UTF-8 automatically, or use "Save As > CSV UTF-8" in Excel.

Currency symbols in price columns. 29.99 works. $29.99 breaks the import.

The Handle column

The URL slug for your product. Lowercase, hyphens instead of spaces, no special characters. A product called "Classic Cotton Crew Tee" gets the handle classic-cotton-crew-tee.

This is the most important column in the file. The Handle is what connects variant rows to their parent product. Every row that shares the same Handle belongs to the same product.

Handle must be identical across variant rows

If the first row has classic-cotton-crew-tee and a variant row has Classic-Cotton-Crew-Tee, Shopify treats them as two different products. Lowercase everything. No trailing spaces.

The column everyone misses: Variant Inventory Tracker

Set this to shopify on every variant row. Every row.

If you leave it blank, Shopify does not track inventory for that variant. Your Variant Inventory Qty column gets ignored entirely. Products show up with zero stock, or as perpetually in-stock with no actual quantity tracking.

This column must say 'shopify'

Variant Inventory Tracker = "shopify" tells Shopify to manage stock levels for this variant. Without it, the Variant Inventory Qty value is thrown away during import. This is the single most common cause of "my quantities didn't import" issues.

I see this on a third to half of first CSV imports. The import succeeds with no error. The inventory is just gone.

Other columns that matter

Title: Only on the first row for each product. Variant rows leave it blank. Shopify pulls the title from the first row that shares the Handle.

Variant Grams: Always in grams, regardless of your store's weight display setting. 1 lb = 454 grams. Put 0.5 thinking it's half a pound and Shopify lists the product as half a gram.

Variant Price: A plain number. No currency symbol, no commas. 28.00 or 34.99.

Variant Inventory Policy: deny means customers cannot buy when out of stock. continue allows purchase at zero stock, useful for pre-orders.

Image Src: A public URL. Shopify downloads images during import. Local file paths don't work. Host images somewhere publicly accessible first.

Option1 Name / Option1 Value: If a product has no variants at all, set Option1 Name to "Title" and Option1 Value to "Default Title." This is Shopify's required convention for single-variant products. Leave it blank and the product imports broken.

For SEO fields: if SEO Title and SEO Description are blank, Shopify auto-generates them from the product title and description. That's fine for most products. Hand-write them for your top listings.

The variant row pattern

This is where most people get stuck. A product with 2 sizes and 2 colors needs 4 rows:

RowHandleTitleBodyOption1 NameOption1 ValueOption2 NameOption2 Value
1my-productMy Product<p>Description</p>SizeSmallColorRed
2my-productSizeSmallColorBlue
3my-productSizeLargeColorRed
4my-productSizeLargeColorBlue

Row 1 has all the product-level data. Rows 2-4 only have Handle, option values, and variant-specific fields like SKU, price, and inventory. Everything else is blank.

The Handle is identical on every row. That is what tells Shopify "these are variants of the same product."

Test with 2-3 products first

Do not import your entire catalog on the first try. Import 2-3 products, verify they look right in Shopify, then import the rest. It is much easier to fix a 3-row CSV than a 300-row one.


The template has all of this pre-built with realistic example data. Download it, study the pattern, delete the examples, and fill in your own products.

Free Shopify CSV Import Template
Ready-to-use CSV with all required columns, 3 example products, and properly formatted variant rows. Delete the examples and start filling in your data.

If you have a large catalog and formatting CSVs sounds like a bad time, you can send me what you have at flash@tryflash.ai. I handle the formatting, the upload, and verify every product in your store. First 3 jobs are free.

For a deeper dive into Shopify's CSV quirks, encoding issues, and Excel-specific gotchas, check out the complete guide to Shopify bulk product upload.


Frequently asked questions

What columns are required in a Shopify CSV import template? The minimum required columns are Handle and Title. In practice you also need Variant Price, Variant SKU, Variant Inventory Qty, and Variant Inventory Tracker (set to "shopify") for the import to behave correctly. Without Variant Inventory Tracker set to "shopify" on every row, Shopify silently ignores your inventory quantities — your products will show as in-stock but with no tracked quantity.

Why isn't my Shopify CSV import bringing in inventory quantities? The Variant Inventory Tracker column is almost certainly missing or not set to "shopify." This column must be present and set to exactly "shopify" (lowercase) on every variant row. Shopify doesn't throw an error when it's blank — it just silently discards your Variant Inventory Qty values. This is the single most common cause of successful imports that show zero stock.

How do I format variant rows in a Shopify CSV? Every variant gets its own row. All rows for the same product share the same Handle. The first row carries product-level fields: Title, Body (HTML), Vendor, Images, and so on. Subsequent variant rows leave those fields blank and include only the Handle, option values (Option1 Value, Option2 Value), and variant-level fields like SKU, price, and inventory. If any variant row has a blank Handle, Shopify treats it as a new separate product.

What should Option1 Name and Option1 Value be for a product with no variants? Set Option1 Name to "Title" and Option1 Value to "Default Title." This is Shopify's required convention for single-variant products. Leaving these blank on a product with no variations causes the import to create broken listings in some Shopify versions.

What file encoding does a Shopify CSV require? UTF-8. Excel on Windows saves CSV files as Windows-1252 by default, which corrupts accented characters, currency symbols, and special punctuation. Use Google Sheets (which always exports UTF-8) or use Excel's "Save As > CSV UTF-8 (Comma delimited)" option specifically. Regular "Save As > CSV" in Excel is not the same.

Can I update existing Shopify products by re-uploading a CSV? Yes. If a row's Handle matches an existing product in your store, Shopify updates that product rather than creating a duplicate. Only columns you fill in are updated — blank cells are left unchanged. This makes CSV imports useful for bulk edits: export your catalog, modify the columns you need, and re-import. If any Handle is changed accidentally, it creates a new product instead of updating the original.

Stop doing it yourself.

Send me the tedious stuff. Product uploads, data cleanup, catalog migrations. First 3 jobs are free.

Try Flash free