Import Builder/Guides/WooCommerce product CSV errors
E-commerce

WooCommerce Product CSV Import Errors and How to Fix Them

WooCommerce's built-in importer (Products, then Import) adds or updates products from a CSV. When something's off, it usually doesn't fail outright: rows are skipped, variations go missing or images don't arrive, and you find out later.

Before you import

Save the file as UTF-8 CSV
Use 1 for yes and 0 for no in true or false columns
Use your store's local time zone for dates
Separate multiple values with commas, and put a backslash before commas that belong inside a value
Leave ID blank for new products: it's only for updating existing ones
Make sure image URLs open the image itself, without a login

The safest starting point is an export from your own store: it has the column names WooCommerce expects, and you can delete the columns you don't need.

Common errors and their fixes

Rows skipped because the product already exists

Cause: A product with the same SKU or ID is already in the store, and Update existing products wasn't ticked, so WooCommerce leaves those rows out.

Fix: Tick Update existing products when you're updating, or give new products SKUs that aren't in use yet.

Rows skipped because the ID doesn't match

Cause: The ID column is only for updating existing products. If an ID doesn't match a product in the store, the row is skipped, and you can't choose an ID for a new product.

Fix: Leave ID blank for new products, and match updates by SKU or by the IDs from a fresh export.

Variations missing or attached to nothing

Cause: Each variation row needs Type set to variation and a Parent column pointing at the variable product, by its SKU or as id:123. Without it, WooCommerce can't tell which product the row belongs to.

Fix: Give the parent row Type variable, and every variation row Type variation, its own SKU and name, and the parent's SKU in Parent. See product variants in a CSV.

Variation options that don't appear

Cause: The parent row lists every value of an attribute in Attribute 1 value(s), separated by commas; each variation row gives just one. A value on a variation that isn't in the parent's list has nothing to match.

Fix: List every value on the parent row, spelled exactly as on the variation rows.

Images not imported

Cause: Images are fetched from the URLs in the file. Some hosts block the request, need a login, or return a web page instead of the image.

Fix: Use direct links to the image files that open without signing in, or upload the images to the Media Library first.

Categories or tags split in the wrong place

Cause: Commas separate multiple values in a cell, so a category name that contains a comma is split in two.

Fix: Put a backslash before commas that belong inside a value, such as Places\, People\, Cities. Use > for subcategories, such as Home goods > Audio.

Yes and No values ignored

Cause: True or false columns such as In stock? expect 1 or 0, and Published expects 1 (published), 0 (private), -1 (draft) or 2 (pending review).

Fix: Replace Yes, No, TRUE and FALSE with the numbers WooCommerce expects.

Accents and symbols garbled

Cause: The file wasn't saved as UTF-8, which the importer expects.

Fix: Save as CSV UTF-8 from Excel, or export from Google Sheets, which uses UTF-8. See saving Excel files as CSV.

"Sorry, this file type is not permitted for security reasons."

Cause: Some servers reject a CSV that contains HTML, for example in product descriptions.

Fix: Upload the file to your site's uploads folder with SFTP or your host's file manager, then enter its path under Show advanced options.

File too large

Cause: The maximum upload size is set by your server, so a big catalog can exceed it.

Fix: Split the file into smaller batches, or ask your host to raise the limit.

A variable product that imports

One parent row lists every size; each variation row has its own SKU, its one size, its price and the parent's SKU.

Type,SKU,Name,Parent,Attribute 1 name,Attribute 1 value(s),Attribute 1 visible,Attribute 1 global,Regular price
variable,TEE-01,Logo T-shirt,,Size,"S, M, L",1,0,
variation,TEE-01-S,Logo T-shirt - S,TEE-01,Size,S,,0,25
variation,TEE-01-M,Logo T-shirt - M,TEE-01,Size,M,,0,25
variation,TEE-01-L,Logo T-shirt - L,TEE-01,Size,L,,0,27

Attribute 1 global is 0 for an attribute that only exists on this product, or 1 for one set up under Products, then Attributes. From WooCommerce 11.1, turning a simple product into a variable one works in a single import, as long as the parent row comes before its variations; before that, it takes two.

Checklist before you import

Saved as UTF-8 CSV
ID blank on new products; Update existing products ticked for updates
A unique SKU on every product and variation
Parent rows typed variable, listing every attribute value
Variation rows typed variation, with the parent's SKU in Parent
1 and 0 in true or false columns
Backslashes before commas inside a value, > between category levels
Image URLs that open the image without signing in
Large catalogs split into batches

Getting product data from a supplier or client?

Send them a form instead of a spreadsheet. The WooCommerce products template uses WooCommerce's column names, checks prices, stock and yes/no columns as they're entered, and downloads a CSV ready for the importer. See also collecting product data from suppliers.

Try the WooCommerce template

Import Builder is an independent product and is not affiliated with, endorsed by, or sponsored by Automattic Inc. WooCommerce is a trademark of Automattic Inc. Import rules as described in the WooCommerce documentation, October 2026.