Skip to main content

How to Migrate from Shopify to Medusa

·OSSAlt Team
shopifymedusamigratione-commerceguide

How to Migrate from Shopify to Medusa

Shopify Basic costs $39/month + 2.9% transaction fees. At scale, costs climb to $399/month+ with apps. Medusa is the open source headless commerce platform — no transaction fees, full control, and a modern developer experience.

What Transfers

Shopify DataMedusa Status
✅ ProductsExport CSV → import
✅ VariantsMapped to Medusa variants
✅ Categories/CollectionsRecreate as collections
✅ CustomersExport → import via API
✅ Orders (history)Export → import via API
⚠️ ImagesDownload + re-upload
❌ Theme/storefrontRebuild (headless)
❌ Apps/integrationsRebuild or find alternatives
❌ Shopify PaymentsUse Stripe directly

Step 1: Deploy Medusa

# Create new Medusa project
npx create-medusa-app@latest my-store
cd my-store

# Start the server
npx medusa develop

Admin dashboard at localhost:9000/app, API at localhost:9000.

Step 2: Export from Shopify

Products:

  1. Shopify Admin → ProductsExport
  2. Choose CSV format, all products

Customers:

  1. Shopify Admin → CustomersExport

Orders:

  1. Shopify Admin → OrdersExport

Step 3: Import Products

// Script to import Shopify products into Medusa
const { Medusa } = require('@medusajs/js-sdk');
const csv = require('csv-parse/sync');
const fs = require('fs');

const medusa = new Medusa({ baseUrl: 'http://localhost:9000', apiKey: 'your-api-key' });

const products = csv.parse(fs.readFileSync('products.csv'), { columns: true });

for (const product of products) {
  await medusa.admin.products.create({
    title: product.Title,
    description: product['Body (HTML)'],
    handle: product.Handle,
    variants: [{
      title: product['Variant Title'] || 'Default',
      prices: [{ amount: Math.round(parseFloat(product['Variant Price']) * 100), currency_code: 'usd' }],
      sku: product['Variant SKU'],
      inventory_quantity: parseInt(product['Variant Inventory Qty']) || 0,
    }],
  });
}

Step 4: Build Your Storefront

Medusa is headless — you need a frontend. Options:

Next.js Starter (recommended):

npx create-medusa-app@latest --with-nextjs-starter

Custom frontend: Use Medusa's JS SDK or REST API with any framework (Next.js, Nuxt, SvelteKit, Remix).

Step 5: Set Up Payments

# Install Stripe plugin
npm install medusa-payment-stripe

Configure in medusa-config.js:

module.exports = {
  plugins: [{
    resolve: 'medusa-payment-stripe',
    options: {
      api_key: process.env.STRIPE_API_KEY,
    },
  }],
};

No per-transaction fees from Medusa — only Stripe's standard 2.9% + $0.30.

Step 6: Set Up Shipping, Tax, Email

Shopify FeatureMedusa Plugin/Module
Shipping ratesFulfillment module
Tax calculationTax module (or TaxJar)
Order emailsNotification module (SendGrid, Resend)
InventoryInventory module
Gift cardsGift card module
DiscountsDiscount module

Cost Comparison (Annual)

ScenarioShopifyMedusa Self-Hosted
Startup ($10K/month revenue)$468/year + $3,480 fees$240/year hosting
Growing ($50K/month)$3,588/year + $17,400 fees$600/year hosting
Scale ($200K/month)$4,788/year + $69,600 fees$1,200/year hosting

Shopify fees = 2.9% + $0.30. Medusa uses Stripe directly (same rate but no Shopify markup).

Migration Timeline

WeekTask
Week 1-2Deploy Medusa, import products, build storefront
Week 3Set up payments, shipping, tax
Week 4Import customers, test checkout flow
Month 2Soft launch, parallel run
Month 3Full cutover

Compare e-commerce platforms on OSSAlt — features, pricing, and flexibility side by side.