Magento → Shopify
Move a Magento or Adobe Commerce catalog to Shopify with product and customer CSVs, then orders through an app or the Order API. Themes, checkout code, and price rules stay behind.
Should you make this move?
Both platforms have a case. Compare what you gain with what you give up before scheduling the cutover.
Magento
- Open-source and Adobe Commerce editions give you a deep catalog, multi-store views, and checkout you can change in code
- Core catalog, order, customer, and promotion workflows are integrated
- Hosting, upgrades, and extensions stay with your team, and a CSV export is not a running storefront
- Deep customization usually increases extension, agency, or engineering costs
Shopify
- A polished hosted commerce platform has an unmatched app and partner ecosystem
- Core catalog, order, customer, and promotion workflows are integrated
- Transaction economics, app dependency, and checkout constraints reduce control
- Deep customization usually increases extension, agency, or engineering costs
Shopify: A polished hosted commerce platform has an unmatched app and partner ecosystem. This removes a major source-side concern: Hosting, upgrades, and extensions stay with your team, and a CSV export is not a running storefront.
What you lose: Open-source and Adobe Commerce editions give you a deep catalog, multi-store views, and checkout you can change in code. What you inherit: Transaction economics, app dependency, and checkout constraints reduce control.
Jump to a section
Know the shape of the move.
This timeline assumes
- One Magento Open Source or Adobe Commerce store, with admin access and a working cron for exports.
- You can create a Shopify store and keep Magento taking orders until the pilot matches.
- The catalog fits Shopify's product model, or you have a plan for configurable products that do not.
- The site already documents Magento → WooCommerce if you want WordPress instead of Shopify.
What survives the move.
“Partial” and “manual” are not footnotes. They are work that must be scheduled and verified.
| Item | Outcome | Impact | What happens | Mitigation |
|---|---|---|---|---|
| Products and variants | partial | critical | Adobe's export writes a product CSV from System > Data Transfer > Export. Shopify imports a product CSV or a migration app. A variant row fails when an option is missing. | Pilot simple, configurable, and grouped products. Fix option names before the full file. |
| Customers | partial | critical | Shopify's customer CSV must be UTF-8 and 15 MB or smaller. Overwrite replaces the whole profile, including tags, when the email or phone already exists. | Split large lists. Import a tagged pilot before you check overwrite. |
| Historical orders | manual | critical | Shopify's migrate guide does not put orders in the product or customer CSV. Use a migration app, the Order API, or the Transaction API. Import products first, then customers, then orders, or the links break. Imported orders can fire new-order notifications. | Silence notifications for the import. Bring at least the return window. Shopify Plus suggests two to five years. |
| Gift cards and store credit | manual | high | Shopify lists gift cards, certificates, and store credit as their own migration path, through an app or the GiftCard API. | Export open balances from Magento and reconcile them after import. |
| Pages and blogs | partial | high | Shopify says short pages can be copied. Larger sets use a migration app, the Page API, or the Blog and Article APIs. | Inventory URLs first. Copy or import, then diff titles and body HTML. |
| Theme and checkout code | lost | critical | Magento themes, layout XML, and checkout modules do not become a Shopify theme. Shopify's migrate guide moves content and records, not the storefront code. | Rebuild the theme and checkout on a preview store before DNS moves. |
| Price rules and advanced pricing | manual | high | Adobe exports Advanced Pricing as its own entity, separate from products. Shopify discounts and catalogs are different objects. | Export the rules as evidence. Recreate the ones that still apply and test a cart. |
| Stock sources | partial | high | Adobe lists Stock Sources as its own export. Shopify inventory lives on locations. | Map each source to a location and compare on-hand counts. |
| URL rewrites | manual | critical | Magento URL rewrites do not ride along in the product CSV. Shopify needs redirects for paths you are not keeping. | Export the rewrite table. Add redirects before you change DNS. |
| Extensions and integrations | manual | critical | Payment, tax, shipping, and ERP connectors are not rows in Adobe's product export. Shopify's content list does not include them. | List every live connector. Rebuild it on the preview store and run a real order. |
| Export job itself | manual | high | Adobe's export runs in the background and lands in var/export, or import_export/export when remote storage is on. Cron has to be running or the file never appears. | Confirm cron, then hash the CSV before you edit it. |
Where each thing goes.
| Source | Destination | Method | Notes |
|---|---|---|---|
| Products export | Shopify product CSV or Product API | transform | Map SKU, options, price, and inventory. Unpublished Magento products stay hidden until you publish them. |
| Customers Main File | Shopify customer CSV | transform | UTF-8, 15 MB chunks. Email is the match key if you overwrite. |
| Customer Addresses | Customer address columns | transform | Adobe exports addresses as a separate entity. |
| Orders | Order API, Transaction API, or a migration app | manual | Import after products and customers. Mute new-order mail. |
| Advanced Pricing | Shopify discounts or catalogs | manual | Keep the CSV as evidence. Rebuild the rules. |
| Stock Sources | Shopify locations | transform | Compare quantities per location. |
| CMS pages and blocks | Shopify pages | manual | Copy short pages. Use the Page API for the rest. |
| Blog | Shopify blog articles | manual | Blog API or an app. Check authors and images. |
| URL rewrites | Shopify URL redirects | manual | One redirect per path you are dropping. |
Make the move recoverable.
Create the source-of-truth backup
Keep a Magento export you can reopen if the Shopify import is wrong.
- Confirm cron, then export Products, Customers Main File, Customer Addresses, Advanced Pricing, and Stock Sources.
- Download the files from var/export and record counts and hashes.
- Export URL rewrites, open gift-card balances, and a list of live integrations.
- Take a database backup before the final order freeze.
- Leave Magento on its current host until rollback closes.
Proof to capture: A manifest lists each CSV, its row count, its hash, and the Magento admin who ran the export.
Catalog CSV
Turn Adobe's product export into a Shopify product file that imports.
- Open the Magento product CSV and Shopify's sample product CSV side by side.
- Map SKU, title, options, price, and inventory. Drop columns Shopify will ignore.
- Import on a preview store. Read the error rows for missing variant options.
- Publish only the products that should be visible. Hidden imports stay unpublished.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
Order load
Attach historical orders to the customers and products you already imported.
- Finish products, then customers.
- Turn off new-order notifications.
- Load the return window first, then older orders if you still need them.
- Open five orders and confirm the customer, SKUs, and totals.
Proof to capture: Save the input, output, command or tool settings, warnings, and final item counts.
The things most likely to hurt.
These are operating limits. Treat every “Stop if” condition as a blocked migration, not a suggestion.
Orders import before the catalog
An order row arrives while the SKU or customer is still missing.
- Consequence
- History does not link, and support cannot see what the customer bought.
- Mitigation
- Follow Shopify's order: products, customers, then orders.
Stop if: A pilot order has no customer or no line items.
Overwrite replaces live customers
The customer CSV matches an email that already exists on Shopify.
- Consequence
- Shopify replaces the whole profile, including tags from an earlier import.
- Mitigation
- Tag the file. Run it on a copy of the store first.
Stop if: A known customer loses addresses or tags you meant to keep.
Integrations are still on Magento
Checkout works on Shopify while tax, shipping, or ERP still talks to Magento.
- Consequence
- Orders have nowhere to go, or they are created twice.
- Mitigation
- Place one paid order on the preview store through every connector.
Stop if: Any live connector has not been tested on Shopify.
Do the work in this order.
- Days 1 to 5 · inventory
Inventory the store
8 to 16 hours active3 to 5 days elapsedOwner review of what to drop waiting- Count products, customers, open orders, gift cards, and connectors.
- Decide which history you will import.
Depends on: Magento admin and Shopify store access
Stop / go checkpointExport?
Go when: Every record type has an owner and a Shopify destination.
Stop when: A live connector has no Shopify replacement.
- Days 5 to 8 · backup
Export and hash
6 to 12 hours active2 to 4 days elapsedAdobe's background export waiting- Run each entity export.
- Save hashes and a database backup.
Depends on: Cron is running
Stop / go checkpointTransform?
Go when: Each CSV opens and the row count matches the admin.
Stop when: var/export is empty or a file is truncated.
- Days 8 to 25 · pilot
Preview store
16 to 40 hours active2 to 4 weeks elapsedTheme and connector work waiting- Import a slice of products and customers.
- Place a test order through each connector.
- Build the redirect list.
Depends on: Hashed exports
Stop / go checkpointFreeze Magento?
Go when: The pilot order, a variant product, and a customer profile match.
Stop when: A variant file fails or a connector cannot create an order.
- Days 25 to 30 · cutover
Final import and DNS
6 to 12 hours active1 to 3 days elapsedOrder import and DNS waiting- Freeze Magento checkout.
- Import the final delta.
- Point the domain at Shopify and watch redirects.
Depends on: Passed pilot
Stop / go checkpointShopify owns checkout?
Go when: A new order exists only on Shopify and redirects resolve.
Stop when: Magento is still taking payment.
- Days 30 to 40 · observe
Watch a sales week
4 to 8 hours active7 days elapsedReal orders waiting- Compare order counts and payment captures.
- Keep Magento read-only.
Depends on: DNS cutover
Stop / go checkpointClose rollback?
Go when: A full sales cycle matches the expected connectors.
Stop when: Orders duplicate or a redirect with traffic 404s.
Cut over with a way back.
Cutover
Make Shopify the only store taking payment, with the final Magento delta already imported.
- Put Magento in maintenance for checkout and stop its cron from creating orders.
- Export the final product, customer, and order delta.
- Import products, then customers, then orders, with new-order mail off.
- Switch DNS and confirm the certificate.
- Place one real order and confirm it reaches the ERP or shipping tool.
Proof to capture: Shopify has the new order. Magento checkout is closed. The redirect sample returns the pages you approved.
Rollback
Send customers back to Magento without losing Shopify orders placed after the switch.
- Stop Shopify from taking new checkout if you are reverting.
- Point DNS back at Magento.
- Export Shopify orders created after the freeze.
- Review them before anyone re-enters them in Magento.
- Run the same order and redirect checks against Magento.
Proof to capture: Magento is the only store taking payment, and post-cutover Shopify orders are listed.
- A paid order exists on both stores
- A top URL 404s
- Customer profiles were overwritten
- A connector did not receive the Shopify order
- Variant products customers can buy are missing options
Prove the migration worked.
Every blocking check must pass. Capture the evidence before cleanup begins.
| Pass | ID | Check | Method | Expected result | Evidence |
|---|---|---|---|---|---|
V-01Blocking | SKU and price sample | Compare 25 SKUs across simple and configurable types. | Title, price, and inventory match the approved map. | SKU sheet. | |
V-02Blocking | Options imported | Open a product that failed once and one that has two options. | Shopify shows the options. The error file is empty for the final import. | Import result. | |
V-03Blocking | Profile round trip | Look up five emails, including one that was overwritten on purpose. | Addresses and tags match the CSV you meant to load. | Customer admin screenshot. | |
V-04Blocking | History links | Open five historical orders and one new order. | Customer, SKUs, and totals match. Staff mail did not fire for the import. | Order admin. | |
V-05Blocking | One paid path | Buy a product with the live payment and shipping connectors on the preview theme. | One capture, one fulfillment record. | Order and gateway receipt. | |
V-06Blocking | Top Magento paths | Request the top catalog and CMS URLs. | Each path is the same URL or a redirect you listed. | Redirect log. | |
V-07Blocking | Location counts | Compare stock sources to Shopify locations for ten SKUs. | On-hand matches within the rule you wrote down. | Stock sheet. | |
V-08Blocking | Magento checkout is closed | Try to place an order on the old host. | Magento does not capture a new payment. | Checkout attempt. |
Remove the scaffolding safely.
Safe after: One sales week on Shopify, with redirects and connectors still matching the pilot.
- Archive the Magento CSVs, the database backup, and the redirect map.
- Revoke the migration app's API access.
- Remove Magento cron and payment webhooks.
- Keep the Magento admin readable until finance signs off on historical orders.
- Cancel Magento hosting only after that window.
- Schedule the next redirect and discount review.
When the plan met reality.
First-hand accounts are preferred. Vendor case studies are labeled, and every note below is an editorial paraphrase—follow the link for the full context.
On 17 April 2014, Bob McKay wrote about a customer's Magento store with more than 5,500 products, images, prices, and long descriptions. Typing them into Shopify was not practical, and a translation script looked hard. He found a free Magento importer in Shopify's product import screen, loaded the catalog into a trial store, and then planned Shopify API calls in PHP because some fields had not mapped the way he wanted. The post stops at that second pass.
- Treat a product import as a first load. He still needed the Shopify API because some fields mapped differently than he wanted.
- Count the catalog before you promise a manual rebuild. More than 5,500 products with descriptions made re-entry impractical.
- The 2014 importer got the products into a trial store. It did not finish the field mapping.
- This report is old. Check the importer you plan to use against current Shopify docs before you depend on it.
Verify against the primary material.
Platform behavior changes. Check these sources and the review dates above before executing a production migration.
- Shopify: migrate to ShopifyAccessed 2026-11-03
- Shopify: import and export productsAccessed 2026-11-03
- Shopify: import and export customer listsAccessed 2026-11-03
- Adobe Commerce: export dataAccessed 2026-11-03
- Shopify Plus: plan launch checklistAccessed 2026-11-03