Visser Labs – WooCommerce Plugins

WooCommerce Import CSV: Format Guide & How To Do It (2026)

WooCommerce Import CSV: Why You Need To Import CSV Files

For a WooCommerce import CSV to work, your file needs a header row, UTF-8 encoding, and values formatted the way WooCommerce expects them. The free built-in importer reads that file and handles simple products, variable products, categories, images from URLs, and custom fields. No paid plugin is required.

Almost every failed import traces back to the spreadsheet, not the importer. A value in the wrong format, a file saved in the wrong encoding, or a variation row that doesn’t point at its parent will each stop an import cold, usually without a useful error message.

This guide covers the exact format requirements column by column, the accepted values for each one, how to run the import, and the errors that catch most store owners on their first attempt. So, let’s get started!

Table of Contents

Why Importing Products Via CSV Matters For WooCommerce Stores

A CSV import replaces hours of manual product entry with a single upload. One spreadsheet can create or update hundreds of products at once, with consistent data and the same formatting rules applied to every row. Manual entry through the WordPress admin works fine for a small catalog, but once you pass 50 to 100 products it becomes the slowest and most error-prone part of running your store.

The trade-off is precision. The importer does exactly what your file tells it to, so the file has to say the right things. Get the format right and a thousand products load in minutes.

This guide walks through the format requirements, the methods for running the import, and the errors store owners hit most often.

WooCommerce Import CSV Format Requirements: What Your File Needs

A WooCommerce import CSV needs three things: a comma delimiter, UTF-8 encoding, and a header row naming each column. Everything else is flexible, because the importer’s Column Mapping screen lets you match your headers to WooCommerce fields by hand. Your columns do not have to be named exactly what WooCommerce calls them.

What’s actually required

Far less than most guides claim. A product row genuinely needs only a Name, and a Type if the product is anything other than simple.

  • Name: the product title. This is the one column you can’t skip.
  • Type: simple, variable, variation, grouped, or external. Defaults to simple if left out.
  • SKU: strongly recommended, though not strictly required. WooCommerce generates one if it’s missing, and without it you have no reliable key for future updates.

Price, stock, and categories are all optional. A file with nothing but Name and Regular price will import.

A raw CSV file showing product columns separated by commas, with each row representing one product's name, price, and description
What a properly formatted product CSV looks like in plain text (click to zoom)

Formatting rules for values

  • Commas inside a value: wrap the field in double quotes, per RFC 4180, the CSV specification. This applies to any multi-value field.
  • Yes/no columns: use 1 and 0, not “yes” and “no”.
  • Category hierarchy: use > to nest, as in Apparel > T-Shirts. Missing levels are created for you.
  • Referencing an existing product: prefix the product ID with id:, as in id:100. A plain SKU needs no prefix.
  • Dates: use YYYY-MM-DD, interpreted in your store’s local timezone.
  • Custom fields: prefix the header with meta:, as in meta:product_depth, and the value lands in that meta key.

Variable product columns

Variable products need one parent row plus one row per variation. The parent row uses type variable and lists every attribute value. Each variation row uses type variation, names the single value that applies to it, and points back at the parent.

  • Parent: on each variation row, the parent’s SKU, or id: plus the parent’s product ID.
  • Attribute 1 name / Attribute 1 value(s): repeat as Attribute 2, Attribute 3 and so on. On the parent row the values are comma-separated inside quotes, for example "Red, Blue, Green". On a variation row, one value only.
  • Attribute 1 visible / Attribute 1 global: 1 or 0, controlling whether the attribute shows on the product page and whether it uses a global attribute taxonomy.
  • Attribute 1 default: the value preselected on the parent product page.

Separating attribute values with a pipe character is a convention from other import tools and it does not work here. Use commas. For more on structuring these files, see our variable product import guide.

Image URL formatting

Images import by URL. WooCommerce downloads each one into the Media Library and attaches it to the product, with the first URL becoming the featured image and the rest forming the gallery.

  • URLs that 404 or redirect: test each one with curl -I first. Anything behind a login wall, hot-link protection, or a redirect chain fails silently.
  • Missing protocol: URLs need https:// or http://. Bare domains and relative paths break.
  • Multiple images in one cell: separate with commas and quote the field.

UTF-8 encoding, the silent killer

