
To import a CSV into WooCommerce, your file needs the right column headers (SKU, name, regular price, stock, categories) and UTF-8 encoding. The native WooCommerce importer handles simple products from CSV; for variable products, custom attributes, or images via URL, use a dedicated plugin like Product Importer Deluxe.
As an online store owner, you’ve probably heard of the importance of product data management. One critical aspect of this is the ability to handle WooCommerce Import CSV files efficiently.
This guide covers the exact format requirements, the step-by-step process, and the gotchas that cause most CSV imports to fail.
Table Of Contents
- Why Importing Products Via CSV Matters For WooCommerce Stores
- WooCommerce CSV Format Requirements: What Your File Needs
- How To Import A CSV Into WooCommerce: 3 Methods Compared
- Step-By-Step CSV Import Walkthrough
- Common WooCommerce CSV Import Errors And How To Fix Them
- Next Steps
- Frequently Asked Questions
- What format does WooCommerce need for CSV import?
- Can WooCommerce import variable products from CSV?
- What's the maximum CSV file size for WooCommerce import?
- Why is my WooCommerce CSV import not working?
- Can I import images via CSV in WooCommerce?
- What's the difference between WooCommerce native CSV import and Product Importer Deluxe?
Why Importing Products Via CSV Matters For WooCommerce Stores
Manually adding products through the WordPress admin works for small catalogues. Once you cross 50-100 products, or once you start managing variations, multiple categories, and images, manual entry becomes the slowest, most error-prone part of running your store.
CSV imports replace that work. A single spreadsheet can populate hundreds or thousands of products in one upload, with consistent data, the same formatting rules across every row, and a clear audit trail. The catch: the file has to be in the format WooCommerce expects, or the import fails silently or imports garbled data.
This guide walks through the format requirements, the three methods for actually running the import, and the most common errors store owners hit during their first attempt.
WooCommerce CSV Format Requirements: What Your File Needs
WooCommerce’s CSV importer expects specific column headers, a comma delimiter, and UTF-8 encoding. Get these three things right and the import succeeds; get any one wrong and the importer either fails or imports unusable data.
Required Column Headers
Every product CSV needs at minimum these columns:
- SKU: Unique identifier for each product. Used as the primary key during updates.
- Name: Product name shown to customers.
- Type: simple, variable, grouped, or external. Required to tell WooCommerce how to treat each row.
- Regular price: Numeric value, no currency symbol. Match the format your store uses (period or comma decimal).
- Stock: Numeric quantity. Leave empty if you don’t manage stock for this product.
- Categories: Comma-separated list. Use “>” for parent/child (e.g., “Apparel > T-Shirts”).

