WooCommerce Product CSV Template Generator

Pick your product types and columns, and get a correctly headed WooCommerce import CSV with example rows and notes for every column.

Describe the result you need. AI will set up the tool and ask for any missing details.

Configure with AI

Enter to submit · Shift + Enter for a new line

Sent to AI. Leave out passwords and private customer data.

Your details

File

The Published column. Draft lets you check products before they go live.

Product types

A parent row plus one row per variation.

Columns

Needs the Cost of Goods Sold feature turned on.

Units and meta

WooCommerce → Settings → Products → General. The header must match it.

Each key becomes a Meta: column. Use the meta key your plugin or theme reads.

Your WooCommerce product CSV template

woocommerce-product-template.csv
Type,SKU,"GTIN, UPC, EAN, or ISBN",Name,Published,Short description,Description,In stock?,Stock,Low stock amount,Backorders allowed?,Sold individually?,Weight (kg),Length (cm),Width (cm),Height (cm),Sale price,Regular price,Categories,Tags,Shipping class,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
simple,MUG-350,5012345678900,Stoneware Mug,-1,"Glazed stoneware mug, 350 ml.",Hand-glazed stoneware mug. Dishwasher and microwave safe.,1,40,5,0,0,0.4,12,9,10,15.00,18.00,Home > Kitchen,"mug, stoneware",,"https://example.com/wp-content/uploads/mug-front.jpg, https://example.com/wp-content/uploads/mug-side.jpg",,,,,,,,,,,
variable,TEE,,Organic Cotton Tee,-1,Midweight tee in 100% organic cotton.,Pre-shrunk organic cotton with a relaxed crew neck.,1,,,0,0,0.2,30,25,2,,,Clothing > T-shirts,"organic, cotton",,"https://example.com/wp-content/uploads/tee-black.jpg, https://example.com/wp-content/uploads/tee-white.jpg",,Color,"Black, White",1,0,Black,Size,"S, M, L",1,0,M
variation,TEE-BLA-S,5012345678924,"Organic Cotton Tee - Black, S",-1,,,1,15,,0,,0.2,30,25,2,24.00,28.00,,,,https://example.com/wp-content/uploads/tee-black.jpg,TEE,Color,Black,,0,,Size,S,,0,
variation,TEE-BLA-M,5012345678931,"Organic Cotton Tee - Black, M",-1,,,1,20,,0,,0.2,30,25,2,,28.00,,,,https://example.com/wp-content/uploads/tee-black.jpg,TEE,Color,Black,,0,,Size,M,,0,
variation,TEE-BLA-L,0812345678901,"Organic Cotton Tee - Black, L",-1,,,1,12,,0,,0.2,30,25,2,,28.00,,,,https://example.com/wp-content/uploads/tee-black.jpg,TEE,Color,Black,,0,,Size,L,,0,

33 columns, 5 example rows. Replace the example values, keep the headers, save as CSV UTF-8, then import at Products → All Products → Import.

On the Column mapping screen, set the “GTIN, UPC, EAN, or ISBN” column by hand. WooCommerce doesn't map it automatically, and an unmapped column isn't imported.

Weight is in kg and dimensions in cm. If your store uses different units, change them above: WooCommerce doesn't convert values.

What goes in each column

ColumnWhat to enter
Typesimple, variable, variation, grouped or external. Add virtual or downloadable after a comma, for example simple, downloadable, virtual.
SKUMust be unique across the store, variations included. Variations point to their parent through this value.
GTIN, UPC, EAN, or ISBNThe barcode number, unique in the store. The header contains commas, so keep it in quotes. WooCommerce doesn't map this column automatically: on the Column mapping screen, pick “GTIN, UPC, EAN, or ISBN” for it.
NameProduct name. For variations, WooCommerce builds the name from the parent if you leave it blank.
Published1 published, 0 private, -1 draft, 2 pending review.
Short descriptionShown next to the product image in most themes. HTML is allowed.
DescriptionThe main description. HTML is allowed; keep line breaks inside the quoted cell.
In stock?1 in stock, 0 out of stock, or backorder.
StockA number turns on stock management. Leave blank to turn it off. On a variation, parent uses the parent's stock.
Low stock amountOptional threshold for the low stock email.
Backorders allowed?1, 0 or notify.
Sold individually?1 limits the product to one per order.
Weight (kg)Numbers only, in kg. WooCommerce doesn't convert units, so the header and values must use your store's unit.
Length (cm)Numbers only, in cm.
Width (cm)Numbers only, in cm.
Height (cm)Numbers only, in cm.
Sale pricePlain number with a period for decimals, no currency symbol. Must be lower than the regular price.
Regular pricePlain number, no currency symbol. On variable products, put prices on the variation rows.
CategoriesSeparate categories with commas and levels with >, for example Clothing > T-shirts. Missing categories are created.
TagsComma-separated tags.
Shipping classThe name of an existing shipping class. Leave blank for none.
ImagesComma-separated image URLs. The first is the featured image. URLs must load the image directly; redirecting cloud-storage links don't work.
ParentOn variation rows only: the parent's SKU, or id:123 for a product ID.
Attribute 1 nameThe attribute's name, such as Color. Use the same name on the parent and its variations.
Attribute 1 value(s)Parent: every value, comma-separated. Variation: one value, spelled exactly as on the parent. Blank on a variation means “any”.
Attribute 1 visible1 shows the attribute on the Additional information tab.
Attribute 1 global1 for an attribute set up under Products → Attributes, 0 for a product-level attribute.
Attribute 1 defaultParent row only: the value selected when the page loads.
Attribute 2 nameSame rules as Attribute 1.
Attribute 2 value(s)Same rules as Attribute 1.
Attribute 2 visibleSame rules as Attribute 1.
Attribute 2 globalSame rules as Attribute 1.
Attribute 2 defaultSame rules as Attribute 1.

