How to Format a WooCommerce Product CSV (The Complete Guide)

WooCommerce's built-in CSV importer is powerful, but the format is different from every other platform. Columns have specific names, variable products need parent/child rows, and one wrong value in the "Type" column can turn your entire catalog into simple products with no variants.

This guide covers the format WooCommerce actually expects, column by column.

WooCommerce CSV vs. Shopify CSV

If you're coming from Shopify or another platform, the first thing to know is that WooCommerce uses completely different column names. Shopify uses "Handle" — WooCommerce uses "SKU." Shopify uses "Body (HTML)" — WooCommerce uses "Description." Shopify uses "Variant Price" — WooCommerce uses "Regular price."

You cannot upload a Shopify CSV to WooCommerce and expect it to work. The column names must match exactly.

Required columns

At minimum, WooCommerce needs these columns:

  • Type — Must be "simple" or "variable" for parent products, "variation" for child rows. This is the most common source of import errors.
  • SKU — Unique identifier. WooCommerce uses this to match existing products during updates.
  • Name — The product title. Only needed on parent rows, not variation rows.
  • Published — Set to 1 for live, 0 for draft.
  • Regular price — The selling price. Note: it's "Regular price," not "Price."

How variable products work

This is where most people get stuck. A variable product (like a t-shirt with sizes) needs multiple rows in the CSV:

Row 1: The parent product with Type "variable," the product name, description, and categories. Leave the price empty on this row.

Row 2+: One variation row for each option. Type is "variation," the Parent column contains the parent SKU, and each row has its own price, stock, and attribute values.

The attribute columns follow a pattern: "Attribute 1 name," "Attribute 1 value(s)," "Attribute 1 visible," "Attribute 1 global." The parent row lists all possible values separated by pipes (Small|Medium|Large). Each variation row lists just its specific value.

Common mistakes

  • "Regular price" vs "Sale price" — If you put your selling price in "Sale price" and leave "Regular price" empty, WooCommerce shows the product as $0 with a sale badge.
  • Forgetting the Type column — Without it, everything imports as simple products. Your variants disappear.
  • Category formatting — WooCommerce uses ">" for subcategories: "Clothing > T-Shirts > Graphic Tees." Shopify uses tags instead.
  • Image handling — WooCommerce expects full URLs in the "Images" column, separated by commas for multiple images. Relative paths don't work.

SEO fields

WooCommerce doesn't have built-in SEO fields in the CSV. If you use Yoast SEO (most stores do), you need special columns: "Meta: _yoast_wpseo_title" and "Meta: _yoast_wpseo_metadesc." These won't appear in the default WooCommerce export — you have to add them manually.

Skip the spreadsheet

If formatting a WooCommerce CSV sounds tedious, that's because it is. Catalogd generates a properly formatted WooCommerce CSV from your product data automatically — correct column names, parent/variation rows, Yoast SEO fields, and all. Upload your spreadsheet and get back a file that's ready to import. Try it free with 5 products.