WooCommerce expects UTF-8. Files saved from older versions of Excel default to Windows-1252 or MacRoman, and every non-ASCII character (accented vowels, currency symbols, smart quotes) turns to garbled bytes on import.

  • Excel (Windows/Mac): File → Save As → Browse → choose “CSV UTF-8 (Comma delimited)”.
  • Google Sheets: File → Download → Comma-separated values (.csv). Exports UTF-8 by default.
  • Apple Numbers: File → Export To → CSV. Exports UTF-8 by default.
  • LibreOffice Calc: File → Save As → CSV, then set Character set to “Unicode (UTF-8)”.
A product CSV opened in Google Sheets showing rows of fashion products with columns for name, price, stock, categories and image URLs
A product CSV opened in Google Sheets, which exports as UTF-8 by default (click to zoom)

What We’ve Seen: A pattern we see constantly in support tickets is a CSV saved from Excel as plain “CSV”, imported, and product names with “café” landing as “café”. Re-saving as “CSV UTF-8 (Comma delimited)” and re-importing fixes it every time. It’s the most common CSV import problem we see, and the fix takes 10 seconds.

The Full Column Reference

Here is every column the WooCommerce product importer recognizes, with the values each one accepts. Use it as a checklist when you build your spreadsheet, because most import failures come from a value in the wrong shape rather than a missing column.

ColumnWhat it setsAccepted values
IDExisting product to updateNumeric product ID
SKUUnique product keyText. Auto-generated if blank
NameProduct titleText (the one required column)
TypeProduct typesimple, variable, variation, grouped, external, virtual, downloadable
PublishedPublish state1 published, 0 private, -1 draft
Is featured?Featured flag1 or 0
DescriptionFull descriptionText, HTML allowed
Short descriptionCatalog summaryText, HTML allowed
Regular priceStandard priceNumeric, no currency symbol
Sale priceDiscounted priceNumeric
Date sale price starts / endsSale windowYYYY-MM-DD, store timezone
In stock?Stock status1 or 0
StockQuantityNumeric, parent for variations, blank to disable management
Low stock amountLow stock thresholdNumeric or blank
Backorders allowed?Backorder rule1, 0, or notify
Sold individually?One per order1 or 0
Weight / Length / Width / HeightShipping dimensionsNumeric, store units
CategoriesProduct categoriesComma-separated, > for hierarchy
TagsProduct tagsComma-separated
ImagesFeatured plus galleryFull URLs, comma-separated, first is featured
ParentVariation’s parentParent SKU or id: plus ID
Attribute N nameAttribute labelText, or a global attribute name
Attribute N value(s)Attribute valuesComma-separated in quotes on the parent, single value on a variation
Attribute N visible / globalDisplay and taxonomy flags1 or 0
Attribute N defaultPreselected variationOne of the attribute’s values
meta:your_keyCustom fieldAny value, stored to that meta key

You don’t need all of these. Include the columns you actually want to set and leave the rest out entirely, because a column you omit is simply skipped while a column left blank can overwrite existing data on an update.

How To Import A CSV Into WooCommerce: 3 Methods Compared

There are three ways to get a CSV into a WooCommerce store, and for most stores the first one is the answer. The built-in importer is free, handles every standard product type, and needs nothing installed.

Method 1: the built-in WooCommerce importer

WooCommerce ships with a CSV importer at Products → All Products → Import. It handles simple and variable products, categories and tags, images from URLs, and custom fields through the meta: prefix.

Its Column Mapping screen reads your header row and suggests a WooCommerce field for each column, with a dropdown to correct anything it guesses wrong. A header called “Product SKU” or “Item Code” maps fine, so you don’t need to rename your supplier’s columns before importing.

Its real constraints are operational rather than structural: it runs manually, reads CSV only, and processes your whole file in one pass, which server limits can cut short on very large catalogs.

Method 2: a dedicated import plugin

A third-party import plugin earns its cost when your workflow needs automation the built-in tool doesn’t offer: imports on a schedule, a supplier feed pulled straight from a URL or FTP server, or source files in XML or JSON.

If your imports are manual and occasional, this is money you don’t need to spend. The built-in importer covers the same product data.

Method 3: direct database import (advanced)

For one-off migrations of 50,000+ products, some developers write directly to the wp_posts and wp_postmeta tables, bypassing the importer entirely.

This is rarely the right approach. WooCommerce spreads product data across multiple tables with specific relationships, and direct writes skip the hooks that SEO, cache, and search plugins rely on to update their indexes. Stick with Method 1 unless you have a specific reason and a developer who knows the data model.

Step-By-Step CSV Import Walkthrough

