Import a WooCommerce CSV Without a Plugin
WooCommerce includes a native CSV importer you can use without installing WP All Import. Here’s how, with the exact CSV structure and category mapping.

Import a WooCommerce CSV Without a Plugin
WooCommerce has included a native CSV importer since version 3.1 (2017). Most tutorials tell you to install WP All Import or WooCommerce Product CSV Import Suite. That is rarely necessary. The native tool covers 90% of use cases, for free, with no extra plugin.
Here is how to use it effectively, the exact CSV structure, and the WooCommerce-specific pitfalls to watch for (hierarchical categories, attributes vs variations).
The native CSV tool: where it is and how it works
In your WordPress admin: Products → All Products, at the top of the page, two buttons:
- Import — import a CSV
- Export — export all products to CSV
This tool:
- Handles create + update by
SKUorid - Supports attributes, categories, tags
- Processes variations
- Allows a dry run (preview mode without writing)
It does not handle natively:
- Complex mapping with transformations (for example, concatenating 2 columns)
- Importing images from an FTP
- Conditional mapping (if column A = X, then ...)
For these advanced cases, a plugin (WP All Import) may be necessary. Otherwise, the native tool is enough.
WooCommerce CSV structure
Export an existing product to see the structure. Main columns:
| Column | Role |
|---|---|
ID | Leave blank for create, fill in for update |
SKU | Unique identifier (used for matching) |
Name | Product name |
Published | 1, 0, or -1 (draft) |
Type | simple, variable, grouped, external, variation |
Description | Full description (HTML) |
Short description | Short description |
Regular price | Regular price |
Sale price | Sale price |
Stock quantity | Quantity |
Stock status | instock or outofstock |
Weight | Weight (for shipping) |
Length, Width, Height | Dimensions |
Categories | Categories separated by commas |
Tags | Tags separated by commas |
Images | Image URLs separated by commas |
Parent | Parent product SKU (for variations) |
Attribute 1 name, Attribute 1 value(s) | First attribute |
Attribute 2 name, Attribute 2 value(s) | Second attribute |
Each row = one simple product or one variation. A variable product is described with 1 parent row + N child rows (one per variation).
Hierarchical categories: the WooCommerce trap
WooCommerce supports multi-level categories. Example:
Clothing
├── Men
│ ├── Shoes
│ └── Shirts
└── Women
├── Shoes
└── Shirts
To assign a product to "Clothing > Men > Shoes" in the CSV:
Categories
"Clothing > Men > Shoes"
Separator: > (greater-than sign) with spaces around it. If a category does not exist, WooCommerce creates it automatically during import.
Multiple categories for the same product: separated by commas.
Categories
"Clothing > Men > Shoes, Sale"
This product will be in "Clothing > Men > Shoes" AND in "Sale".
Common mistake: forgetting the spaces around >. Without spaces (Clothing>Men>Shoes), WooCommerce creates a single category literally named "Clothing>Men>Shoes".
Attributes vs variations
This is the classic confusion.
Global attribute (Attribute 1 name = Size, Attribute 1 value = 42, 43, 44): this is a characteristic shown on the product page, usable for filtering. It does not create variations.
Variation (row with Type = variation, Parent = parent-sku): this is a purchasable variant with its own price, stock, and SKU.
A product with "42, 43, 44" as an attribute but no variations: one inventory line, same price. A product with "42, 43, 44" as variations: 3 inventory lines, 3 SKUs, 3 possible prices.
In an e-commerce catalog, you almost always want variations for sizes/colors (so you can track stock by variant). Here is the CSV structure:
SKU,Type,Name,Parent,Attribute 1 name,Attribute 1 value(s),Regular price,Stock quantity
DERBY-BLK,variable,Black Leather Derby,,,Size,"42, 43, 44",,
DERBY-BLK-42,variation,,DERBY-BLK,Size,42,149.00,10
DERBY-BLK-43,variation,,DERBY-BLK,Size,43,149.00,8
DERBY-BLK-44,variation,,DERBY-BLK,Size,44,149.00,5
Row 1 = parent product (variable). Rows 2-4 = variations that reference the parent via Parent = DERBY-BLK.
Mapping on the first import
During upload, WooCommerce shows a mapping screen: on the left, your CSV columns; on the right, WooCommerce fields. For each column, choose:
- The matching field (for example,
Nom→Name) - "Do not import" if the column is not useful
- "New meta" if you want to create a custom meta field
Watch out for unrecognized columns: WooCommerce offers to create them as meta fields, which can add noise to your database if you accept without thinking.
Save the mapping: check "Save as template" to reuse it for future imports.
Update vs create: matching by SKU
WooCommerce matches first by ID, then by SKU if ID is blank.
To create new products: leave ID blank and use unique SKU values.
To update existing products: fill in either ID (if known) or the existing SKU values. Check the "Update existing products" option during import.
Watch out: if you check "Update existing" with SKUs that do not exist, nothing happens for those rows (they are silently ignored). Check the import report.
Images: external URLs or upload first
Two strategies:
Strategy 1 — External URLs (recommended for large imports)
Your CSV contains public URLs to a CDN:
Images
"https://cdn.example.com/derby-01.jpg, https://cdn.example.com/derby-02.jpg"
WooCommerce downloads each image during import and adds it to the media library. Fast for <1000 images, but it can time out beyond that.
Strategy 2 — Upload first, then reference them
Upload the images to Media Library, then reference them by their Media Library URL:
Images
"https://example.com/wp-content/uploads/2026/04/derby-01.jpg"
No download at import time, more reliable for large volumes.
For 10,000 images, use an FTP media import plugin such as WP/LR Sync or upload in batches via WP CLI.
Rollback: prepare before importing
WooCommerce has no native rollback. Prepare this first:
Full export before import
Products → All Products → Export → All. Save a dated CSV backup.
Database backup
Direct SQL (via phpMyAdmin) or via a plugin (UpdraftPlus, BackupBuddy). Back up the wp_posts, wp_postmeta, wp_term_relationships, wp_wc_product_meta_lookup tables.
Test in staging
Hostinger, Kinsta, and WP Engine offer one-click staging environments. Test the full import in staging, validate the result, then repeat it in production.
Import as draft
In the CSV, set Published = -1 (draft). The products are created but invisible. Publish them in batches after manual validation.
FAQ
Why is the native WooCommerce tool enough in 90% of cases?
Because most imports are simple: create/update products by SKU, with direct column mapping. Plugins such as WP All Import add: mapping with transformations, scheduling, import from XML/JSON, and multi-site support. These features are useful for large integrations, but rare for a standard e-commerce store.
Does the native tool support scheduled import (cron)?
No, that is one limitation. For recurring automatic import (for example, every morning from a supplier), you need a plugin. WooCommerce Product CSV Import Suite (official, $49/year) handles that.
Can I import only prices without touching the rest?
Yes. Export all products, delete all columns except SKU and Regular price, edit the prices, then re-import with "Update existing". WooCommerce only updates the fields present in the CSV.
How many products can I import at once?
Technically unlimited. In practice: keep it under 5,000 rows per file to avoid timeouts. Beyond that, split by category or in batches of 3,000 rows.
Does WooCommerce support the same CSV format as Shopify?
No, the columns are different. Shopify's Handle does not exist in WooCommerce (which uses a slug derived from Name). Option1 Name becomes Attribute 1 name. You need to map manually.
Can a tool convert a Shopify CSV to a WooCommerce CSV automatically?
Yes. Cart2Cart, LitExtension, and MigrationPro do that. Ecomptimize also supports format conversion between the two platforms in its Catalog Runs. See Ecomptimize for WooCommerce.
For auditing, optimizing, and importing your WooCommerce catalog with AI quality control, see Ecomptimize for WooCommerce.
Did you enjoy this article?