What moving a Shopify Plus store to Medusa involves
A merchant usually considers Medusa because they want a headless storefront they control, or because a licensing position or data residency requirement makes a hosted platform harder to accept. The data moves through CSV and API exports, but checkout logic, apps and the storefront are rebuilt. Products, customers and orders can be exported from the Shopify admin as CSV files, and customers are capped at 15 MB per file, so larger stores will split files or use the Admin API. Product images are not in the product CSV, so keep the Shopify store live until images have been imported from their public URLs. Shopify Functions, apps and theme logic do not carry over as code. Each one needs a Medusa module, workflow or storefront equivalent designed and tested before cutover.
The work is usually done by in-house platform engineers with an implementation partner for the parts that are new to the team. Medusa's core framework is MIT licensed, so the commerce logic and modules are open for your team to read and change. The caveat is that Enterprise Edition features based on role-based access control require a commercial agreement with MedusaJS, Inc., so confirm whether your admin permission model depends on those features before you commit to a design. Ask the vendor and your own legal team to confirm the current terms in writing.
The honest short answer is that effort is driven by how much custom checkout, discount and app behavior the Shopify store relies on, and by how much of the storefront you rebuild. Plan for running two server instances (API and admin in server mode, background tasks in worker mode), plus PostgreSQL, Redis and S3-compatible file storage, all of which you now operate. Risk concentrates in order history, tax and payment mapping, and redirects from old URLs. Ask any partner for a written scope that lists each Shopify app and Function, its Medusa replacement, and the test evidence for checkout before go-live.
Which Shopify Plus capabilities map to Medusa, and which need rework
This table compares the main Shopify Plus capabilities with their Medusa counterparts and labels each row as clean, needs rework or gap. Use it to scope the build, then confirm each row against the current Medusa release (v2.21.2 was released on September 28, 2026) rather than assuming parity. B2B, marketplace and point-of-sale support are noted where they change the answer.
| Shopify Plus capability | Medusa equivalent | Status and what to confirm |
|---|---|---|
| Hosted checkout | Storefront checkout built on Medusa cart and order modules and workflows | Needs rework: you build and host the checkout flow and its payment integrations yourself |
| Products and variants | Product catalog module with product and variant records | Clean for core data: confirm how your option combinations and variant limits map |
| Metafields | Custom data models and module extensions | Needs rework: define each metafield as a schema field or linked data before import |
| Customers | Customer module with accounts and addresses | Clean for core fields: confirm handling of tags and password migration with your auth setup |
| Orders | Order module and order history records | Needs rework: historical orders import as data, not as live Shopify order objects |
| Discounts and automatic discounts | Promotion module and pricing rules | Needs rework: rebuild automatic discount logic as promotions and confirm stacking rules |
| Shopify Functions | Custom workflows, subscribers and API routes | Gap: no direct runtime equivalent, so rewrite each function as code you own and test |
| Shopify apps | Medusa modules, plugins or third-party services | Gap for most apps: inventory each app and decide to rebuild, replace or drop it |
| Themes and admin | Storefront you build plus the Medusa admin dashboard | Needs rework: no theme marketplace, so budget design and front-end build work; confirm admin extension needs |
Which exports and records move, and which integrations you rebuild
Shopify Plus exports cover products, customers and orders in CSV form, but images, metafields and some order history need a different path. Integrations are not exported at all, so each one becomes a Medusa module, workflow or API client you own.
Product CSV and image re-import
The admin product CSV carries catalog rows but not images. Shopify advises keeping the original store live until the new store has imported images from their public URLs. Plan a cutover window where the old store stays up, and check that every image URL still resolves after you move hosting. Map variants and options to Medusa product and variant records before importing, and confirm how your current catalog handles multiple variant options.
Customer CSV and its size limit
The customer export includes tags and supported metafields, and it is limited to 15 MB. A large customer base may need to be split into several files. Check whether your tags and metafields are inside the supported set, because anything outside it will not appear in the file. Decide how you will handle password resets, since passwords are not transferable and customers will need a route to set new credentials in your Medusa storefront.
Admin API for metafields and order history
The CSV exports omit data your store depends on, such as full order history and many metafields. Use the Shopify Admin API to pull orders, fulfillments, refunds and metafield values as JSON, and store the raw responses before transforming them. Order records need a mapping layer that links Shopify order numbers, line items and payment references to Medusa orders, so that support staff can still find historical transactions.
Identity and customer record mapping
Shopify customer IDs, email addresses and addresses rarely map one to one onto Medusa customer accounts and their authentication providers. Decide whether email is the unique key, how you merge duplicate profiles, and how guest checkouts become accounts. Keep a crosswalk table that maps each legacy Shopify ID to the new Medusa ID, so that order history, loyalty data and marketing consent can be traced back to the source record.
Rebuilding ERP and fulfillment connectors
Shopify apps for ERP, warehouse and shipping do not carry over. Each connector becomes a custom integration that you build against Medusa modules and APIs for orders, inventory and fulfillment. Confirm which ERP events you need, such as order created, stock changed or shipment confirmed, and decide whether they flow through Medusa workflows or through an external queue. Test every event path with production-like data before you retire the old app.
Rebuilding payment, tax and shipping logic
Payment gateways, tax calculation and shipping rate apps are rebuilt as Medusa payment, tax and fulfillment providers, or as workflow steps that call external services. Shopify Functions that customize discounts, delivery options or payment methods need equivalent logic in Medusa, which you test against your tax and rate tables. Confirm with each provider whether it supports Medusa's current module interface, and keep a regression test list for checkout behavior.
The migration sequence from inventory to decommissioning Shopify
This sequence moves the store in verified stages, so each step produces evidence that the next one can rely on before Shopify is switched off. The steps run from inventory of apps and integrations through a pilot, a parallel run, cutover and finally archiving the Shopify data.
Inventory apps, Functions and integrations
Your team lists every Shopify app, custom Function, theme customization, webhook, scheduled export and third-party integration (ERP, warehouse, tax, payment, email and analytics). For each item, record what it does, who owns it and whether Medusa provides a module, a workflow or a custom build is required. The output is a mapping document that assigns each capability to a Medusa module, a custom workflow, a third-party service or a decision to drop it. The step is done when a business owner has signed off on every row.
Export catalog, customers and orders
Run the Shopify exports and, where CSV files fall short, use the Admin API for metafields and full order history. Product images are not in the product CSV, so collect them from their public URLs and keep the original store live until the images are confirmed in the new system. Customer exports are limited to 15 MB per file, so split large files and count the rows in each. Archive the raw exports with checksums before any transformation.
Build and validate a pilot store on Medusa
Stand up a non-production Medusa environment with PostgreSQL, Redis and the server and worker instances described in the deployment documentation. Import a representative subset of products, variants, prices and customers, then run the test checkout, order lifecycle, refund and fulfillment paths against your chosen payment provider's sandbox. Your engineers should confirm that the predeploy migration runs cleanly and that the /health endpoint reports healthy for both instances. The output is a passing pilot with a written test log that business owners have reviewed.
Run the parallel period with Shopify live
Keep Shopify taking live orders while Medusa receives a scheduled copy of catalog changes and a reconciliation of orders. Compare order counts, totals, tax, discounts and customer records between the two systems each day, and log every mismatch with its root cause. Fix mapping rules until the differences are explained and no new unexplained gaps appear. The output is a reconciled order and customer count report that operations and finance have both accepted.
Prepare the cutover runbook
Write a step-by-step runbook covering the final data delta, DNS changes, payment provider switch, redirect rules from old Shopify URLs to new Medusa storefront paths, email sender settings and the rollback path. Assign an owner to each action and a verification check after it. Rehearse the runbook on the pilot environment and record how long each step actually took. The output is a cutover runbook that has been rehearsed and approved by the people who will run it.
Execute cutover and watch the first orders
On the agreed change window, freeze Shopify catalog and order changes, run the final delta import, switch DNS and payment credentials, and activate the redirects. Watch error logs, worker queues, webhook delivery and payment callbacks closely, and confirm that test and live orders complete end to end. Keep the rollback path ready until the store has taken live orders without unresolved defects. The output is a signed cutover record listing each runbook step, its verification and any deviations.
Decommission Shopify and archive the data
Once the new store has run stably and the reconciliation shows no open differences, cancel or downgrade the Shopify plan according to your contract terms, and revoke app and API credentials. Store the final exports, order history, redirect map and reconciliation reports in your own retained archive, and confirm with your records and legal teams how long each must be kept. The step is done when Shopify access is removed and the archive has been verified against its checksums.
Running Medusa server and worker instances in production
Staging should mirror the production topology closely enough that a failed migration, a missing secret or a worker that never picks up jobs shows up before go-live. A self-hosted Medusa deployment needs a PostgreSQL database and a Redis database, plus two Medusa instances: one in server mode for the API and admin dashboard, and one in worker mode for background tasks. Staging is also the place to confirm that the production modules replace the development defaults, so the team sees Redis-based caching, the event bus, the workflow engine and locking, and S3 file storage working before real orders depend on them.
- Full topology: Run one server-mode instance and one worker-mode instance against separate processes, not a single combined instance, so background jobs behave as they will in production.
- Production modules: Confirm that Redis backs caching, the event bus, the workflow engine and locking, and that uploads go to S3 rather than local disk.
- Migration step: Check that the predeploy script runs database migrations before each startup and that a failed migration blocks the rollout.
- Secrets: Set distinct
COOKIE_SECRETandJWT_SECRETvalues for the server and worker, and keep them out of source control. - Health checks: Call the
/healthendpoint on each instance and confirm the result before you run test orders.
Confirm the exact environment variable names and module configuration for your Medusa version with the deployment documentation before you copy any example into your pipeline.
Production is where the topology carries real customer, payment and order data, so the configuration should be reviewed as a controlled change. Keep the server and worker instances separate so that heavy background work, such as scheduled or event-driven jobs, does not slow the storefront API or the admin dashboard. Run database migrations through the predeploy step rather than by hand, so every startup applies the same schema changes in the same order.
- Separate roles: Run the server instance for the API and admin dashboard, and the worker instance for background tasks, each with its own process and scaling settings.
- Managed or self-managed data stores: Decide whether PostgreSQL and Redis run on your own servers or on a managed service in your cloud account, and document backups and failover for each.
- File storage: Store product images and uploads in S3 or an S3-compatible store, with access policies that limit who can write to the bucket.
- Access to secrets: Load
COOKIE_SECRET,JWT_SECRETand database credentials from a secrets manager or the platform's secret store, and rotate them on a schedule your security team sets. - Health and monitoring: Use the
/healthendpoint in load balancer checks and alert on failed health checks and stalled worker queues.
Before launch, ask your partner or internal team to document who can deploy, who can rotate secrets and how a failed release is rolled back.
A disaster recovery environment has to restore more than the application code. Recovery depends on a current PostgreSQL backup, a Redis state that the team understands, S3 objects that are still reachable, and the same secret values that signed existing sessions and tokens. Plan the recovery as a rehearsed procedure, because a restored database with the wrong secrets or a missing file bucket can look healthy in part and still fail for customers.
- Database restore: Test restoring PostgreSQL from backup into an isolated environment, then run the predeploy migration step against the restored schema before starting any instance.
- Redis expectations: Decide which Redis data must survive a failover, such as workflow state and locks, and which can be rebuilt. Confirm this with your Medusa version's documentation.
- Secrets continuity: Keep a protected copy of the
COOKIE_SECRETandJWT_SECRETvalues so that restored instances can validate existing sessions, and record where that copy is stored. - Object storage replication: Replicate the S3 bucket to a second location or region in your own account, and test that restored product images resolve from the storefront.
- Recovery checks: Start the server and worker instances in the recovery environment, call
/healthon each, and place a test order before you redirect traffic.
Ask for a written recovery runbook with recovery time and recovery point targets that your business owners have approved, and rehearse it at least once before you rely on it.
How Medusa workflows and modules replace Shopify apps and Functions
Medusa does not ship a Shopify-style app store that installs logic into your store. Instead, the behavior you relied on in Shopify Plus is split across Medusa's modules for carts, orders, product catalogs, pricing and inventory, and across workflows, which are the multi-step operations that coordinate those modules. Medusa is built with Node.js and TypeScript on PostgreSQL, so the stock behavior of a cart or an order lives in code your team can read. Before you write anything, inventory every Shopify app and every Shopify Function in your store and sort each one into one of three groups: behavior Medusa already provides through a module, behavior you can configure through the admin, and behavior that must become custom code. Discount rules, shipping rules, bundle logic and tax handling are the usual candidates for the third group, and they deserve the most scrutiny because they decide what a customer pays.
Each custom rule that you move out of a Shopify Function becomes code you own, version, review and test. A rule that once ran inside Shopify's infrastructure now runs as a module service or as a step in a workflow, which means it needs unit tests for the calculation, integration tests against a PostgreSQL database and a Redis instance, and a documented owner who can change it later. Ask your engineering lead to write down, for each rule, the inputs it reads, the output it writes, and the failure behavior when a dependency is down. Expect that some Shopify apps offered features that Medusa does not have as a ready-made equivalent, and confirm those gaps early against the current Medusa documentation rather than assuming a plugin exists. The workflow engine is also what you will rely on for retries and compensating steps, so confirm how a failed step is recorded and reprocessed in your deployment before you depend on it for order creation.
Medusa gives you the components for checkout and payment, but it does not configure a payment provider or a checkout policy for you. Shopify Plus has handled hosted checkout, payment gateway connections, fraud signals and PCI-related responsibilities on your behalf, and those decisions move to your team and your payment partner. Decide which payment providers you will connect, how they are configured in the server, how webhooks from those providers reach your instance, and who owns reconciliation when a payment succeeds but an order step fails. Your cardholder data handling, storefront scripts and any tokenization approach also become part of your own compliance scope. Treat checkout as a separately tested release, with a written list of payment and fraud rules, and confirm each provider's integration requirements with the provider itself.
What usually goes wrong in a Shopify Plus to Medusa move
Most failed Medusa migrations break in the same few places: catalog identity, customer access, order continuity, app gaps, and the self-hosted runtime. The cards below name each risk, why it matters for a Shopify Plus exit, and the check to run before cutover.
Lost images and broken product handles
Shopify's product CSV does not include images, so the image files must be pulled from their public URLs and attached to the matching Medusa products. If product handles change during import, existing search rankings and inbound links point at dead pages. Keep the original Shopify store live until images have imported, and map every old handle to its new route with redirects before DNS changes. Check a sample of high-traffic product URLs after launch.
Customer password resets and identity gaps
Shopify does not export customer passwords, so migrated shoppers cannot sign in with their old credentials on Medusa. Plan a reset flow that sends a fresh link to each customer, and decide how you will verify ownership of the email address. Customer tags and metafields exported as CSV also need explicit mapping to Medusa customer groups or metadata. Ask the team implementing the store which identity approach they will use before the first customer email goes out.
Orders split across two systems
During a parallel run, some orders land in Shopify while others land in Medusa, and fulfillment, refunds and customer service then look in the wrong place. Define a cutover date for each channel, decide which system owns refunds for orders placed before cutover, and reconcile order counts and totals daily until the old store is closed. Confirm how historical orders will be imported for reporting, since full order history often needs the Admin API rather than the CSV export.
Under-scoped app replacement
Shopify apps and Shopify Functions often carry logic that teams forget to list, such as discount rules, shipping rates, tax handling, review widgets and loyalty points. Each one needs either a Medusa module, a workflow, a third-party service or a deliberate decision to drop it. Build an inventory from the Shopify admin and from checkout customizations before estimating build work, and record who approves each drop. Treat unlisted features as the usual source of scope growth.
Missing worker or secret configuration
A self-hosted Medusa deployment needs a server instance for the API and admin dashboard and a separate worker instance for background tasks. Teams that deploy only the server see emails, scheduled jobs and some workflows stop without an obvious error. Each instance also needs database credentials, COOKIE_SECRET and JWT_SECRET values, and the predeploy migration step must run before startup. Verify both instances through the /health endpoint and confirm that secrets differ between environments.
Unpatched and unmonitored self-hosted stack
Once the store runs in your own infrastructure, the vendor no longer patches the PostgreSQL database, Redis, the Node.js runtime, the storefront or the hosting layer. Without monitoring, failed workers, expired certificates and slow checkout calls surface as lost sales. Assign owners for patch cycles, subscribe to Medusa release notes, set alerts on the /health endpoint and queue depth, and rehearse restores of the database. Ask any implementation partner for their written patch and backup responsibilities before go-live.
What drives cost and duration in this migration
This table lists the cost components of moving a Shopify Plus store to self-hosted Medusa, who is paid for each, whether it is one-time or recurring, and what pushes it up or down. Use it to structure a written quote so each line can be compared across vendors and internal estimates.
| Cost component | Type | What raises or lowers it |
|---|---|---|
| Discovery and mapping of apps, Functions and checkout logic | One-time | Number of Shopify apps and Functions in use; lowers when each app is mapped to a Medusa module, workflow or third-party service in writing |
| Storefront build | One-time | Headless frontend scope, number of templates and locales; lowers when an existing storefront or design system can be reused |
| Custom modules and workflows | One-time | Volume of custom discount, B2B pricing or fulfillment logic; lowers when standard Medusa modules cover the requirement |
| Data migration scripts | One-time | Catalog size, metafields, variants and order history depth; the Shopify product CSV omits images, so image re-import scripts add effort |
| Hosting for PostgreSQL, Redis, S3 and two Medusa instances | Recurring | Traffic, catalog size, backup retention and high-availability design; ask the hosting provider for a written sizing basis |
| Testing, including payments and checkout | One-time | Number of payment providers, tax rules and markets; lowers with automated regression coverage |
| Cutover and redirects | One-time | URL count and SEO requirements; lowers when old URLs map cleanly to new routes before launch |
| Upgrades, patching and monitoring | Recurring | Frequency of Medusa releases, dependency updates and on-call scope; the team owns this after launch |
What the MIT core and Enterprise license mean for your build
The Medusa core commerce framework is MIT licensed, so the code that handles carts, orders, product catalogs, pricing and inventory can be used, modified and self-hosted without a license fee. The licensing question that matters for your build is narrower: Enterprise Edition features based on role-based access control require a commercial agreement with MedusaJS, Inc. If your team expects granular admin roles for merchandisers, finance, customer service or regional staff, treat that as a feature you must confirm before you design the admin workflow, not as a detail to settle at launch. Ask MedusaJS, Inc. which exact role and permission capabilities sit in the Enterprise Edition, and whether any of them are already covered by the open-source admin.
Your second decision is hosting. Medusa is available as Medusa Cloud managed hosting or as a self-hosted deployment, and the two options change who runs the server and worker instances, the PostgreSQL and Redis databases, and the S3 file storage. Under self-hosting, your team or an implementation partner owns upgrades, backups and secret rotation for the COOKIE_SECRET and JWT_SECRET values. Under Medusa Cloud, you pay the provider for hosting and operations but should confirm what it covers, which regions it runs in and how data residency requirements are met. Check the Medusa repository for current licensing terms and the Enterprise Edition scope before you sign anything, and document the answers in the architecture decision record so the choice is traceable during review.
How the migration changes by store size and starting point
A brand with a modest product range and a storefront it already designed for headless delivery usually has the smallest data job. The product, customer and order exports are short, and the main work sits in the Medusa side: modeling products and prices, wiring checkout and payment providers, and connecting the existing frontend to the Store API. Because the storefront may be custom already, the rebuild is often a connection exercise rather than a redesign.
- Data scope: Export products, customers and orders from the admin, then check which images and metafields the CSVs leave out.
- Storefront work: Confirm how much of the current frontend calls Shopify APIs directly and what would need to change to call Medusa.
- Checkout: Map the payment gateways and shipping rules you use today to Medusa payment and fulfillment providers.
- Operations: Even a small store needs a server instance, a worker instance, PostgreSQL and Redis running and patched.
- Redirects: Plan URL redirects for every product and collection page that changes path.
Before you commit, ask your partner to confirm the storefront effort in writing, since it is the largest variable in this case.
A B2B merchant depends on company accounts, buyer-specific prices, catalogs and payment terms. These rules often live in Shopify Plus B2B features or in apps layered on top, so the migration is mostly a modeling exercise. Medusa supports B2B stores through its modules, but the account structures, approval flows and negotiated price lists must be designed and built rather than copied across.
- Account model: Document companies, locations, buyers and roles before mapping them to Medusa customer groups and access rules.
- Price logic: Export every price list and volume tier, then confirm how Medusa pricing modules will apply them per customer group.
- Access rules: Role-based access control in the admin is part of Medusa Enterprise Edition, which requires a commercial agreement with MedusaJS, Inc., so confirm whether you need it.
- Order history: Plan how open invoices and past orders for each company will be imported and linked to the right account.
- Testing: Build test accounts for each pricing and approval scenario and run them against the new store before cutover.
Ask whether the B2B rules will be built as custom modules or workflows, and what sign-off the business expects for pricing parity.
A merchant with many Shopify apps and custom Shopify Functions has the largest rebuild. Each app supplies a feature, such as reviews, loyalty, subscriptions, discounts or shipping rules, and each Function runs logic at checkout or on carts. None of these transfer to Medusa. Each one must be retired, replaced with an existing integration, or rebuilt as a Medusa module, subscriber or workflow step, and the checkout logic needs particular attention.
- App inventory: List every installed app, what it does, and which data it stores, since some data will not come through a CSV export.
- Function logic: Document each Shopify Function's inputs and outputs, then decide whether it becomes a pricing rule, a promotion or custom workflow code.
- Metafields and automatic discounts: Confirm how metafield values and automatic discounts will be recreated, because the CSV exports do not carry them.
- Background jobs: Move scheduled and event-driven tasks to the worker instance and test retries.
- Scope control: Agree in writing which apps are replaced in phase one and which are dropped.
Ask for a feature-by-feature mapping before any build estimate is accepted, because that list defines the true scope of this case.
Questions buyers ask before moving from Shopify Plus to Medusa
How much effort and cost does a move from Shopify Plus to Medusa take?
The effort is driven by how much custom work the store depends on, not by the data volume alone. Medusa is a framework, so you pay for the parts Shopify provides out of the box: a storefront, checkout flow, admin usage patterns and app functionality. Cost components include planning, data mapping, rebuilding Shopify Functions and apps as Medusa modules and workflows, building the storefront, hosting, and ongoing patching. Some costs are one-time (migration and build) and others recur (hosting, PostgreSQL and Redis, S3 storage, upgrades and support). Ask any provider for a written scope listing each app and Function being replaced, the storefront work, and who operates the production servers after launch. No fee or duration figure is supplied for this move, so compare quotes against that scope rather than against headline numbers.
How long does a Shopify Plus to Medusa migration take?
The timeline depends on the number of custom integrations, the size of the catalog, and how much of the storefront is new. A store with few apps and a standard catalog moves faster than one relying on bespoke Shopify Functions, metafield-heavy product models or many third-party integrations. Build work is usually the longest phase: you must stand up the Medusa server and worker instances, PostgreSQL, Redis and S3, then build the storefront and test checkout end to end. No duration is supplied for this move, so ask for phase-by-phase milestones in the written scope and confirm which of them your own team or a partner will own.
What does the internal team need to contribute to the move?
Plan on your team owning product decisions and sign-off, not just the handover. Medusa is built with Node.js and TypeScript on PostgreSQL, so the build needs developers comfortable with TypeScript, the Medusa module and workflow model, and a headless storefront framework. Operations staff need to understand the two-instance deployment: one Medusa instance in server mode for the API and admin dashboard, and one in worker mode for background tasks, both requiring database credentials, COOKIE_SECRET and JWT_SECRET values. Merchandising and finance staff must validate product, pricing, tax and order data after import. Confirm these skills in-house before committing to a timeline.
Can a merchant migrate from Shopify Plus to Medusa without a partner?
A capable engineering team can do it without an external partner, but it is a build project, not a data export. Shopify gives you CSV exports for products, customers and orders, yet the replacement of checkout logic, apps and Functions requires custom code on Medusa's modules and workflows. Consider a partner if your team lacks Node.js, TypeScript or PostgreSQL operations experience, or if the store has heavy customization. DeployOpen plans, implements, customizes, integrates, hardens, backs up and supports self-hosted platforms in your own infrastructure, typically under a fixed scope agreed in writing before work starts. Ongoing support is available as a retainer.
Do product images, customers and orders move from Shopify Plus?
Products and customers can be exported, but images need a specific process. Shopify exports products as a CSV, and that file does not include product images, so Shopify advises keeping the original store live until the new store has imported images from their public URLs. Customers, including tags and supported metafields, export to a CSV limited to 15 MB, so large customer lists need to be split into several files. Confirm with the vendor and your own export what order history and metafields the export includes, and plan a separate path for any data the CSV does not cover.
What happens to checkout and payments when moving to Medusa?
Checkout is the highest-risk part of the move because Shopify provides hosted checkout and payment handling that you must now build or configure yourself. Medusa's commerce modules cover carts, orders, pricing and inventory, but payment provider integration, tax logic, discount rules and the storefront checkout flow are your responsibility. Payment card handling also affects your PCI scope, which depends on how the payment flow is designed. Ask for the payment providers in scope, the test plan for each, and who signs off on card data handling. Confirm the PCI scope with your acquirer or assessor, since DeployOpen does not issue attestations or certifications.
How do you run the Shopify Plus store and the Medusa store during cutover?
Run both stores in parallel until the new store has verified data, images and checkout. Shopify advises keeping the original store live until images are imported from public URLs, so the cutover should not begin until that step is proven. Plan a freeze window for orders and customers, a final incremental export, and a rollback path that keeps Shopify live until the new Medusa store has processed test and live orders. Redirects for product and category URLs also need to be mapped before DNS changes. Document each step in the written scope, and agree who has authority to switch traffic.
How DeployOpen scopes and runs a Shopify Plus to Medusa migration
DeployOpen is a Chainscore Labs company that plans, implements, integrates, hardens, backs up, upgrades and supports self-hosted open-source platforms inside the client's own infrastructure, whether that is the client's cloud account, a data center or an air-gapped network. For a Shopify Plus to Medusa move, that means the Medusa server and worker instances, the PostgreSQL and Redis services, the S3 bucket for files, the storefront hosting and the secrets that protect them all sit in an environment the client controls. Most engagements are fixed-scope, so the written scope should name each of these components, who owns the Shopify export and import runs, which Shopify apps and Functions are being replaced, and who signs off on cutover before work starts.
Before go-live, the written deliverables should include a security test of the storefront, the Medusa Admin API and the admin dashboard, and a review of the deployment configuration. Reviewers should confirm that COOKIE_SECRET and JWT_SECRET are set and stored outside source control, that database credentials are scoped to the server and worker, that the /health endpoint is monitored, and that the predeploy migration step is rehearsed on a copy of production data. Ask the implementation partner to state in the scope which tests are included, which findings are fixed within the engagement, and what evidence is handed over. DeployOpen prepares systems, controls and evidence for compliance assessments, but it does not issue audit reports, attestations or certifications, so any payment or privacy review that depends on them still belongs to your independent auditor.
After launch, the operating model matters as much as the build. Ongoing support, upgrades and continuous testing are available as retainers, and a retainer is usually the right place to cover Medusa version upgrades, database backups and restore tests, dependency patching and Redis or PostgreSQL maintenance, which recur for as long as the store runs. Ask for the retainer terms in writing, including response expectations and what is excluded, and decide before cutover who is on call for the server and worker instances. Medusa Cloud is an alternative if you prefer a managed host, and that choice changes which of these recurring tasks you keep and which you hand to the provider.

