If you need to add a few hundred variants, the product editor gets slow fast. A spreadsheet is quicker: you build every size, color and material combination in rows, upload one file, and Shopify creates the variants in the background.
Get the template
Don't build the CSV from scratch. Go to Products → Export, pick one product (or all products) and export as a plain CSV file. You get a file with every column header your store currently expects, in the right order and with the right spelling.
Shopify has renamed some headers over the years, so a template copied from an old blog post can fail on import. An export from your own store is always current. Keep the header row, delete the sample rows you don't need, and save it as UTF-8 so accented characters in titles survive.
Key columns
A product CSV has dozens of columns, but only a handful decide how variants are created. These are the ones to get right:
- Handle: the product's URL slug. Every row with the same handle belongs to the same product.
- Title: the product name. Fill it on the first row of a product; variant rows can leave it blank.
- Option1 Name / Option1 Value: for example Size / Small.
- Option2 Name / Option2 Value: for example Color / Red.
- Option3 Name / Option3 Value: for example Material / Cotton.
- Variant SKU: one unique code per row. A clear SKU naming convention makes the sheet far easier to check before you upload.
- Variant Price and Variant Compare At Price.
- Variant Inventory Qty: starting stock at your default location.
- Variant Weight and Variant Weight Unit: used for shipping rates.
Header names can differ slightly in newer exports. Match whatever your own export file shows.
One row per variant
Each row is one variant. Rows that share a handle become one product, and the option values on each row define which combination that variant is. The option names (Size, Color) only need to appear on the first row of the product, but filling them on every row does no harm and makes sorting easier.
Images work the same way. Put a public image URL in Image Src and Shopify downloads it. Put a URL in Variant Image to attach a specific photo to that variant, so the red rows show the red shirt. Our per-color variant image guide covers how that looks on the product page.
Worked example: a t-shirt with 3 sizes and 2 colors
Say you sell a cotton tee in Small, Medium and Large, in Black and White, with the Large priced $2 higher. That's 6 variants, so 6 rows:
| Handle | Option1 Value (Size) | Option2 Value (Color) | Variant SKU | Variant Price |
|---|---|---|---|---|
| cotton-tee | Small | Black | TEE-S-BLK | 24.00 |
| cotton-tee | Small | White | TEE-S-WHT | 24.00 |
| cotton-tee | Medium | Black | TEE-M-BLK | 24.00 |
| cotton-tee | Medium | White | TEE-M-WHT | 24.00 |
| cotton-tee | Large | Black | TEE-L-BLK | 26.00 |
| cotton-tee | Large | White | TEE-L-WHT | 26.00 |
Fill Title, Option1 Name (Size) and Option2 Name (Color) on the first row. Then go to Products → Import, upload the file and check the preview Shopify shows before you confirm. The import runs in the background and Shopify emails you when it finishes.
Step-by-step import
- Export one existing product to get a current template.
- Build your rows in Google Sheets or Excel, one row per variant.
- Check SKUs are unique and every row has a handle.
- Save as CSV (UTF-8). Shopify's importer accepts files up to 15 MB.
- Go to Products → Import and upload. Tick "Overwrite products with matching handles" only if you mean to update existing products.
- Review the preview, start the import and wait for the confirmation email.
- Open one or two products and spot-check prices, stock and images.
Common errors
- Missing handle on a row. Shopify can't tell which product the row belongs to, so the variant is skipped or lands on the wrong product.
- Two rows with identical option values. Shopify rejects the duplicate combination. Our duplicate variant error fix explains how to find the clash.
- Weight unit mismatch. Entering 200 with the unit set to kg instead of g gives a 200 kg t-shirt and very wrong shipping rates.
- Compare-at price lower than price. Shopify won't show a sale badge, and the strikethrough price looks broken.
- Spreadsheet auto-formatting. Excel can turn SKUs like 0012 into 12 or sizes like 10-12 into dates. Format those columns as text before you paste.
When not to use variants at all
CSV import makes it easy to create huge variant grids, and Shopify now allows far more per product (see our note on the 2,048 variant limit). That doesn't mean every choice should be a variant.
Variants are for things you stock or price at the SKU level: size, color, material. A customer's name, a gift message or an uploaded photo should not be a variant, because you'd be inventing SKUs for text nobody has typed yet. Those belong in personalization fields that save to the order as line-item properties. Our guide to custom options without creating variants shows how to split the two. Print It My Way handles that side with text fields, dropdowns and live preview, and the Free plan covers your first product.
Frequently asked questions
How to import Shopify variants via CSV?
Go to Products → Import and upload your CSV. Each row is one variant, and rows that share the same handle become one product. Check the preview before you confirm the import.
What columns are required in variant CSV?
At minimum you need Handle, Title, the option name and value columns, and usually Variant SKU, Variant Price and Variant Inventory Qty. Export a product from your own store first so the headers match what your store expects.
Can CSV import add 500+ variants at once?
Yes. One file can hold many products and hundreds of variant rows, as long as each product stays within Shopify's per-product variant limit and the file is under 15 MB.
How to add variant images via CSV?
Put a public image URL in the Variant Image column on each variant row. Shopify downloads the image during import and attaches it to that variant.
Common CSV import error causes?
The usual causes are missing handles, duplicate option combinations, wrong weight units and spreadsheet software reformatting SKUs or sizes. A compare-at price lower than the price won't fail the import, but it won't show a sale either.
How long does CSV import take?
A file with a few hundred variants usually finishes within minutes. Shopify runs the import in the background and sends an email when it's done.
Can I update existing variants via CSV?
Yes. Tick "Overwrite products with matching handles" and Shopify updates products whose handles match rows in your file. Leave it unticked if you only want to add new products.
Can I delete variants via CSV?
No, a CSV import can add and update but not delete. Remove variants in the product editor, with bulk actions, or through the Admin API.
Related reading
Sources & further reading
Primary sources referenced in this article. We link to official platform documentation and standards bodies rather than secondary summaries so you can verify claims directly.
- Shopify Help Center: Product variants
- Shopify.dev: Product variant limits
- Shopify Help Center: Line item properties (customization)
Try it free on Shopify
Print It My Way's permanent Free plan includes live preview, custom options, and Cart Transform pricing.
Install Print It My Way