← Back to blog

WooCommerce CSV Import Errors: A Preflight Checklist Before You Import

Prevent skipped products, broken variations and repeat imports with a practical WooCommerce CSV preflight checklist covering SKUs, parents, attributes, prices, images and large catalogs.

A WooCommerce product CSV can look perfectly normal in a spreadsheet and still produce skipped rows, broken variations, duplicate-SKU errors or confusing column mappings. The safest approach is to treat the CSV like deployment data: validate it before it reaches the production store.

This guide focuses on WooCommerce’s built-in product CSV importer. It explains what to check, why those checks matter, and which problems a browser-based preflight tool can—and cannot—catch.

Quick preflight checklist

  • Save the file as UTF-8 CSV.
  • Confirm important headers map to WooCommerce’s core schema.
  • Check non-empty SKUs for duplicates.
  • Verify variable parents and variation rows use stable identifiers.
  • Make sure variation attributes agree with values offered by the parent.
  • Check product status/type values and numeric price fields.
  • Review image URLs and custom columns.
  • Back up the store and test a small representative batch before a large import.

You can run many of these checks before WordPress sees the file with the free WooCommerce CSV Import Doctor.

1. Start with the importer you are actually using

WooCommerce has a product CSV importer in core, while the separate Product CSV Import Suite extension has its own field conventions and workflows. Do not mix documentation for the two. This article—and the WPToolix checker—targets the core importer used from Products → All Products → Import.

For the core importer, WooCommerce recommends UTF-8 CSV, documents its supported product fields, and automatically maps recognized columns. Unknown columns are not imported by default, although product metadata can be imported with meta:-prefixed headers.

2. Validate identifiers before anything else

Identifiers determine whether WooCommerce creates, skips or updates products. When updating existing products, WooCommerce can match rows by product ID or SKU. That means an accidental duplicate SKU is not merely a cosmetic spreadsheet problem—it can make the intended target ambiguous or cause an import to be skipped.

For a preflight review, I would separate identifier findings into two groups:

  • File-level certainty: duplicate non-empty SKUs inside the CSV can be detected immediately.
  • Store-level uncertainty: a browser tool cannot know whether an SKU already exists in your live database unless it connects to the store.

That distinction matters. A useful validator should tell you what it actually knows rather than presenting every warning as a guaranteed WooCommerce error.

3. Treat variations as relationships, not standalone rows

Variation imports are where CSV preparation becomes much easier to get wrong. In the core schema, a variation can reference its parent using the parent SKU or an ID formatted as WooCommerce expects. The parent also needs the relevant attributes, while each variation selects an appropriate value.

For example, a variable T-shirt might offer Size values S, M, L. A child variation should select one of those values rather than inventing Extra Large when the parent never offered it.

Recent WooCommerce versions have also improved update imports. WooCommerce 11.1 can create an unmatched variation during an “Update existing products” import under specific conditions: the parent must already be a variable product, the variation needs a stable identifier, and its attributes/values must already belong to that parent. This is exactly why “the row exists in my CSV” is not enough to predict whether it will be created.

4. Check product type and status values

The core importer supports defined product types and status conventions. A typo such as varaition may look obvious once you see it, but in a supplier file with thousands of rows it can hide for a long time.

The Published field also uses WooCommerce-specific values. A preflight tool can flag unexpected values before you discover that products were imported into a status you did not intend.

5. Remove spreadsheet formatting from numeric fields

Prices and dimensions should contain importable values, not presentation formatting. A value such as $29.99 may look nicer in a spreadsheet than 29.99, but currency symbols and formulas create unnecessary ambiguity in an import file.

I also treat a sale price higher than the regular price as a warning. It may be intentional data, so a validator should not silently “fix” it, but it is unusual enough to deserve review.

6. Do not assume an image URL will import just because it opens for you

The core importer can work with existing Media Library filenames and directly accessible external image URLs. WooCommerce notes that external images need to be reachable and that redirect-style links may not be supported.

A local checker can identify malformed URL syntax, but it cannot guarantee that your WordPress server will be allowed to download the image. Authentication, hotlink protection, expiring URLs, redirects, rate limits and remote-server rules can all change the result.

7. Understand unknown columns before deleting them

An unknown column is not automatically bad data. Supplier feeds and WooCommerce extensions often contain additional fields. WooCommerce’s core importer leaves unrecognized columns unmapped by default, while custom metadata can use a meta: prefix.

So the safe behavior for a preflight tool is to warn about unknown headers, not delete them. You may need those columns for manual mapping, another plugin or a later transformation.

8. Why “auto repair” should be conservative

Some CSV cleanup is low-risk: removing a UTF-8 BOM, trimming accidental whitespace around simple field values, or producing a consistently encoded CSV. Other changes require business knowledge.

A tool should not guess which parent a variation belongs to, invent a missing price, change a product type, rewrite attributes, or replace a live-store ID. A wrong automatic repair can be more expensive than an import failure because it may create valid-looking but incorrect catalog data.

9. Large imports need a staging strategy, not just a clean CSV

WooCommerce notes that large catalogs depend on server memory, upload limits and processing time. Even a structurally clean CSV can fail when the request is too large for the hosting environment.

For a large migration, use a backup and staging site, test one representative variable product plus a few simple products, inspect the importer results, and only then increase the batch size. If the import exposes memory constraints, the WordPress Memory Limit Generator can help generate the relevant configuration snippets, but raising memory is not a substitute for diagnosing an inefficient or oversized import process.

10. A practical diagnosis order when WooCommerce skips rows

  1. Read WooCommerce’s failed/skipped-row report.
  2. Confirm whether you intended to create products or update existing products.
  3. Check ID/SKU matching and duplicate identifiers.
  4. For variations, verify the parent and attributes before looking elsewhere.
  5. Confirm headers and field values match the core importer schema.
  6. Test the same small file with nonessential custom columns removed.
  7. If a small clean file works but a large file fails, investigate hosting/resource limits.
  8. If failures depend on particular custom fields, check the plugin or extension that owns those fields.

Use a preflight check before the WordPress import

The goal is not to replace WooCommerce’s importer. It is to catch the predictable mistakes earlier. The WPToolix WooCommerce CSV Import Doctor runs locally in the browser and checks the uploaded file for common structural and data problems without sending the catalog to WPToolix.

After the report is clean, still keep the production safeguards: backup, staging or a small sample import, and a manual review of the resulting products.

Frequently asked questions

Why does WooCommerce say a product already exists?

A common cause is an existing matching SKU or ID when you are trying to create rather than update a product. Check the identifier and whether “Update existing products” matches your intended workflow.

Why are WooCommerce variations skipped?

Check the Parent value, the variation identifier, and whether the variation’s attributes and values agree with the variable parent. Version and import mode also matter.

Should I remove every column WooCommerce does not recognize?

No. Unknown columns may belong to an extension or supplier workflow. Review them first; core WooCommerce simply does not import unrecognized columns by default.

Can I validate a WooCommerce CSV without uploading it?

Yes. File-level checks can run locally in your browser. Store-level checks—such as whether an SKU already exists in WordPress—require access to the actual store and cannot be proven from the CSV alone.

What is the safest way to import thousands of products?

Back up first, test a representative sample on staging, fix all repeatable data problems, and import in manageable batches. A large file should not be the first test of a new mapping workflow.