Teams often ask, “Which import tool is best for WooCommerce?” It is the wrong question. In a standard store with simple products, every option works and the choice is trivial. The decision gets harder in a heavily customized catalog, where products carry units per pack, manufacturer compliance data, specification PDFs, and role-based wholesale prices. There, the right tool is dictated by the shape of the data, not by a feature comparison. Scalar values and structured fields require different import paths, and the wrong one can corrupt the catalog without producing an obvious error.
Native CSV Handles Scalar Values, Not Structured Fields
WooCommerce includes a CSV importer, and it handles flat custom fields better than its reputation suggests. A single-value post meta field can map through a Meta: your_meta_key column. If a store saves units per pack, manufacturer name, or a country code as plain _prefixed post meta, the native importer can usually move those values without another plugin. That covers more of a real catalog than many teams expect, often including most custom fields.
The limit is structure. The native importer writes a value to a meta key, but it does not construct arrays or plugin-specific serialized structures from multiple columns. It can store JSON as text, but that helps only if the receiving code expects and parses that exact format. Lists such as quantity-discount tiers, per-role price tables, and repeating specification rows therefore need an importer that understands their schema. Wholesale plugins often provide their own import paths because quantity-based pricing may be stored as serialized meta such as wwpp_post_meta_quantity_discount_rule_mapping. Role-based and tiered pricing belong to the same category. If your store is a closed B2B catalog with role-gated prices, do not assume that a generic CSV will reproduce its pricing rules. Use the pricing plugin’s importer or a tool configured for the required serialization format.
What the Native Importer Quietly Gets Wrong
The serialized-data ceiling is documented. The failures that actually bite are the ones that look like success.
Case sensitivity can create ghost keys. Import to a meta key named _price_USD when the store reads _price_usd, and the process may add a second key instead of updating the expected one. The front end keeps reading the old value even though the import appears successful.
Re-imports can append instead of update. Depending on how products and fields are matched, custom metadata may be added as a new row rather than replacing the existing value. A corrective second pass can then duplicate data instead of fixing it.
Repeated values under one key are flattened. A product with several meta rows under one key cannot be represented reliably in a single scalar column. One value may survive while the rest are lost.
The common thread is silent failure. That makes a dry run on staging non-negotiable. The linked case shows how a repeated background job can make stock and prices drift; an import can fail in the same way while still looking successful. Import into a copy, compare a representative sample with the source, and only then run the process in production.
Where WP All Import Earns Its License
WP All Import Pro is useful for structured cases the native tool does not model. It reads CSV, XML, Excel, and Google Sheets, supports inline transformations, and can map serialized fields. It can also be configured to download media from a URL into the WordPress media library. That matters when a product field should reference a local attachment, such as a safety data sheet or technical PDF. Writing the source URL to post meta is not the same as downloading the file, creating an attachment, and storing the identifier or URL expected by the theme or plugin.
The cost is real and extends beyond the license. The mapping interface includes selectors and XPath expressions, so it assumes that someone understands how source fields map to the target schema. For a one-off products.csv, that setup may be pure overhead. WP All Import pays off when imports are recurring, structured, or large: scheduled syncs, XML feeds, or serialized pricing. As catalog size and transformation complexity grow, the discussion shifts toward chunked, out-of-admin processing that avoids PHP timeouts. At that point, validation, retry behavior, and idempotency matter more than the upload interface.
When Manual Entry Still Wins
Import tooling has a fixed cost: a column template, field mapping, a dry run, and a written specification for the source data. Manual entry avoids that setup and grows roughly in proportion to the number of products. It wins in three situations: the batch is small, the data is a one-off, or the fields are relational enough that reliable mapping costs more than entering them. Linked rules, conditional pricing, and curated media often fall into that last category.
There is also a quality argument. A person entering a complex product may notice an obviously wrong unit or a missing variant. An automated import reproduces whatever is present in the source, including its mistakes, at scale.
The Break-Even Point Depends on Data Preparation
The real comparison is the cross-over point. Manual entry costs per_item × N. Bulk import costs setup + (per_run × batches) + (low_per_item × N), where setup covers the template, mapping, and validation work, while low_per_item assumes clean data. For complex products, the per-item difference can make import worthwhile even for a relatively small batch. Once a reliable template exists, subsequent batches reach the break-even point sooner.
The assumption inside low_per_item determines the result: the source data must already match the column template. Normalizing a vendor’s inconsistent spreadsheet, fixing units, reconciling SKUs, and filling gaps is manual work that can erase the savings from automation. Budget data cleanup separately, because it is often where bulk-import projects exceed their estimate.
The Decision in One Pass
- Flat scalar custom meta, occasional batch → native CSV. It is free, installed, and sufficient.
- Serialized fields, media from URLs, recurring or feed-driven syncs → WP All Import Pro, or the source plugin’s own importer for its own pricing rules.
- Small, one-off, or relationally complex datasets → manual entry; the setup may not pay for itself.
Regardless of the tool, take a backup, run the import on staging, compare a representative sample, and only then touch production. The tool determines what data you can move. Whether it arrives correctly depends on matching the import path to the data shape and inspecting the result before the first production run.