Getting Started

Importing Variable Products

Published · Last updated

WooCommerce variable products have a parent product (type: variable) and one or more child variations (type: variation). Super Speedy Imports can import them four different ways depending on how your CSV is structured. This guide covers each method and the exact settings you need for it to work.

Variable products need the paid edition of Super Speedy Imports. Lite imports simple products.

Pick your method

Open your import, scroll to Product Data → Variable Products, and use the Import contains: selector to tell SSI what your CSV looks like:

The matcher section and the Import contains selector set to Parent and Child rows
OptionUse when
Parent & Child rowsEvery parent and its variations are in the same CSV. This is the classic format – the one most WooCommerce exports produce. It also handles plain simple products, so it is the right choice whenever your file is a normal product export (with or without variations).
Only variations with grouping columnYour CSV only has variation rows. A column (for example Style or Parent_SKU) groups rows that belong under the same parent. SSI creates the parents for you.
Only variations (parents already in db)The parents already exist in WooCommerce (from a prior import or entered manually). This CSV only carries the variation rows, referencing those parents.

The fields that appear below the selector change based on what you pick.

Upgrading an older import: an import saved with the retired Simple/parents (no variations) option is migrated to Parent & Child rows automatically. Parent & Child rows handles simple products the same way.

Method 1 – Parent and child rows in one file (the normal way)

CSV layout

Every parent has one row, and every variation has one row. Parent rows have an empty parent-reference column; variation rows fill it in with the parent’s SKU.

SKU,Name,Type,Description,Regular_Price,Color,Size,Parent_SKU
SHIRT,Branded Shirt,variable,A cool shirt,,"Red, Blue","Small, Medium, Large",
SHIRT-RED-S,Branded Shirt Red Small,variation,Red small,19.99,Red,Small,SHIRT
SHIRT-RED-M,Branded Shirt Red Medium,variation,Red medium,19.99,Red,Medium,SHIRT
SHIRT-BLU-S,Branded Shirt Blue Small,variation,Blue small,19.99,Blue,Small,SHIRT
HAT,Simple Hat,simple,A hat,9.99,,,

Notes:

  • The Type column is informational – SSI uses Parent_SKU to decide what’s a variation. A row with a non-empty Parent_SKU becomes a variation; everything else is a parent or simple product.
  • Parent rows can carry the union of variation attribute values ("Red, Blue", "Small, Medium, Large") – WooCommerce uses those to list which options exist on the product page.

What to configure

Under Product Data:

  1. Main → map Product Title, Full Description, Short description, Regular price, SKU to your CSV columns as usual.
  2. Variable Products subsection:
    • Import contains: Parent & Child rows.
    • Parent reference (on variation rows): select the CSV column that holds the parent’s SKU (in the example above, Parent_SKU). SSI uses this to match each variation row to its parent row in the same CSV. By default it is matched against the parent row’s unique item identifier (its SKU); if your rows are identified by one field but linked by another, use Parent is matched by (on parent rows) to point the linkage at a different column on the parent.
Parent is matched by and Parent reference on variation rows fields

Under Taxonomies for each attribute that varies between the variations (Color, Size, etc.):

  1. Map the taxonomy’s source column to the CSV column.
  2. Tick Used for variations on it. Without this, WooCommerce won’t treat the attribute as variable and the variations won’t appear on the product page. Leave non-variation taxonomies (e.g. Product categories) with Used for variations unticked.
Attribute rows with the Used for variations checkbox ticked

That’s it. Categories, tags, prices, stock and images are configured exactly like simple products.

Re-running the import

SSI matches rows to existing products by SKU, so running the import again updates the parent and its variations in place – no duplicates.

Method 2 – Variations only, with a grouping column

Use this when you have a CSV that’s effectively a list of variations, with a column (often called Style, Parent_SKU, Model, or similar) that tells you which variations belong together.

CSV layout

SKU,Name,Description,Regular_Price,Color,Size,Style,Parent_Name
SHIRT-RED-S,Branded Shirt Red Small,Red small,19.99,Red,Small,SHIRT,Branded Shirt
SHIRT-RED-M,Branded Shirt Red Medium,Red medium,19.99,Red,Medium,SHIRT,Branded Shirt
SHIRT-BLU-S,Branded Shirt Blue Small,Blue small,19.99,Blue,Small,SHIRT,Branded Shirt
JACKET-BLK-M,Warm Jacket Black Medium,Black medium,49.99,Black,Medium,JACKET,Warm Jacket
JACKET-BLK-L,Warm Jacket Black Large,Black large,49.99,Black,Large,JACKET,Warm Jacket

SSI reads the grouping column, creates one parent product per unique value, and links the variation rows under it. Each parent it creates gets a URL slug made from its title, numbered when another product already uses that slug, so its product page opens like any other.

What to configure

  1. Variable Products subsection:
    • Import contains: Only variations with grouping column.
    • Parent grouping: the CSV column (or a PHP function) that groups variations – Style in the example above.
    • Auto-created parent title: the CSV column whose value should become the parent product’s title – Parent_Name above. If you leave this blank, the parent title is set to the grouping value itself (so Branded Shirt would become SHIRT, which is usually not what you want).
    • Auto-created parent SKU: leave blank if your parents don’t need a SKU. See the composite-SKU note below.
  2. Taxonomies – same as Method 1: map Color/Size etc. to their CSV columns and set Used for variations on each one.
