WooCommerce Variable Product CSV Builder
Turn attributes and values into a parent row and every variation, with defaults, SKUs, prices and stock you can fill in bulk or row by row.
Your details
6 variations: edit any cell, or untick a combination you don't sell
| Sell | Color | Size | SKU | Regular | Sale | Stock |
|---|---|---|---|---|---|---|
| Black | S | |||||
| Black | M | |||||
| Black | L | |||||
| White | S | |||||
| White | M | |||||
| White | L |
Import-ready WooCommerce CSV
Type,SKU,Name,Published,In stock?,Stock,Sale price,Regular price,Categories,Images,Parent,Attribute 1 name,Attribute 1 value(s),Attribute 1 visible,Attribute 1 global,Attribute 1 default,Attribute 2 name,Attribute 2 value(s),Attribute 2 visible,Attribute 2 global,Attribute 2 default
variable,TEE,Organic Cotton Tee,-1,1,,,,Clothing > T-shirts,,,Color,"Black, White",1,0,Black,Size,"S, M, L",1,0,M
variation,TEE-BLA-S,"Organic Cotton Tee - Black, S",1,1,10,,28.00,,,TEE,Color,Black,,0,,Size,S,,0,
variation,TEE-BLA-M,"Organic Cotton Tee - Black, M",1,1,10,,28.00,,,TEE,Color,Black,,0,,Size,M,,0,
variation,TEE-BLA-L,"Organic Cotton Tee - Black, L",1,1,10,,30.00,,,TEE,Color,Black,,0,,Size,L,,0,
variation,TEE-WHI-S,"Organic Cotton Tee - White, S",1,1,10,,28.00,,,TEE,Color,White,,0,,Size,S,,0,
variation,TEE-WHI-M,"Organic Cotton Tee - White, M",1,1,10,,28.00,,,TEE,Color,White,,0,,Size,M,,0,
variation,TEE-WHI-L,"Organic Cotton Tee - White, L",1,1,10,,30.00,,,TEE,Color,White,,0,,Size,L,,0,1 parent row and 6 variations. Import at Products → All Products → Import. The parent row comes first so the file also works with “Update existing products” on WooCommerce 11.1 and later.
How the parent and variation rows fit together
A variable product in a WooCommerce CSV is one row with Type variable plus one row per variation with Type variation. Each variation names its parent in the Parent column (the parent's SKU, or id:123) and picks one value for each attribute.
| Row | Type | SKU | Parent | Attribute 1 value(s) | Attribute 1 default |
|---|---|---|---|---|---|
| Parent | variable | TEE | Black, White | Black | |
| Variation | variation | TEE-BLA-S | TEE | Black | |
| Variation | variation | TEE-WHI-S | TEE | White |
The builder fills every combination for you. The Fill every variation fields set the price, sale price and stock on all rows at once, and the table lets you change any single variation or untick combinations you don't sell.
Default settings
- Color
- Black, White (default Black)
- Size
- S, M, L (default M)
- Regular price
- 28.00
- Price changes by value
- L +2
- Stock per variation
- 10
7 rows: the TEE parent and 6 variations. The two size L variations cost 30.00, the other four 28.00, and each has 10 in stock.
Importing it
- 01
Download the CSV
Use Download above the output, or copy it into a spreadsheet.
- 02
Import
Go to Products → All Products → Import, choose the file and run the importer. Leave the column mapping as it is.
- 03
Check the product
Open it under Products and look at the Variations tab: every variation should show its price and stock, and the default should be selected on the product page.
Adding variations to a product that already exists? Tick Update existing products. Since WooCommerce 11.1 the importer creates new variations in an update, as long as the parent row comes first, each variation has a SKU, and its values are already on the parent. The builder puts the parent first for that reason.
Common problems
- Values that don't match the parent exactly. For product-level attributes the variation value must match the parent's list exactly, capitals included, or the variation won't be selectable.
- Global or local attributes. Turn on “Attributes already exist” only if they're set up under Products → Attributes. Otherwise WooCommerce creates product-level attributes, which is fine for most stores.
- Duplicate SKUs. Short codes can clash (“Black” and “Blue” both start BL…). Switch to full-value SKUs if the builder warns you.
- No price, no sale. A variation without a regular price can't be added to the cart.
- For Shopify, use the product variant generator, which writes Shopify's CSV format.
Questions people ask
What goes in the Parent column?
The parent product's SKU, or its ID with the id: prefix, such as id:123. Without the prefix WooCommerce treats the value as a SKU.
How do I set the default variation?
Put the value in the parent row's Attribute N default column. The builder fills it from the default fields and leaves it out if the value isn't in the list.
Can a variation match any size or color?
Yes. Leave that attribute's value blank on the variation row and WooCommerce treats it as “any”.
Do I need prices on the parent row?
No. Shoppers see the range of the variation prices, so put prices on the variation rows only.
How many variations can I import?
WooCommerce's docs don't give a row limit. Large imports depend on your server's memory, upload and time limits, so split a big file into batches and test a small one first.
Related tools
Last reviewed 30 September 2026.
Sources: WooCommerce: Product CSV Importer and Exporter · WooCommerce: Product CSV Import Schema · WooCommerce sample_products.csv · WooCommerce product CSV exporter (column names) · WooCommerce product CSV importer (parsing and matching rules) · WooCommerce 11.2.0 pre-release notes
