In short. Import a variable parent row with all attribute options and linked variation rows with their individual values, then check the resulting product.
Definition: A WooCommerce variable product offers options such as sizes, with individual variations carrying their own product data. A comma-separated values (CSV) import represents this structure with a
variableparent row and a separatevariationrow for each variation, linked through theParentcolumn.
Key facts
- WooCommerce's CSV importer guide, consulted for this entry on 17 October 2026, specifies all attribute options on the parent and the matching value on each child row.
- WooCommerce's CSV schema accepts a parent SKU, a product identifier, or a product ID prefixed with
id:. - WooCommerce's variable product documentation requires a price for each variation; variations without prices are absent from the storefront.
What belongs in the parent and child rows?
The CSV schema defines Type, SKU, Name and the numbered attribute columns. Name is required. The following illustration adapts the importer guide's Size example, adding names and the schema's example regular price. These are sample values to replace before import.
Type,SKU,Name,Parent,Regular price,Attribute 1 name,Attribute 1 value(s),Attribute 1 visible,Attribute 1 global
variable,tshirt,T-shirt,,,Size,"S, M",1,0
variation,tshirt-s,T-shirt S,tshirt,24.99,Size,S,1,0
variation,tshirt-m,T-shirt M,tshirt,24.99,Size,M,1,0
The parent lists S, M in a quoted field because commas separate CSV fields. Each child supplies its own value and references tshirt in Parent. When referencing an existing numeric product ID, the corresponding syntax is id:100.
The schema specifies Attribute 1 global as a Boolean flag: 0 selects a local product attribute and 1 selects a global attribute. Attribute 1 visible controls attribute visibility. Additional attributes use additional numbered columns. WooCommerce sets “Used for variations” automatically during import.
How does the import run?
WooCommerce's importer guide recommends a backup and a small staging test. The file is saved as UTF-8 and uploaded under Products > All Products > Import. The workflow proceeds through Column mapping to Run the importer.
New-product imports leave Update existing products unselected. Each child has a unique SKU and an empty new variation ID. Attribute names and nonempty values match the parent's options exactly, including spelling and capitalization.
For an existing simple product, WooCommerce documents conversion in a single update import starting with version 11.1, provided the parent precedes its children. Earlier versions, or files without that ordering, require separate imports: update the parent into a variable product with attributes, then import the child rows with Update existing products unselected.
What should be checked after import?
The variable product documentation describes the Variations tab, where each variation has an Enabled setting and a required Regular Price. These fields and the product's storefront option selectors are checked after import.
Customers must select every required option before adding the product to the cart. After selection, the storefront displays the matching variation's price, image and availability. A successful file upload therefore needs a storefront check of the intended combinations.
Related terms
- How do I create a variable product in WooCommerce?
- How do I update existing WooCommerce products with a CSV?
- How do I map CSV columns in WooCommerce's product importer?
FAQ
Can I put several attribute values in a variation row?
WooCommerce's CSV schema uses the first value when you provide several. Supply the specific value for that variation.
What does an empty variation attribute value mean?
The importer guide defines an empty variation attribute value as any value for that attribute. Fill it when you intend a specific option.
Sources
- WooCommerce, "Product CSV Importer and Exporter", updated 9 October 2026
- WooCommerce, "Product CSV Import Schema", edited 4 May 2026
- WooCommerce, "Variable Products", updated 9 October 2026
Check how a page reads to answer engines. Open the GEO score analyzer