Running a WooCommerce import CSV through the built-in importer takes six steps from spreadsheet to finished catalog. The whole flow lives in the WordPress admin and nothing needs installing first.

  1. Prepare your spreadsheet. Save as CSV UTF-8 and check your values against the column reference above.
  2. Open the importer. Go to Products → All Products and click Import.
  3. Choose your file. Upload it, or open Advanced options and give a server file path if the file is too big to upload.
  4. Decide new or update. Check Update existing products if this file should update your catalog rather than add to it.
  5. Map your columns. Review each suggested field on the Column Mapping screen and set anything marked “Do not import” that you actually want.
  6. Run it, then spot-check. Click Run the importer, then open 3 to 5 finished products and confirm the data, images, and variations landed correctly.

What We’ve Seen: Store owners often skip the spot-check because the importer says “success.” Then a customer hits a broken product page two weeks later. Always open a handful of imported products before assuming the import worked end to end.

Common WooCommerce CSV Import Errors And How To Fix Them

A WooCommerce import CSV usually fails for one of five reasons. Work through them in order, because the first two account for most failures.

  1. Non-UTF-8 encoding: garbled characters in names, descriptions, or categories almost always mean the file encoding. Re-save as UTF-8 and re-import.
  2. Columns left unmapped: anything the importer doesn’t recognize defaults to “Do not import” and is silently skipped. Read the Column Mapping screen before running it rather than clicking straight through.
  3. Image URLs that fail to fetch: test them with curl -I. URLs behind authentication, hot-link protection, or redirects fail without warning.
  4. Variation rows missing a parent: each variation needs a Parent value matching its parent’s SKU or ID. Without it, variations import as orphaned simple products.
  5. Timeouts on large files: PHP’s max_execution_time defaults to 30 seconds through a web server. Split the file into batches of 500 to 1,000 rows, or raise the limit in your PHP configuration.

For deeper troubleshooting, see our WooCommerce product import troubleshooting guide.

Next Steps

Get your WooCommerce import CSV right once and every import after it gets easier. Build your spreadsheet around the column reference above, save it as UTF-8, and run a test import of 5 to 10 rows before committing the full file. If the test lands cleanly, scale up.

For the full walkthrough of the importer itself, including variable products and bulk updates, see our guide on how to import WooCommerce products. If your source data lives in a spreadsheet, learn how to import products from Excel to WooCommerce step by step, including the XLS-to-CSV conversion.

Comparing formats first? See our CSV vs XML comparison. Already have products in your store and want a correctly structured file to start from, export your current catalog with Store Exporter Deluxe and edit that instead of building one from scratch.

Frequently Asked Questions

What format does WooCommerce need for CSV import?

WooCommerce needs a comma-delimited, UTF-8 encoded file with a header row. Only the Name column is genuinely required, plus Type for anything that isn’t a simple product. Your headers don’t need to match WooCommerce’s names exactly, because the Column Mapping screen lets you assign each one by hand.

Can WooCommerce import variable products from CSV?

Yes, the built-in WooCommerce importer handles variable products from CSV with no extra plugin. Your file needs one parent row with type variable listing all attribute values comma-separated in quotes, then one row per variation with type variation and a Parent value pointing at the parent’s SKU or ID.

What’s the maximum CSV file size for WooCommerce import?

The limit is set by your server, not by WooCommerce, through the PHP upload_max_filesize and post_max_size values. The import screen displays your current maximum. For anything larger, upload the file over FTP and point the importer at its server path through Advanced options, or split it into smaller batches.

Why is my WooCommerce CSV import not working?

The most common causes are non-UTF-8 encoding, columns left unmapped on the Column Mapping screen, image URLs that fail to fetch, variation rows missing a Parent value, and timeouts on large files. Our troubleshooting guide walks through each fix in detail.

Can I import images via CSV in WooCommerce?

Yes. Put full image URLs in the Images column, comma-separated and wrapped in quotes, and the importer downloads each one into your Media Library. The first URL becomes the featured image and the rest become the gallery. URLs must be publicly reachable, so local file paths and hot-link-protected images will fail.

Can I import custom fields in a WooCommerce import CSV?

Yes, prefix the column header with meta: and the importer writes the value to that meta key. A header of meta:product_depth populates the product_depth custom field on every row. You can also map an unrecognized column to a custom field manually from the Column Mapping screen.

author avatar
Katrine Villanueva

Popular articles

Share article

Add A Comment

We're glad you have chosen to leave a comment. Please keep in mind that all comments are moderated according to our privacy policy, and all links are nofollow. Do NOT use keywords in the name field. Let's have a personal and meaningful conversation.

Resources & Help