Skip to content
ThemesIonic — home
WooCommerce

How to Export WooCommerce Products and Move Them to Another Store

The built-in product exporter writes a CSV the importer can read back, which makes moving a catalogue easier than most people expect. The traps are IDs that mean nothing on the new site, images that point at the old domain, and data the file never contained.

5 min read beginner

Some links on this page are affiliate links: if you buy through one, we may earn a commission at no extra cost to you. It does not change what we recommend; see the editorial policy.

Products › All Products › Export writes a CSV that WooCommerce's own importer reads back, so for most catalogues no plugin is needed. Where it goes wrong is not the export but the assumptions inside the file: IDs from the old store, image URLs on the old domain, and data that never made it into the CSV in the first place.

Run the export

  1. Products › All Products, then Export at the top.
  2. Which columns should be exported? Leave empty for all. Pick columns only for a specific job, such as a price list.
  3. Which product types? All by default; filter if you only need, say, simple products.
  4. Which product category? Empty exports every category.
  5. Export custom meta? Tick it if plugins store data on products — it adds a meta: column per custom field.
  6. Generate CSV. The export runs in batches in the browser; leave the tab open until the download starts.

What the file contains

The columns match what the importer expects, which is why exporting is also the best way to get an import template, as importing products with CSV explains:

Group Columns
Identity ID, Type, SKU, "GTIN, UPC, EAN, or ISBN", MPN, Name
Visibility Published, Is featured?, Visibility in catalog
Content Short description, Description, Purchase note
Price and tax Regular price, Sale price, sale dates, Tax status, Tax class
Stock In stock?, Stock, Low stock amount, Backorders allowed?, Sold individually?
Shipping Weight, Length, Width, Height (in the store's units), Shipping class
Taxonomy Categories as Parent > Child, Tags
Relations Parent, Grouped products, Upsells, Cross-sells
Media and files Images (URLs), Download limit, Download expiry days, download and attribute columns

Variations are separate rows referencing their parent. External products carry their URL and button text.

The id: trap

When a related product has an SKU, the export references it by SKU. When it does not, the exporter writes id: and the post ID instead — in the Parent column for variations, and in Upsells, Cross-sells and Grouped products.

On the same store that works. On a new store, the importer tries to translate them: each row imported with its ID column remembers that old ID, and id:1873 is mapped to the product imported as 1873. That breaks when the ID column has been deleted — references then land on empty "Import placeholder" products — and it can pick the wrong item when the destination already has a product or variation with ID 1873. Variations lose their parent and upsells point at nothing or at the wrong product.

The fix is before the export: give every parent product, and every product used as an upsell, cross-sell or group member, a unique SKU. Then every reference in the file is by SKU and survives the move. Keep the ID column for a new import with Update existing products unticked: it is then used only to map references; ticked, it updates whatever product has that ID on the new store.

Images point at the old site

The Images column holds full URLs on the old domain. The importer downloads each one into the new media library, which means:

  • the old site must stay online and publicly reachable during the import — not behind a maintenance page or password;
  • a large catalogue means thousands of downloads, which is where timeouts come from;
  • gallery order is kept, and the first URL becomes the featured image.

For big catalogues, import in smaller batches by category. Copying wp-content/uploads across does not save the downloads: the importer only reuses images that already exist as media library attachments, and it looks up old-domain URLs by the source URL it saved on an earlier import.

What the export does not carry

  • Reviews. They are comments, not product data.
  • Orders and customers. Separate data entirely — see exporting orders and exporting users and customers.
  • Global attribute settings. The file holds each product's attribute names and values; the importer creates a missing global attribute from the name, but not its slug, sort order or archive setting. Recreate attributes on the new store first if those matter.
  • Data stored in plugin tables rather than product meta. Bookings, bundles, subscriptions settings and some add-on plugins keep their own tables; the CSV has no idea they exist.

Where the built-in exporter stops

It exports products to CSV, on demand, from a browser tab. It does not export reviews, write XML or Excel, run on a schedule, or send the file anywhere. If a marketplace or ERP needs an updated product file every night, or a migration has to carry reviews and orders along with the catalogue, a dedicated importer/exporter such as Import Export Suite handles products, reviews, categories and orders in CSV, XML, TSV or Excel, with scheduled jobs via WordPress or server cron and files from a URL or FTP/SFTP.

For a one-off move of a catalogue between two WooCommerce stores, the built-in tools are usually enough once the SKUs are in place.

Moving a catalogue: the order that works

  1. Back up the destination, as in backing up a WordPress site.
  2. Recreate global attributes, shipping classes and tax classes.
  3. Make sure parents and related products have SKUs on the source, then export.
  4. Import into a staging copy first, by category if the catalogue is large.
  5. Check, then repeat on live.

Common mistakes

  • Exporting with empty SKUs and importing on another store — id: references depend on the ID mapping and break easily.
  • Taking the old site offline before importing, so no image downloads.
  • Not ticking custom meta when a plugin stores product fields there.
  • Editing the CSV in a spreadsheet that reformats prices, dates or long numbers such as GTINs. Open it as text-formatted columns.
  • Expecting reviews to come along. They do not.

Verify

Pick a variable product, a product with upsells and one with a gallery. On the new store, check that each variation has its price and parent, the upsells link to the right products, and the gallery order matches. Then compare product counts per category between the two stores.

Frequently asked

Yes. Each variation is its own row of type variation, with the Parent column holding the parent's SKU — or id: followed by the parent's ID when the parent has no SKU. Keep parent and variation rows together, and give parents SKUs before exporting if the file is going to another store.
Only as URLs. The Images column lists the full-size image URLs, featured image first. On import the new store downloads each URL, so the old site must still be online and publicly reachable while you import.
Yes. The export screen has a category filter and a product type filter, and you can choose which columns to include. Exporting one category at a time is also a practical way to keep files small enough to import without timeouts.

Related guides