Optional Columns That Most Stores Should Include
Beyond the required minimum, these columns capture the data that makes a product page convert:
- Description / Short description: The full product description and the catalogue summary respectively.
- Sale price: Numeric. Triggers the “Sale” badge when populated.
- Images: URLs separated by commas (single image first, then gallery). URLs must return HTTP 200 (see the image section below).
- Weight / Length / Width / Height: Required for shipping calculations on physical products.
- Tags: Comma-separated. Useful for filterable archive pages.
- Tax class / Tax status: Determines how WooCommerce calculates tax on this product.
Variable Product Columns (Important)
Variable products are the trickiest part of any WooCommerce CSV import. The native importer requires multiple rows per product: one parent row that defines the product, plus one child row per variation. Each row needs the same SKU prefix, the variation attributes (size, colour, etc.), and the variation-specific price and stock.
The columns you’ll need:
- Parent: The parent product’s SKU on each variation row.
- Attribute 1 name / Attribute 1 value(s): Repeat for Attribute 2, Attribute 3, etc. The parent row lists all attribute values pipe-separated; child rows list only the value for that specific variation.
- Attribute 1 visible / Attribute 1 global: Boolean (1 or 0) flags that control whether the attribute appears on the product page and whether it’s a global attribute taxonomy.
For more detail on variable product structure, see our variable product import guide.
Image URL Formatting
Images during import work via URL. WooCommerce downloads each URL into the WordPress Media Library and attaches it to the product. The most common image-related import failures all trace back to one of three issues:
- URLs that 404 or redirect: Test every image URL with
curl -Ibefore importing. URLs behind login walls, hot-link protection, or redirect chains will fail silently. - Missing protocol: URLs need
https://orhttp://. Bare domains or relative paths break the importer. - Multiple images in one cell: Use commas to separate. The first URL becomes the featured image; the rest populate the gallery.
UTF-8 Encoding (The Silent Killer)
WooCommerce expects CSV files to be UTF-8 encoded. Files saved from older versions of Excel default to Windows-1252 (Western Europe) or MacRoman, and any non-ASCII character (accented vowels, currency symbols, em dashes, smart quotes) gets corrupted into garbled bytes during import.
To save as UTF-8:
- Excel (Windows/Mac): File → Save As → Browse → choose “CSV UTF-8 (Comma delimited)” from the format dropdown.
- Google Sheets: File → Download → Comma-separated values (.csv). Google Sheets exports as UTF-8 by default.
- Apple Numbers: File → Export To → CSV. Numbers exports UTF-8 by default.
- OpenOffice / LibreOffice Calc: File → Save As → CSV → in the export dialog, set Character set to “Unicode (UTF-8)”.

What We’ve Seen: Store owners save a CSV from Excel as plain “CSV”, import it into WooCommerce, and notice product names with “café” showing up as “café”. Re-saving as “CSV UTF-8 (Comma delimited)” and re-importing fixes it every time. This is the single most common CSV import problem we see, and the fix takes 10 seconds.
How To Import A CSV Into WooCommerce: 3 Methods Compared
There are three reliable ways to get a CSV into a WooCommerce store. Each suits a different volume and complexity level.
Method 1: Native WooCommerce Importer
WooCommerce ships with a built-in CSV importer at Products → All Products → Import. It handles simple products well: SKU, name, price, stock, categories, and basic images.
Use it when:
- Your catalogue is under ~500 products.
- You only have simple products (no variations).
- You can format your CSV exactly to WooCommerce’s column-name expectations.
Limitations: variable products require manual row construction with parent/child SKUs, custom fields and ACF data don’t import cleanly, and there’s no preview/dry-run before commit.
Method 2: Product Importer Deluxe
Product Importer Deluxe is the import tool we build for stores that have outgrown the native importer. It supports native WooCommerce fields plus custom field importing, full attribute control for variable products, and bulk import of thousands of products from a single spreadsheet.

Use it when:
- You’re importing variable products and want attribute mapping handled for you.
- You use ACF or other custom fields and need them populated during import.
- Your catalogue is too large for the native importer to handle in one pass.
- You’re migrating from another platform and need a flexible mapping layer.
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. This bypasses the importer entirely.
This is rarely the right approach. WooCommerce stores product data across multiple tables with specific relationships, and direct database writes skip the hooks that other plugins (SEO, cache, search) rely on to update their indexes. Stick with Method 1 or Method 2 unless you have a specific reason and a developer comfortable with the WooCommerce data model.
Step-By-Step CSV Import Walkthrough
Here’s the process using Product Importer Deluxe. The native WooCommerce importer follows a similar shape but with fewer mapping options.
- Prepare your spreadsheet. Save as CSV UTF-8. Confirm required columns (SKU, Name, Type, Regular price, Stock, Categories) are present and named correctly.
- Upload the file. Navigate to the Product Importer Deluxe screen in WordPress admin and select your CSV.
- Map columns. Match each spreadsheet column to its corresponding WooCommerce field. The plugin auto-detects standard column names; review and adjust the mapping for any custom columns.
- Choose import mode. Decide whether to add new products only, update existing products by SKU, or both.
- Run the import. Watch progress in the real-time log. Note any errors flagged for individual rows so you can fix and re-import them.
- Spot-check the results. Open 3-5 imported products in the WooCommerce admin and confirm the data, images, and variations imported correctly. If anything looks wrong, fix the source CSV and re-import only the affected rows.

