Skip to main content
Back to blog
Catalog management

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.

#woocommerce#csv#import#catalog
Import a WooCommerce CSV Without a Plugin

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 SKU or id
  • 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:

ColumnRole
IDLeave blank for create, fill in for update
SKUUnique identifier (used for matching)
NameProduct name
Published1, 0, or -1 (draft)
Typesimple, variable, grouped, external, variation
DescriptionFull description (HTML)
Short descriptionShort description
Regular priceRegular price
Sale priceSale price
Stock quantityQuantity
Stock statusinstock or outofstock
WeightWeight (for shipping)
Length, Width, HeightDimensions
CategoriesCategories separated by commas
TagsTags separated by commas
ImagesImage URLs separated by commas
ParentParent 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, NomName)
  • "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?