Hosting and updates are billed separately
Dedicated hosting, security patches, backups, monitoring. On a hosted platform, all of that is folded into the subscription.
We pull products, variants, customers and orders via the Magento API, verify whether prices already include VAT, rebuild the features that lived in extensions, and redirect every old URL to its new address. Your Magento store stays live until launch day.
It means pulling data through the Magento API — via a dedicated integration, not the regular admin account, because 2FA blocks direct admin tokens — and writing it into Shopify, with automated verification at the end. We always check whether prices include VAT, because Magento's API typically returns prices without VAT. Every old URL from your sitemap or the url_rewrite table gets mapped to its new address with a permanent redirect. Grouped and configurable products, technical specs and categories get converted to their Shopify equivalents; custom extensions get rebuilt by hand, because there's no automatic path for them. It's quoted after a store review, usually takes 2–6 weeks, and your Magento store stays live until cutover.
Not because Magento is weak. Because maintaining it costs people and money a mid-sized store spends better on marketing.
Dedicated hosting, security patches, backups, monitoring. On a hosted platform, all of that is folded into the subscription.
A new section on the product page or a different promotion means a ticket to an agency. On Shopify, you handle many of those yourself from the editor.
Two-factor authentication, on by default, blocks getting a token straight from the admin account. Every data pull needs a dedicated, carefully managed integration.
An unpatched Magento install is a target. On a hosted platform, the security side of the system is the provider's job, not yours.
If none of this applies to you, you don't have a reason to migrate. We'll say so on the first call, even if it means we don't end up working together.
Not a generic export-import. Every data type has its own path through the Magento API, with its own pitfalls.
| What we move | How, technically |
|---|---|
| Products | Via the Magento API (GET /V1/products), with price, stock, status and image gallery; grouped products have no dedicated endpoint — read via the parent product's "associated" links. |
| Variants | Configurable products list their children via /V1/configurable-products/:sku/children; mapped onto Shopify's option system, capped at 3 option types per product. |
| Images | Each image's full URL (media base + catalog/product + file path) is downloaded and re-uploaded straight to Shopify, which re-hosts it on its own CDN. |
| Specs | Technical attributes (EAV) become Shopify metafields, with labels translated from the attribute's options — not the internal code. |
| Categories | The category tree becomes collections. Multi-level structure has no direct equivalent; it's rebuilt through the new theme's navigation menu. |
| Brands | If brand is a separate attribute (common in Magento), it becomes a metafield or a collection filter. |
| Customers | Via /V1/customers, with addresses and price group. Passwords can't be moved — see below. |
| Order history | Recreated as history, with current stock untouched (inventoryBehaviour: BYPASS), so units already sold don't get deducted again. |
| Pages | CMS pages (cmsPage) become Shopify pages; images in the content get re-hosted and internal links updated to the new addresses. |
| Blog | If the store has a news/blog module, articles become Shopify blog posts, with old addresses redirected. |
| Reviews | Magento has no REST API for reviews. Pulled via GraphQL (reviews on each product) or directly from the database tables, then imported into a dedicated Shopify reviews app. |
| Coupons | Catalog price rules get recreated as Shopify discounts; very complex multi-condition rules get simplified. |
| Redirects | Magento doesn't expose old URLs (url_rewrite) through an API. The source of truth is a direct database export or the existing sitemap, mapped one by one to the new addresses. |
| Google/Meta feeds | Reconnected with a Shopify feed app. If you want to keep your Google Ads history, you need a custom product identifier — see below. |
Four things have no direct technical path, no matter who does the migration.
Magento encrypts passwords (Argon2ID13, SHA256, or even MD5 on older accounts) in a way nobody — including Magento itself — can reverse. On new Shopify stores, this isn't a practical problem anymore: customers sign in with a one-time code emailed to them the first time they log in.
Shopify's API doesn't allow backdating an imported order's creation date. Old orders show up chronologically as "new" in the customer's account. We tag them invisibly so your new store's theme can hide or flag them separately.
The official Google & YouTube app generates a new product identifier you can't edit directly. If active ads rely on the old identifier, we use a third-party app with a custom ID or a parallel feed — an optional, separately priced add-on, not something we build in by default.
Page Builder {{widget}} directives embedded in old descriptions have no automatic Shopify equivalent. They get identified and rebuilt by hand, with an app or theme code — not "migrated".
These are exactly where a generic migration gets it wrong, by treating Magento like "any platform."
url_rewrite table isn't exposed via REST. We work from a direct database export or the existing sitemap.Once data is written to Shopify, we count and compare — we don't assume it "probably worked".
Order matters. Most problems happen when the domain switches before everything else is verified.
We re-run extraction for any order, stock change or new customer that appeared on Magento since the last pull.
Technically redirecting the store's address, ideally during a low-traffic window.
An old product URL lands in the right place, cart and checkout work, prices and stock are correct, an existing customer can log in.
We turn on the new product feed and verify the ad history isn't lost.
Tracking scripts (Google Ads, Meta, Analytics) installed correctly on the new store, so running ads keep counting sales without a gap.
The price is quoted after we see your store — there's no fixed rate that works fairly for everyone.
As a reference, a new Shopify store build starts from €950 + VAT. A full migration is typically a larger project, because it includes verifying the old data too.
If your Magento store runs well, you have a developer handling updates, and the real monthly cost doesn't exceed what you'd pay on a hosted platform plus a few apps, you don't have a technical reason to migrate. Migration makes sense once maintenance — hosting, security patches, a developer for every small change — has grown to cost more than a Shopify subscription, not "because Shopify is trendy." A small catalog, with no custom extensions and no meaningful organic traffic to protect, can try a simpler import with lower risk.
This is where migrations fail. Not in the product transfer, but in old URLs left without a redirect.
We pull every existing URL from the sitemap and, if needed, from a database export, with each one's traffic and rankings.
Every old URL gets a new destination. Anything without a direct match goes to the closest matching category, not the homepage.
Set at cutover, tested in bulk, checked for chains or loops.
New sitemap submitted to Search Console and Bing, indexing errors tracked daily for the first few weeks.
See how we handle the same work for other platforms: WooCommerce migration or PrestaShop migration.
Can't find your answer? Message us on WhatsApp at +40 785 735 820.
It's quoted after we review your store, because the price depends on how many products and variants you have, how many custom extensions need replacing, and how clean your current URL structure is. You get a fixed quote before we start. As a reference, a new Shopify store build starts from €950 + VAT.
The risk drops a lot when the migration is done properly. We pull every URL from your current sitemap, map each one to its new address and set up permanent redirects, keeping the titles and copy that were already ranking. A temporary dip of a few weeks is normal; pages disappearing without a redirect is not.
We never assume: we check directly in your Magento admin whether customer-facing prices include VAT. Many Magento installs return prices without VAT from the API, and writing that value straight into Shopify would make products appear cheaper than they really were. We fix this before any price is written.
Products with variants, images and technical specs transfer, along with categories, customers and order history. Passwords don't transfer (they're encrypted beyond recovery), and neither do Magento extensions: every custom-built feature has to be rebuilt as a Shopify app or theme code. That's exactly what we check before quoting.
Usually two to six weeks, depending on the number of products, how many are grouped or configurable, and how many special features need rebuilding. Your Magento store stays live until launch day, so you don't lose sales while we work.
We recreate them in Shopify as history, without touching current stock. The real limitation: Shopify won't let you backdate an order's creation date, so they show up chronologically as "new" in the customer's account. We tag them so your new theme can treat them separately if you want that.
If it works and you have a developer maintaining it, you don't need to. People migrate because they're paying separately for hosting, security patches and every small change, and the total cost ends up higher than a hosted platform. If that's not your situation, we'll tell you honestly it's not worth it.
We look at how many products you have, which extensions you use and what your current URLs look like, then tell you what can move, what needs rebuilding and what it costs. The review doesn't commit you to anything.