What We’ve Seen: Store owners often skip step 6, the spot-check, because the importer says “success.” Then a customer hits a broken product page two weeks later. Always check at least a handful of imported products before assuming the import worked end-to-end.
Common WooCommerce CSV Import Errors And How To Fix Them
If your import didn’t work, the cause is usually one of four things. Walk through them in order:
- Wrong column names or case sensitivity: WooCommerce expects exact column names. “SKU” and “sku” can both work depending on the importer, but “Product SKU” or “Item Code” won’t be auto-mapped. Either match WooCommerce’s expected column names exactly or use a plugin that lets you map columns manually.
- Non-UTF-8 encoding: Garbled characters in product names, descriptions, or categories almost always trace back to file encoding. Re-save as UTF-8 and re-import.
- Image URLs that fail to fetch: Test image URLs with
curl -I. URLs behind authentication, with hot-link protection, or returning redirects will fail silently. - Variable product child rows missing parent SKU: Each variation row needs a Parent column referencing the parent SKU. Missing or mismatched parent references mean variations import as orphan simple products.
For deeper troubleshooting on import failures, see our WooCommerce product import troubleshooting guide.
Next Steps
If you’re starting fresh, build your spreadsheet around WooCommerce’s expected columns first, save as UTF-8, and run a test import with 5-10 rows before committing the full file. If the test imports cleanly, scale up.
If you’ve outgrown the native importer or you’re hitting attribute mapping issues with variable products, Product Importer Deluxe is built specifically to solve those friction points. It’s the same import tool we use to migrate stores with tens of thousands of SKUs.
Need to compare CSV against other formats first? See our CSV vs XML comparison. Importing variable products specifically? See the variable product import guide.
Frequently Asked Questions
What format does WooCommerce need for CSV import?
Comma-separated, UTF-8 encoded. Required headers: SKU, Name, Type (simple/variable), Regular Price, Stock Quantity, Categories. Headers are case-sensitive in some plugins. Variable products need parent rows AND child variation rows in the same file.
Can WooCommerce import variable products from CSV?
Yes, but the native WooCommerce importer requires multiple rows per product (one parent + one row per variation), with attribute columns matching exactly. Most stores find Product Importer Deluxe handles variable product imports more reliably because it provides full attribute mapping controls.
What’s the maximum CSV file size for WooCommerce import?
The native importer caps at the PHP upload_max_filesize and post_max_size values, typically 2 MB to 32 MB depending on your host. For larger files, either increase those PHP limits via wp-config.php or your hosting control panel, or split your CSV into chunks of a few thousand rows each.
Why is my WooCommerce CSV import not working?
The four most common causes are: (1) wrong column headers or case sensitivity, (2) non-UTF-8 encoding (saved as Windows-1252 or MacRoman), (3) image URLs that 404 or block bot fetches, (4) variable product child rows missing parent SKU. Our troubleshooting guide walks through each fix in detail.
Can I import images via CSV in WooCommerce?
Yes. Provide image URLs in a dedicated column (typically named “Images”, single image URL first, then comma-separated additional URLs for the gallery). The importer downloads each image and attaches it to the product. Image URLs must be publicly accessible. Local file paths, URLs behind authentication, and hot-link-protected URLs will fail.
What’s the difference between WooCommerce native CSV import and Product Importer Deluxe?
The native importer covers simple products in standard CSV format. Product Importer Deluxe adds variable product attribute mapping, custom field support (including ACF), bulk imports of thousands of products, and compatibility with a wide range of popular WooCommerce plugins. It’s the preferred tool for stores with 1,000+ products or complex variations.








