← All guides10 min read

Magento to Shopify migration: the complete guide

A step-by-step Magento to Shopify migration guide covering credentials, product mapping, configurable products, customer data, orders, redirects, and go-live verification with Graftport.

Moving from Magento to Shopify is one of the most consequential infrastructure decisions an e-commerce business makes. The data model differences are significant, the risk of losing organic rankings or customer records is real, and the window for go-live is usually a single night. This guide walks through every step of a Magento to Shopify migration using Graftport — from credentials to cut-over verification — so you know exactly what happens and when.

Graftport supports Magento 2.3 and 2.4. All source reads go through the standard Magento Admin REST API. No custom extensions, no FTP access, no direct database connection is required.

Before you start

Two things to have ready before opening the New migration wizard:

A read-only Magento admin user. Create a service account in Magento Admin → System → All Users with a custom role that grants read access to Catalog, Customers, Sales, Marketing, and Stores. The user needs no write or configuration access. Using a dedicated service account means you can revoke Graftport's access later without affecting any person's day-to-day login.

A Shopify destination store with an Admin API token. In the destination Shopify store, install a custom app (Settings → Apps and Sales Channels → Develop Apps) and issue an access token with read/write scopes for products, collections, customers, orders, and URL redirects. The scope list that covers a full migration is on the Destination → Shopify page in the engineering docs.

Setting up the migration

In app.graftport.com, click New migration. Step through the wizard:

  1. Basics — Give the migration a name (the merchant's brand name works well) and pick Magento as the source platform.
  2. Connect source — Enter the store domain (bare hostname, no protocol), the admin username, and the admin password for the service account you created.
  3. Connect destination — Paste the Shopify shpat_… access token.
  4. Choose resources — Enable the resource types you're migrating. See the section below on what each resource type covers.

The wizard validates the source and destination credentials before it lets you finish. A credential error here is much cheaper to fix than discovering it during a go-live run.

Resources: what Graftport migrates

Products and variants

The trickiest part of a Magento to Shopify product migration is the configurable product / simple product relationship. Magento models a product with size and color options as a configurable product parent with multiple simple product children. Shopify models the same item as one product with variants.

Graftport's default products mapping handles this automatically: it reads the configurable parent and its child simples together, then emits a single Shopify product with one variant per unique option combination. You do not need to edit the mapping to get working variants on most Magento stores.

What the default mapping carries across:

  • Product title, description (HTML preserved), and vendor
  • All variants with their option labels, prices, compare-at prices, and SKUs
  • Inventory quantity (summed across Magento sources into a single Shopify location — fork the mapping if the destination has multiple locations)
  • Product images (pulled from the Magento media URL)
  • Metafields for custom attributes — see mapping Magento custom attributes to Shopify metafields for the mapping approach

Collections

Magento categories become Shopify collections. The default mapping preserves the category hierarchy as nested collections. Category images and descriptions carry across.

Customers

Magento customer accounts migrate with name, email, billing and shipping addresses, and account creation date. Email marketing consent status is read from the Magento newsletter subscriber table where available.

Orders

Order history migrates with line items, tax lines, shipping lines, fulfilment status, and payment method. Refunds are included. Orders load as historical records — they do not trigger Shopify new-order notifications if you follow the go-live step below.

One important preparation: disable Shopify Staff notifications before loading orders. Go to Settings → Notifications in the destination Shopify admin and turn off staff order emails. Re-enable them after the load finishes. Without this step, every order load event triggers an email to every staff member — often thousands of emails on a large store.

URL redirects

Magento's URL key structure (/catalog/product/view/id/123 or the SEO-friendly url_key format) differs from Shopify's /products/handle format. Graftport captures the source URL keys from the url_key attribute per entity and from the url_rewrite table, then creates 301 redirects in Shopify's native redirect store. This is the primary mechanism that protects your organic rankings through the transition.

See Preserving SEO during a Shopify replatform for the full redirect verification workflow.

Running the migration

The recommended sequence is:

1. Dry run first. Start a full run (extract + transform + load) with the dry-run flag on. This pulls all data from Magento, runs it through the mapping, and shows you the count and shape of what would land in Shopify — without writing a single record to the destination. Check product counts, look at a few sample records, and confirm the variant structure looks right before committing.

2. Staging run. With dry-run off, run against a staging Shopify store (a development or partner store). Walk through the product catalogue, check a sample of customer records, and verify that the top-ranking URLs from Search Console have redirects in place. The pre-go-live checklist covers the full verification drill.

3. Re-run to pick up delta. In the weeks between the staging run and go-live, Magento continues to receive orders and product updates. The day of go-live, run extract again against the live Magento store to pick up the delta, then transform and load to the production destination. Because Graftport tracks every loaded record by its source identity, records already on staging are skipped — only new and changed data costs anything.

4. Go-live. Once the final load reports succeeded, flip DNS to the destination Shopify store. See the cut-over runbook in Re-running a migration on go-live night for the hour-by-hour timing sequence.

Multi-store views

Magento's multi-store architecture (websites → stores → store views) does not have a direct equivalent in standard Shopify. Graftport extracts data from the default store view by default. If the merchant uses multiple store views for localised content (different languages or different pricing per region), the per-view overrides need to be expressed in the mapping via a forked template.

If you're migrating to Shopify Plus — which supports multiple markets with localised pricing, languages, and domains — read Migrating to Shopify Plus with Graftport for how the Markets setup interacts with a multi-store-view Magento source.

Custom attributes and metafields

Magento's product attribute system allows merchants to add arbitrary attributes to any entity type. Shopify stores these as metafields. The mapping between a Magento attribute code and a Shopify metafield namespace/key is something you configure in the products mapping.

The guide on mapping Magento custom attributes to Shopify metafields covers the full mapping approach, including how to handle attribute sets that differ by product family and what to do with EAV attribute values that are not strings.

What Graftport does not migrate automatically

A few Magento capabilities require decisions before migration and are not covered by the default templates:

Configurable product options beyond size/color. The default mapping handles up to three option dimensions. Magento stores occasionally have four or five — these need a forked mapping to flatten correctly into Shopify's three-option limit.

Tier pricing and group pricing. Magento supports customer-group-specific pricing. Shopify's equivalent is B2B pricing on Shopify Plus. The default mapping uses the base price; tier/group prices need a custom mapping expression or a post-migration Shopify app.

Gift cards. Graftport supports gift cards as a resource type, but they are opt-in and require an additional Shopify permission scope (write_gift_cards). Enable the gift cards resource in the migration wizard and add the scope to the destination token before running.

Ready to start?

The fastest way to see a Magento to Shopify migration in action is to set one up: connect a Magento source, run a dry-run, and inspect the output. The same platform your team will use on go-live night.

Get started at app.graftport.com


Related reading:

Ready to migrate?

Connect a source store, dry-run a migration, see the exact Shopify result before a single record lands. The same platform your team will use on go-live night.

Get started See the calculator
Related guides
Using the Graftport CLI with Claude Code: install to first publish
Set up the Graftport CLI and migration-engineer skill in Claude Code, then drive a real Shopify migration through the validate and publish l
Human approval gates for AI Shopify migrations: the Graftport contract
Why an AI coding agent should never push to Shopify on its own, and how Graftport's two-tier CLI contract enforces a human gate on every cos
Automating JSONata Shopify mapping with an AI coding agent
How the Graftport CLI lets an AI agent investigate source rows, fix JSONata mapping errors against structured validation codes, and publish