How to Export WooCommerce Products to CSV
A useful catalog export should answer a specific question. What is live in this category? Which prices will change next week? Does every variation have a unique SKU? Can the catalog be moved without carrying the rest of the WordPress database?
CSV works well because the answer is visible. The file has named columns, can be stored as a dated snapshot, and can return through a controlled import after someone has reviewed the changes.
The export is not a full database backup and it does not prove that a future re-import will be correct. Think of it as a portable catalog dataset whose identity, relationships and media references still need QA.
Choose the scope before the fields
Start by deciding which products belong in the file. Shirely's export filters can narrow WordPress/WooCommerce content by the available status, taxonomy and date criteria for that export screen. Use the preview and match count to confirm the selection.
Examples of useful scopes include:
- published products in one category for a price review;
- drafts and private products for an editorial audit;
- recently created products for a supplier handoff;
- the complete catalog before a migration or restructuring.
Name the file according to that scope, such as footwear-price-review-2026-09-03.csv. products-final-v4.csv stops being informative almost immediately.
Export only the columns the next job needs
A product can expose many fields. More columns are not automatically more useful.
For identity and basic catalog review, consider:
type,sku,parent_skuandsource_id;- title, descriptions and slug;
- regular and sale price;
- stock quantity and stock status;
- product status;
- categories and tags;
- global and local attributes;
- featured image and gallery references;
- WooCommerce Global Unique ID;
- selected SEO or custom meta.
If the file is going to a pricing team, remove descriptions, private meta and internal notes. If it is a migration source, keep the structural columns and preserve an untouched original export.
Shirely 1.3.0 includes catalog provenance in exports. That helps distinguish identifiers from the source store when the file reaches another destination. It does not turn a WordPress product ID into a portable business key. Cross-store product imports should normally match by stable SKU; Matrix ID / External ID belongs to the multilingual Matrix workflow when SKU is not appropriate.
Read the variable-product rows correctly
A variable product is not exported as one oversized row. The parent appears as type=variable, followed by one row for each type=variation. Each variation points back with parent_sku and can have its own SKU, price, stock and image.
type,sku,parent_sku,name,regular_price,stock
variable,HOODIE-500,,Zip hoodie,,
variation,HOODIE-500-GRY-S,HOODIE-500,,59.00,7
variation,HOODIE-500-GRY-M,HOODIE-500,,59.00,12
Keep the parent before its variations if the file will be imported. Do not sort one column in isolation, because that can separate relationship values from the rest of the row. The variable-products documentation explains the return path.
Categories, attributes and product relationships
Category values may use readable hierarchy paths such as Clothing > Hoodies. A product can belong to more than one path. Inspect deep categories and repeated names before assuming the export alone can reconstruct every taxonomy decision on another store.
Global attributes use pa_* taxonomies. Local product attributes are separate per-product data. Preserve that distinction when editing headers or building a smaller working file.
Grouped products and upsell/cross-sell relationships need the referenced products to exist on the destination. If SKU-based link resolution is enabled for the relevant relationship, keep those SKUs stable. Otherwise numeric IDs remain local to the database that produced them. Move the referenced products first and test the relationship on a sample.
Images are references until the destination resolves them
The export carries image URLs or references for the featured image and product gallery. On import, the destination may reuse an existing attachment by its resolvable reference or sideload a reachable remote file.
Before using an export for migration, test the URLs from the destination server. Authentication, hotlink protection, expired signed URLs and private addresses can make an image visible to you but unavailable to WordPress.
Keep the source media reachable until all imports and corrections are complete. Validate featured images, gallery order and variation images separately. Do not assume the product export is a complete alt-text migration for every media path.
Global Unique ID and leading zeros
WooCommerce 9.2 and later includes a native Global Unique ID field for identifiers such as GTIN, EAN, UPC and ISBN. Shirely's product Matrix export emits an ean column for this value, and the importer accepts ean, gtin, barcode or _global_unique_id.
Open that column as text in spreadsheet software. A GTIN with leading zeros must not be converted to a number or scientific notation. After a sample import, verify the stored value on the product and individual variations.
Why the CSV is safer to open
Shirely writes CSV output in UTF-8 and sanitizes cells that begin with spreadsheet formula triggers such as =, +, - or @. This reduces the chance that catalog text is interpreted as a formula when someone opens the file.
That protection is not a reason to share the entire export widely. Product files may contain unpublished copy, private URLs or metadata selected by the operator. Store them according to their actual contents.
Validate the export before anyone edits it
Open the file and check a representative set:
- one simple product;
- one variable parent and its variations;
- a nested category;
- multiple tags or attributes;
- a featured image and gallery;
- a sale price and managed-stock product;
- a Global Unique ID with a leading zero;
- a draft or private product if those statuses were included.
Confirm that the row count and filter scope make sense. Look for truncated cells, shifted columns and formulas introduced by the spreadsheet application. Keep the untouched export beside the editable copy so changes can be reviewed.
Prepare a safe round trip
For a bulk update, make a smaller file containing the stable key and the fields that should change. If only price is in scope, do not return descriptions, images and taxonomy columns merely because they were in the original snapshot.
During import, select one of Shirely's exact modes: Create & Update, Only Create (skip existing) or Only Update (skip new). For a correction that must not introduce products, Only Update (skip new) is usually the clear choice.
Product rows are processed on re-import. Smart Sync's unchanged-row skip applies only to posts, pages and custom post types with a mapped Record ID. Safe product updates rely on stable identity, narrow columns, the intended import mode and a sample QA run.
For the full return workflow, continue with importing WooCommerce products from CSV. For a correction, keep the file narrow and select Only Update (skip new).
Multilingual export uses Matrix Mode
With WPML, Product Matrix Export groups language variants and uses columns such as post_title|en, post_title|de and pa_color|de where the translated attribute path is deliberately configured. Shared operational fields remain unsuffixed.
An exported TRID is useful within its source installation, but it is not a portable identity guarantee. Preserve SKU or the intended Matrix external key and review every language at the destination. The WPML export guide covers that shape.
Automate only a proven export
Shirely 1.3.0 export slots can publish supported catalog data to Google Sheets. Start with Run now, inspect the destination and confirm Run History. Later you can use hourly, twicedaily or daily WP-Cron schedules, or WP-CLI invoked by system cron.
WP-Cron depends on traffic and does not guarantee an exact start time. Avoid overlapping exports to the same Sheet, and keep import and export schedules far enough apart that a writer never reads a half-reviewed snapshot.
FAQ
Can I export only selected WooCommerce products?
Use the filters available in the export screen and confirm the preview/count before generating the file. Select only the fields needed by the next task.
Is a CSV export a full WooCommerce backup?
No. It is a catalog dataset. It does not replace backups of the WordPress database, uploads, orders, users, settings and extension-specific configuration.
Will re-importing the file always update without duplicates?
The outcome depends on the matching key, import mode and destination data. Preserve stable SKUs or the intended Matrix key, preview the import and test a representative sample.
Can the same export go to Google Sheets?
Supported exports can write to a Sheet through a Google Service Account. The Sheet is updated when an export job runs; it is not a continuous connection.
Export for a decision, not just for storage
The best product export has an owner and a next step. Define the scope, select the necessary columns, protect the structural keys and keep the original unchanged. Whether the file becomes a backup snapshot, a price worksheet or a migration source, you can explain exactly what it contains and how it was checked.