Importing WooCommerce variable products with a CSV
A variable product in a WooCommerce CSV is one parent row plus one row per variation. The parent lists every attribute value; each variation points to the parent by SKU and picks one value per attribute.
The structure
| Row | Type | Key fields |
|---|---|---|
| Parent | variable | SKU, Name, description, categories, images, and each attribute with all its values |
| Variation | variation | SKU, Parent (the parent’s SKU), Regular price, one value per attribute |
Type,SKU,Parent,Name,Published,Regular price,Attribute 1 name,Attribute 1 value(s),Attribute 1 visible,Attribute 1 global
variable,TEE-ORG,,Organic Tee,-1,,Size,"S, M, L",1,1
variation,TEE-ORG-S,TEE-ORG,,1,22.00,Size,S,,1
variation,TEE-ORG-M,TEE-ORG,,1,22.00,Size,M,,1
variation,TEE-ORG-L,TEE-ORG,,1,24.00,Size,L,,1Attribute columns in detail
Attribute 1 name: the attribute, such as Color or Size. Use the same name on the parent and its variations.Attribute 1 value(s): on the parent, every value separated by commas; on a variation, exactly one value. A value that contains a comma is written with a backslash:1\,5 L.Attribute 1 visible:1shows the attribute in the product’s additional information.Attribute 1 global:1uses (or creates) a global attribute under Products → Attributes, which you can use for filtering across products;0creates a custom attribute for this product only.Attribute 1 default(optional): the value preselected on the product page.
Add Attribute 2 … columns for a second attribute, and so on.
Rules that keep variations linked
- Give the parent a SKU, and reference it exactly in each variation’s
Parentcolumn. For an existing product you can useid:123instead. - Put the parent row above its variations.
- Every variation value must be one of the values listed on the parent for that attribute.
- Give each variation its own unique SKU.
- Put prices on the variations. The parent’s price is derived from them.
- Leave the variation
Nameempty; WooCommerce names variations from the parent and attributes.
Troubleshooting
| What you see | Likely cause |
|---|---|
| Variations appear as “Any Color” or aren’t linked | The variation’s attribute name or value doesn’t match the parent. |
| Variations are missing after import | Wrong or missing Parent SKU, or SKUs that already exist when “Update existing products” is off. |
| The product shows no price | Prices were put on the parent row instead of the variations. |
| Duplicate attributes in Products → Attributes | The same attribute imported as global with slightly different names (Colour, Color). |
| Variations are out of stock | “In stock?” set to 0 or stock managed with a quantity of 0. |
Generate the file from a supplier list
Supplier price lists with one row per color or size map directly onto this structure. Sheet2Store’s WooCommerce export groups rows by a model or parent column, writes a variable parent with Color and Size attributes followed by one variation row per variant, links them with a parent SKU, applies your markup and sets products to draft (Published = -1). A product with a single row becomes a simple product. See also the WooCommerce CSV template.
Frequently asked questions
Do I need to create attributes before importing?
No. With Attribute global set to 1, the importer uses a matching global attribute or creates it.
Can I import the parent and variations in one file?
Yes, as long as the parent row comes first and each variation references the parent’s SKU.
Why use -1 in the Published column?
It imports the parent product as a draft so you can review it. Variations are enabled with their parent.
Convert a supplier file to a WooCommerce CSV
Upload a supplier PDF, Excel or CSV price list and download a CSV for WooCommerce’s built-in product importer, with variable products, variations and your selling prices. Preview five rows free.