Migrate from Magento to Shopify
DataEase moves a Magento 2 store (Magento Open Source, Adobe Commerce or Mage-OS) to Shopify straight from Magento’s REST API - no extensions, no CSV exports, no spreadsheets. You create an integration in Magento, paste its keys, 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”| Magento | Shopify | Details |
|---|---|---|
| Simple, virtual and downloadable products | Products | Name, description, status, visibility, first category as product type, images (main image first), SKU, price and special price (as compare-at price), cost, weight, tax class, stock quantity (in your main location), backorders, brand (manufacturer), country of manufacture, SEO title and description. |
| Configurable products | Products with variants | Configurable attributes (Color, Size, …) become options (up to 3), each enabled child product becomes a variant with its own SKU, price, stock and image. |
| Categories | Collections | Manual collections with the category’s products, description, image and SEO. Nested categories become separate collections. |
| Customers | Customers | Name, email, phone, all addresses (default shipping address first), newsletter subscription. The customer group is added as a tag, for example magento-group-wholesale. |
| Orders | Orders | Historical copy with line items (linked to the migrated variants by SKU), variant options, shipping, discount, tax, payment and refunds. No emails are sent to customers. |
| Cart price rules | Discounts | Rules with a coupon become discount codes, rules without a coupon become automatic discounts: percentage, fixed amount per item or per cart, free shipping, minimum subtotal or quantity, shipping country, product and category conditions, dates and usage limits. |
| CMS pages | Pages | Title, content, status, SEO. |
| Old URLs | URL redirects | Products and categories (with the .html suffix from your store settings), CMS pages, the cart, the customer account and search redirect to their Shopify addresses. |
- Images inside descriptions and pages are copied to Shopify → Content → Files, and the links are updated, so nothing breaks when the old store goes offline.
- Magento template tags are converted:
{{media url="…"}}becomes the image address,{{store url="…"}}becomes a link; widgets and CMS blocks are removed. - The Magento ID of every record is saved in the
magento.idmetafield. - Disabled products are migrated as drafts. Products that are not visible individually, or not assigned to the store’s website, are migrated but not published to the Online Store.
Not migrated: themes and design, extensions and their data (blogs, reviews, reward points), bundle, grouped and gift card products, customizable options, tier and catalog prices, store views in other languages, payment, shipping and tax settings, customer passwords (customers set a new password in Shopify).
Before you start
Section titled “Before you start”- Magento 2.3 or newer (Magento Open Source, Adobe Commerce or Mage-OS).
- A Magento admin user who can create integrations (System → Extensions → Integrations).
- The store 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 Magento - prices are copied as-is, without conversion.
Step 1. Create an integration in Magento
Section titled “Step 1. Create an integration in Magento”- In Magento admin, open System → Extensions → Integrations and click Add New Integration.
- Enter a name, for example
DataEase, and your admin password in Your Password. - Open the API tab and set Resource Access to All.
- Click Save, then click Activate next to the new integration and Allow.
- Magento shows four keys: Consumer Key, Consumer Secret, Access Token and Access Token Secret. Copy all four.
The keys only give access to the API and can be revoked at any time. DataEase only reads data - it never changes anything in Magento.
Prefer to give less access? You can select resources instead of All: stores, catalog (products, categories and inventory), customers and customer groups, sales orders, cart price rules and CMS pages. If something is missing, DataEase shows which Magento resource to add.
Step 2. Connect the store in DataEase
Section titled “Step 2. Connect the store in DataEase”- In Shopify, open DataEase → Store transfers.
- Choose the From Magento tab.
- Enter your store address (for example
https://myshop.com) and the four integration keys. - Click Check connection.
DataEase shows the store name, the store view it reads from and how many records of each type the store 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 in the store is selected by default.
- 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 cart price rules with conditions 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
/joust-duffle-bag.htmlnow redirect to/products/joust-duffle-bag. - Delete the integration in Magento (System → Extensions → Integrations). DataEase deletes the keys 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 and pages are matched by handle or email and updated;
- orders that were migrated before, existing discount codes, automatic discounts with the same name 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”- Handle: the product’s URL key, so product addresses stay recognizable.
- Status: Enabled → Active; Disabled → Draft.
- Prices: an active special price becomes the Shopify price, and the regular price becomes the compare-at price. Special price dates are respected at the moment of migration.
- Stock: quantities go to your main location. Products with backorders allowed keep selling when out of stock.
- Options: a configurable product’s attributes become options in the same order, values in the order of the attribute options. Shopify supports up to 3 options and 2048 variants per product; products with more options are skipped with a warning. Disabled child products are not migrated.
- Tax: products with the None tax class are not taxable.
- The short description is saved in the
magento.short_descriptionmetafield.
Orders
Section titled “Orders”| Magento state | Shopify payment status | Fulfillment |
|---|---|---|
| Pending (new), On hold | Pending (or Paid, if invoiced) | Unfulfilled |
| Processing | Paid (or Partially paid) | Unfulfilled, or Fulfilled when everything is shipped |
| Complete | Paid | Fulfilled |
| Closed | Refunded (or Partially refunded) | - |
| Canceled | Voided | - |
The payment status is calculated from the amounts Magento recorded as paid and refunded. Orders with Pending payment or Payment review are not migrated. Every migrated order gets the magento tag and a magento-<status> tag (for example magento-complete), and keeps its Magento number (#000000145).
Cart price rules
Section titled “Cart price rules”| Magento | Shopify |
|---|---|
| Rule with a specific coupon | Discount code |
| Rule without a coupon | Automatic discount |
| Percent of product price discount | Percentage off |
| Fixed amount discount | Fixed amount off each eligible item |
| Fixed amount discount for whole cart | Fixed amount off the order |
| Free shipping (discount amount 0) | Free shipping discount |
| Condition Subtotal equals or greater than | Minimum purchase amount |
| Condition Total items quantity | Minimum quantity of items |
| Condition Shipping country (free shipping) | Shipping to selected countries |
| Action condition SKU or Category | Specific products or collections |
| Uses per coupon / Uses per customer = 1 | Usage limit / Limit to one use per customer |
| Discard subsequent rules | Does not combine with other discounts |
DataEase never makes a discount wider than it was in Magento. Rules limited to some customer groups, rules with conditions Shopify cannot express (payment method, cart attributes, combined conditions) and Buy X get Y rules are skipped with a warning - recreate them manually. Inactive rules and auto-generated coupon codes are not migrated.
Troubleshooting
Section titled “Troubleshooting”| Message | What to do |
|---|---|
| Magento rejected the integration keys | Check all four keys and make sure the integration is Active. If you re-authorized it, copy the new access token and secret. |
| The consumer isn’t authorized to access … | Edit the integration, set Resource Access to All (or add the resource from the message) and save. |
| Magento REST API endpoint … was not found | Check the store address - use the storefront address, not the admin URL. |
| returned a non-JSON response | A firewall, maintenance mode or a cache blocks the REST API. Allow /rest/ requests while you migrate. |
| must be reachable from the internet | Use the public address of the store, not localhost or an internal IP. |
| Image … was not copied | The image URL was not reachable. The page 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 Magento store changed? No. DataEase only reads from it.
Are the integration keys stored? Only while the migration runs, encrypted. They are deleted when the migration finishes, fails or is cancelled.
I have several websites or store views. Which one is migrated? The default store view of the default website: its names, descriptions, prices and URLs.
Moving from WordPress or between two Shopify stores instead? See Migrate from WordPress / WooCommerce and Store transfers.