How to Migrate Woocommerce Orders like a Pro

Web Development, WooCommerce
How to Migrate Woocommerce Orders like a Pro

How to move Woocommerce Orders from one to site to another?

In this guide we will break it down. For example, you recently launched a new Woocommerce site at You have not re-imported your historical orders from your old site (i.e. and need to do so.

Also, if you would like help with migrating orders I can do the first few migrations for free! Why? I am always looking for more examples of this painful process. If interested, email me at simon [at]

Let’s begin!

Step 1: Download plugins and take a backup

We will be using the following paid plugins (not affiliate links):

Yes, these plugins are paid but will save a lot of time and headaches.

I also would suggest installing the Disable Emails plugin. This plugin ensures that no email notifications go out to your customers in the migration process. I have made this mistake by not utilizing this plugin like this that sent over 2,000 order notification emails to past customers. Not a good sign and not a way to revert back once it happens.

Note: I highly suggest taking a backup before exporting your orders. However, if you want to wait to take a backup until Importing your orders that is fine.

Step 2: Set Order Export Format to CSV Import

On the WordPress dashboard, hover over Woocommerce and click CSV Export.

Next, click on the “Settings” tab and set Order Export format to “CSV Import”.

Go back to the “Export” tab and ensure toggle orders (default option) is checked.

Keep all default statuses unless you have a specific periods or order statuses you are looking to export.

I usually leave all field blanks to export all orders and click export.

Step 3: Download CSV file from Export List tab

Go to the “Export list” tab and download the exported CSV file.

Step 4: Import orders from CSV file into Google Sheets or Excel

After exporting the orders CSV, open up Google Sheets (or Excel).

Import the CSV file. I replace my current sheet and then click “Import Data”.

ID column

If you are using the Order Export format of “CSV Import”, the “id” column will be exported as default. If importing historical orders, do not import the “id” column, the first column in your CSV file.

Status column
If your exported orders have “status” in Column D that are need to be updated from “on-hold” to “completed” or from “processing” to “completed”, do the following:

  • Highlight Column D > click Edit > click Find and Replace.
  • Find “on-hold”, replace all to “completed”.
  • Find “processing”, replace all to “completed”.

After your CSV file is ready to go, go to File > Download As > Comma-separated values (.csv, current sheet).

Step 5: Import Orders from CSV file

Go to your Dashboard on your live site > Woocommerce > CSV Import Suite > click “Import Orders”.

Next, upload your CSV file and configure your options.


  • Allow unknown products: If you have products or product variations that have been discontinued, check “allow unknown products”.
  • Merge/update: I only do this if I do not format the dates correctly or added line items to a single order and want to update the order.

Before staring the import, make sure you have gone to Plugins > and the Disable Emails is not only installed but also activated.

Single order import
If I have 10 or 100,000 orders to import, I always import a single order to minimize any trouble in migration. For example, if I did not remove the “id” column or the Disable Emails plugin was not activated, this could cause major issues for all 5,000+ orders.

Note: after the single order has been imported, I navigate to Woocommerce > Orders > and study the single order to ensure everything migrated correctly.

All orders import
If the single order import went well, repeat the steps above and import all orders into your site.

Frequently Asked Questions

I do not use a premium host such as WP Engine, Kinsta, or Flywheel. How can I easily create a backup with a plugin?
Answer: A few plugins to use are Duplicator, BackupBuddy, or BlogVault.

How come you wouldn’t just copy the live site to the dev site? Wouldn’t all orders be migrated?
Answer: If you are developing an entirely new theme I prefer to start with a fresh WordPress install, develop the theme, and then re-import the products, customers, coupons, and then orders.

Are you supposed to import the orders or customers first?
Answer: Customers should be imported first than orders.

Do you have a preference of disabling Order Notification emails vs. the Disable Emails plugin?
Answer: There is no right or wrong answer but I prefer the Disable Emails plugin. I have made a mistake when importing orders to not disable Woo email notifications or use the Disable Emails plugin. Over 5,000 email notifications were sent to previous customers. I am still paranoid about this happening and use the Disable Emails plugin to be safe. I do this in very low traffic times (i.e. after 11pm in my time zone).

I am using Excel and the file format does not working while importing?
Answer: While exporting your CSV file in Excel, ensure that the export format is set to UTF-8.

VIDEO tutorial

Also, I made a Youtube video with the steps below if you are more of a visual learner.

Get FREE help for a migration

Overall, the migration process can be painful. I have done this process a lot and put in a lot of hours before everything worked correctly. Be patient and practice if you need to on different testing sites. Remember to take a backup each time you do a migration.

Any questions or comments? I would love to hear any feedback and can even help you with this process. If you give me 48 hours notice I will do the first few migrations for free. Why? I am always looking for more examples of this process and currently am developing a Woocommerce Orders migration plugin to make this process easier.


  1. Wesley Townie April 25, 2019 | 9:19 am

    Hey Simon thank you for this post! Can you explain more why you removed the “id” column from the exported CSV file when importing the orders into the new site?

    • Simon Gondeck May 1, 2019 | 3:18 pm

      Hi Wesley, happy to help. The reason I removed the “id” column in the CSV file is that if you are moving orders from one site to the other, the post IDs could differ and thus . The post ID in WordPress is auto incremental and all posts (i.e. pages, blog posts, orders, etc.) on the site use the post ID, not just orders. By default, WordPress will not overwrite existing post IDs, meaning that if you attempt to import an order that has an existing post ID that differs from the order being imported, your order will not get imported. Did my explanation help? I realize this can be confusing.

Leave a reply

Your email address will not be published. Required fields are marked*