Migrate from WordPress / WooCommerce to Shopify
DataEase moves a WordPress site or a WooCommerce store to Shopify straight from the site’s REST API - no plugins, no CSV exports, no spreadsheets. You enter the site address and an application password, pick what to move, and DataEase does the rest. It also creates redirects from the old URLs, so links and search rankings keep working after you switch the domain.
What is migrated
Section titled “What is migrated”| WordPress / WooCommerce | Shopify | Details |
|---|---|---|
| Products (simple and variable) | Products | Title, description, status, tags, category as product type, images, SKU, barcode (GTIN/EAN/UPC), price and sale price (as compare-at price), weight, tax status, stock quantity (in your main location), backorders, SEO title and description. |
| Variations | Variants | Attributes become options (up to 3). “Any size” variations are expanded into real combinations. |
| Product categories | Collections | Manual collections with the category’s products, description and image. |
| Customers | Customers | Name, email, phone, billing and shipping addresses. |
| Orders | Orders | Historical copy with line items (linked to the migrated variants by SKU), shipping, fees, coupon discount, tax and payment. No emails are sent to customers. |
| Coupons | Discount codes | Percentage, fixed cart, fixed product and free shipping; expiry date, usage limits, minimum spend, product and category restrictions. |
| Posts | Blog articles | Title, content, excerpt, author, publish date, featured image, categories and tags (as article tags), SEO. All posts go into one Shopify blog (default: News). |
| Pages | Pages | Title, content, publish date, SEO. |
| Old URLs | URL redirects | Products, categories, posts, pages, the /shop/ page and /my-account/ redirect to their Shopify addresses (/cart and /checkout already match). |
- Images inside descriptions and posts are copied to Shopify → Content → Files, and the links are updated, so nothing breaks when the old site goes offline.
- The WordPress ID of every record is saved in the
wordpress.idmetafield. - SEO title and description are taken from the Yoast SEO plugin, if it is installed.
- Drafts stay drafts: draft products and posts are migrated but not published.
Not migrated: themes and design, plugins and their settings, product reviews, post comments, payment and shipping settings, taxes, customer passwords (customers set a new password in Shopify), grouped products.
Before you start
Section titled “Before you start”- WordPress 5.6 or newer with the REST API enabled (it is on by default). For store data - WooCommerce 3.5 or newer.
- A WordPress user with the Administrator or Shop manager role.
- The site must be reachable from the internet - DataEase cannot connect to
localhostor an intranet address. Keep it online until the migration finishes: images are downloaded from it. - Your Shopify store should use the same currency as WooCommerce - prices are copied as-is, without conversion.
Step 1. Create an application password in WordPress
Section titled “Step 1. Create an application password in WordPress”- In WordPress admin, open Users → Profile (or edit the admin user).
- Scroll to Application Passwords.
- Enter a name, for example
DataEase, and click Add New Application Password. - Copy the password that appears (it looks like
abcd EFGH 1234 ijkl MNOP 5678). WordPress shows it only once.
An application password is not your login password: it only works for the API and can be revoked at any time.
No “Application Passwords” section? It is hidden when the site does not use HTTPS, or a security plugin disables it (for example, Wordfence → Login Security → Disable application passwords). Enable HTTPS or allow application passwords while you migrate.
Step 2. Connect the site in DataEase
Section titled “Step 2. Connect the site in DataEase”- In Shopify, open DataEase → Store transfers.
- Choose the From WordPress / WooCommerce tab.
- Enter your site address (for example
https://myshop.com), the WordPress username and the application password. - Click Check connection.
DataEase shows the site name, whether WooCommerce was found, and how many records of each type the site has.
Step 3. Choose what to migrate and start
Section titled “Step 3. Choose what to migrate and start”- Tick the data you want to move - everything found on the site is selected by default.
- If you migrate blog posts, choose the Shopify blog they go into.
- Click Start migration.
The migration runs in the background - you can close the page. The Transfers list shows which data is being migrated right now, and you can Cancel at any moment.
Step 4. Check the result
Section titled “Step 4. Check the result”When the migration finishes, the list shows how many records were migrated for each type, with warnings and errors and their reasons - for example Orders: 1250 ⚠3. Typical warnings are coupons with settings Shopify does not support, or records that were already migrated earlier.
After the migration
Section titled “After the migration”- Review products, collections and prices in Shopify admin.
- Set up payments, shipping and taxes - they are not migrated.
- Choose and customize a theme, then add the migrated pages and collections to the navigation menu.
- Connect your domain to Shopify. Old links like
/product/red-jacket/now redirect to/products/red-jacket. - Revoke the application password in WordPress (Users → Profile → Application Passwords → Revoke). DataEase deletes it from its own database as soon as the migration finishes.
Running the migration again
Section titled “Running the migration again”You can run the migration again at any time - for example, right before switching the domain to pick up new orders. Existing records are updated, not duplicated:
- products, collections, customers, pages and blog posts are matched by handle or email and updated;
- orders that were migrated before, existing discount codes and existing redirects are skipped (you will see a warning with their number);
- images already copied to Shopify Files are reused.
How data is mapped
Section titled “How data is mapped”Products
Section titled “Products”- Status: Published → Active; Draft, Pending and Private → Draft. Products hidden from the catalog are not published to the Online Store.
- Prices: the sale price becomes the Shopify price, and the regular price becomes the compare-at price.
- Stock: quantities go to your main location. Products with Allow backorders keep selling when out of stock.
- Options: a variable product’s attributes (Color, Size, …) become options. Shopify supports up to 3 options and 2048 variants per product.
- Vendor: taken from the WooCommerce Brands taxonomy, if used.
- The short description is saved in the
wordpress.short_descriptionmetafield.
Orders
Section titled “Orders”| WooCommerce status | Shopify payment status | Fulfillment |
|---|---|---|
| Pending payment, On hold | Pending | Unfulfilled |
| Processing | Paid | Unfulfilled |
| Completed | Paid | Fulfilled |
| Refunded | Refunded | - |
| Cancelled | Voided | - |
Failed orders and checkout drafts are not migrated. Every migrated order gets the wordpress tag and a woo-<status> tag (for example woo-completed), and keeps its WooCommerce number (#1045).
Coupons
Section titled “Coupons”| WooCommerce | Shopify |
|---|---|
| Percentage discount | Percentage off |
| Fixed cart discount | Fixed amount off the order |
| Fixed product discount | Fixed amount off each eligible item |
| Free shipping (amount 0) | Free shipping discount |
| Individual use only | Does not combine with other discounts |
| Usage limit per user = 1 | Limit to one use per customer |
Maximum spend, email restrictions, excluded products and per-user limits above 1 have no equivalent in Shopify; such coupons are migrated without these settings, with a warning.
Troubleshooting
Section titled “Troubleshooting”| Message | What to do |
|---|---|
| WordPress rejected the credentials | Check the username and create a new application password. Some hosts strip the Authorization header - ask the host to pass it to PHP. |
| WooCommerce REST API was not found | Make sure WooCommerce is active. Only posts, pages and redirects can be migrated without it. |
| returned a non-JSON response | A security plugin, firewall or cache blocks the REST API. Allow /wp-json/ requests while you migrate. |
| must be reachable from the internet | Use the public address of the site, not localhost or an internal IP. |
| Image … was not copied | The image URL was not reachable. The post keeps the old link - upload the image in Content → Files manually. |
Do customers get emails? No. Customers and orders are created without notifications or invitations.
Is my WordPress site changed? No. DataEase only reads from it.
Is the application password stored? Only while the migration runs, encrypted. It is deleted when the migration finishes, fails or is cancelled.
Can I migrate only the blog? Yes. WordPress without WooCommerce works too: select Blog posts, Pages and Redirects.
Moving from Magento or between two Shopify stores instead? See Migrate from Magento and Store transfers.
A real run with numbers: migrating a WooCommerce store to Shopify in under 90 seconds. Release notes: WordPress / WooCommerce migration.