How the template is built

The column names come from WooCommerce's own exporter, in the order it writes them, so the importer recognizes them on the Column mapping screen. The one exception is the GTIN column, which you map by hand. Pick only the columns you need: WooCommerce leaves out any column that isn't in the file and keeps the product's existing value on updates.

Default settings

Product types
Simple and variable
Attributes on variable products
2 (Color, Size)
Columns on
Descriptions, stock, shipping, categories, images, GTIN
Units
kg and cm

33 columns and 5 example rows: one simple product (a mug), one variable parent (a tee with Color and Size) and three of its variations. The weight column is headed Weight (kg) and the lengths Length (cm).

  • GTIN uses the header GTIN, UPC, EAN, or ISBN. It contains commas, so it's quoted in the file. WooCommerce doesn't map it automatically: pick “GTIN, UPC, EAN, or ISBN” for it on the Column mapping screen.
  • Brands is the column WooCommerce's built-in Brands feature reads. Missing brands are created.
  • Cost of goods is only imported when the Cost of Goods Sold feature is on (WooCommerce → Settings → Advanced → Features).
  • Meta columns are written as Meta: your_key, the format the exporter uses, so plugin fields come across as custom meta.

Importing the file into WooCommerce

  1. 01

    Fill in your products

    Replace the example rows. Keep one product per row, and for variable products one parent row followed by one row per variation.

  2. 02

    Save as CSV UTF-8

    In Excel choose CSV UTF-8 (Comma delimited). Google Sheets, LibreOffice and Numbers export UTF-8 by default.

  3. 03

    Open the importer

    Go to Products → All Products and click Import, then choose your file.

  4. 04

    Check the mapping

    WooCommerce matches most headers for you. Map the GTIN column by hand, set any column you don't want to Do not import, then click Run the importer.

To update products you already have, choose Update existing products in the generator and tick the same box on the upload screen. WooCommerce matches rows by ID, then SKU. From WooCommerce 11.2 it also matches by GTIN when a row has no ID or SKU.

Mistakes that break imports

  • Units that don't match the store. WooCommerce doesn't convert units. Set the weight and dimension units to match WooCommerce → Settings → Products → General.
  • Currency symbols and comma decimals in prices. Use 24.99, not $24.99 or 24,99, unless your store's decimal separator is a comma.
  • Category paths with slashes. Levels are separated with >, for example Home > Kitchen. A slash creates one category with a slash in its name.
  • Commas inside a single value. Escape them with a backslash, for example Places\, People for one category.
  • Before a big import, run the file through the WooCommerce CSV validator.

Questions people ask

Where do I import a WooCommerce product CSV?

Go to Products → All Products and click Import at the top of the page. The importer accepts CSV and TXT files.

Which columns are required?

WooCommerce's schema marks SKU and Name as required, and generates a SKU if you leave it out. In practice a new product needs a Name and a Type, and a variation needs a Parent.

Can I leave columns out of the template?

Yes. The importer only touches the columns in your file, so a price-only update can be just SKU, Regular price and Sale price.

Why is the GTIN header in quotes?

WooCommerce's header is GTIN, UPC, EAN, or ISBN, which contains commas, and CSV needs quotes around any cell with a comma. It's also the one column you map by hand on the Column mapping screen.

Can I set product IDs for new products?

No. WooCommerce gives new products the next free ID whatever the ID column says. Use SKUs to link variations and related products instead.

Want this builtinto your store?

I'm Emmanuel, a Shopify and WooCommerce developer. If this tool pointed at something you'd rather have fixed for you (a faster store, cleaner product data, a migration, a custom feature), send me a note.

Emmanuel Asika

Emmanuel Asika

Shopify & WooCommerce developer, Dublin

I build and fix online stores: new builds, migrations, speed, SEO and the custom bits apps can't do.

hello@emmanuelasika.com