The Parent grouping field for the grouping-column option

Each of the three Parent grouping / title / SKU fields can be switched from CSV Field to PHP Function with the type dropdown next to it. That’s useful when there’s no dedicated grouping column – for example, you can derive a style code from the SKU:

return function($data, $h) {
    // "JC012 JBK M" → "JC012"
    return strtok($data[$h['SKU']], ' ');
};

When Auto-created parent SKU is blank

SSI has to uniquely identify each row on re-imports. If the parent has no SKU, it can’t match on SKU alone, so SSI switches to a composite identifier of the form {grouping}|{row identifier}:

  • Synthesised parent: SHIRT|
  • Each variation: SHIRT|SHIRT-RED-S

This is stored as postmeta _ssi_unique_item_id on every row, and SSI uses that key for re-import matching. You won’t see it in the admin UI, but it means re-runs of this import are idempotent – existing variations are updated in place rather than duplicated.

If you do want parents to have SKUs, point Auto-created parent SKU at a column whose value is shared across all rows in the same group (for example Style, so parent SHIRT gets SKU SHIRT). In that case the | composite isn’t used and matching uses _sku as normal.

Method 3 – Simple products, or parent shells only

This is a plain import – no variation logic at all: only simple products, or only the parent shells you’ll attach variations to in a separate run (using Method 4).

Parent & Child rows handles this: a file with no variation rows is imported as-is.

What to configure

  • Import contains: Parent & Child rows.
  • Nothing else variation-specific. Map the Main fields, Taxonomies, Media, etc. as you would for any import.

If a product is going to be a variable parent, set its Type column to variable and include the attribute columns (Color, Size) listing the union of values its future variations will cover – WooCommerce needs those on the parent so the front-end shows the right dropdowns.

Method 4 – Variations only, parents already in the database

Use this when the parent products are already in WooCommerce (imported previously, or created by hand) and the CSV you’re about to run contains only variation rows.

CSV layout

Just the variation rows, with a column that names the parent:

SKU,Name,Description,Regular_Price,Color,Size,Parent_SKU
SHIRT-RED-S,Branded Shirt Red Small,Red small,19.99,Red,Small,SHIRT
SHIRT-RED-M,Branded Shirt Red Medium,Red medium,19.99,Red,Medium,SHIRT
SHIRT-BLU-S,Branded Shirt Blue Small,Blue small,19.99,Blue,Small,SHIRT
SHIRT-BLU-L,Branded Shirt Blue Large,Blue large,21.99,Blue,Large,SHIRT

What to configure

  1. Variable Products subsection:
    • Import contains: Only variations (parents already in db).
    • Parent reference (on variation rows): the CSV column that matches the parent’s SKU – Parent_SKU above. SSI looks each variation’s value up in wp_postmeta._sku to find the existing parent post ID.
  2. Taxonomies: Color, Size etc. with Used for variations ticked on each, same as the other methods.
The Parent reference on variation rows field for the existing-parents option

When SSI runs, it looks up each unique parent value in wp_postmeta, finds the parent by its SKU, and links the variation rows to it. A parent created by hand in WooCommerce is found the same way. The parent keeps its title, description, short description, slug, images and categories – only the variations are added/updated.

First-time workflow

If you’re setting this up for the first time, the usual sequence is:

  1. Import parents with Method 3 (a parent-only file on Parent & Child rows). Set Type = variable on those rows and include the attribute columns.
  2. Import variations with Method 4 (this method), referencing the parent SKU.

You can of course run both in one file with Method 1 – Method 4 is for cases where parents come from one data source and variations from another.

Default variation

Once your variations are imported, WooCommerce can show a “default” combination (pre-selected when a customer lands on the product page). SSI picks the first variation row it encounters per parent as the default. If you want a specific combination to be the default, put that row first in your CSV.

Common pitfalls

  • Variations showing as separate simple products. Used for variations isn’t ticked on one or more attributes. Tick it on every attribute that varies. Select Is Taxonomy on each attribute row as well; SSI creates a missing global attribute and its terms during the run.
  • Variations duplicated on re-import. Your SKU column isn’t stable between runs, or (Method 2) you changed Auto-created parent SKU between runs – that changes which matching strategy SSI uses. Pick one and stick with it.
  • Parent product has no attribute dropdowns on the product page. The parent row doesn’t have the union of variation attribute values. For Method 1, set "Red, Blue" / "Small, Medium, Large" style values on the parent row. For Method 2, SSI copies them from the first variation automatically, so this shouldn’t happen – but if the first variation has gaps, so will the parent.
  • Worried Method 4 will overwrite the parent? It doesn’t: for every post field the file maps, SSI carries the parent’s own stored value through the import, so the parent’s title, description, short description, images and categories stay as they are.

Written for Super Speedy Imports 3.40.0.

Comments

▲
▼
1/1