Most platform comparisons stop at the monthly fee, which is the one number that reliably understates the difference. Apps, transaction surcharges, engineering time and the cost of things you cannot build all move the answer more than the plan price does.
Here is the model we use with clients, with the assumptions exposed so you can disagree with them.
The lines that belong in the model
| Line | Hosted | Self-hosted |
|---|---|---|
| Platform fee | Plan, by tier | None |
| Transaction surcharge | 0–2% if not using the native gateway | None |
| Apps and extensions | $200–3,000/mo | Some replaced, some self-hosted |
| Infrastructure | Included | $100–500/mo |
| Engineering — build | Theme work | Full build |
| Engineering — maintenance | Low | Retainer or in-house |
| Upgrades and patching | Free | Yours |
| Opportunity cost | Features you cannot build | Features you must build |
The last row is the one that decides most real cases and never appears in a comparison table, because it is specific to your business.
Three years, three revenue levels
Assumptions: a DTC store, one market, moderate app usage, engineering at $75/hour blended.
$1M GMV
| Hosted | Self-hosted Medusa | |
|---|---|---|
| Platform | $948 | — |
| Transaction surcharge | — | — |
| Apps | $4,800 | $600 |
| Infrastructure | — | $2,400 |
| Build (amortised over 3 years) | $5,000 | $20,000 |
| Maintenance | $2,000 | $18,000 |
| **Annual total** | **~$12,700** | **~$41,000** |
Hosted wins decisively. At this level, self-hosting is buying flexibility you have no way to exploit.
$5M GMV
| Hosted | Self-hosted Medusa | |
|---|---|---|
| Platform | $4,788 | — |
| Transaction surcharge (external gateway) | $25,000 | — |
| Apps | $18,000 | $2,400 |
| Infrastructure | — | $4,800 |
| Build (amortised) | $10,000 | $30,000 |
| Maintenance | $8,000 | $30,000 |
| **Annual total** | **~$65,800** | **~$67,200** |
Roughly level. The decision here is not financial — it is whether you need capabilities the platform cannot provide.
Note the surcharge line. It only applies if you cannot use the platform's native gateway, which is exactly the situation for restricted categories. Remove it and hosted wins; it is the single largest swing factor in the model.
$15M GMV
| Hosted (enterprise tier) | Self-hosted Medusa | |
|---|---|---|
| Platform | $27,600 | — |
| Transaction surcharge | $30,000 | — |
| Apps | $36,000 | $6,000 |
| Infrastructure | — | $12,000 |
| Build (amortised) | $20,000 | $40,000 |
| Maintenance | $20,000 | $60,000 |
| **Annual total** | **~$133,600** | **~$118,000** |
Self-hosted pulls ahead, and the gap widens with every additional million because one side scales with revenue and the other does not.
What the model leaves out
Four things, each capable of dominating the result:
Opportunity cost. If a platform limitation is costing you a wholesale channel, a subscription product or a market, that number is larger than everything above. Quantify it before comparing fees.
Risk. For a merchant who can be deplatformed, the cost of losing the store is not a line item — it is the business. This makes the comparison irrelevant, not close.
Team. An organisation without engineering cannot run self-hosted at any price. The maintenance figures assume competence that must exist somewhere.
Time. Self-hosting takes two to four months before it earns anything. If you need to launch next month, that settles it.
How to use this
Fill in your own numbers, in this order:
- Actual app spend. Export twelve months of invoices. It is usually higher than people remember.
- Actual transaction fees. Including any surcharge for an external gateway.
- Honest engineering time. Including the hours currently spent working around platform limits.
- The named constraint. What can you not do, and what is it worth?
If step four is blank, stay where you are. Cost alone rarely justifies a migration, and a migration justified only by cost tends to underdeliver.
The migration cost nobody budgets
Three lines that appear in every real project and almost no estimate:
Parallel running. One to three months paying for both platforms. At $2,000 a month that is $2,000–6,000 nobody planned for.
Post-launch stabilisation. Two to four weeks of fixes after cutover. It is not scope creep; it is the normal shape of a replatform, and pretending otherwise means the team is doing it while also starting the next project.
Institutional knowledge. Your team knows the old platform's quirks. For three to six months they are slower on the new one. Real, and rarely priced.
Add roughly 15% to any migration estimate for these. Estimates that omit them are not cheaper projects, only less honest ones.
When the model says migrate and the answer is still no
Three situations where the arithmetic favours self-hosting and it remains the wrong call:
No engineering owner. If nobody's job description includes this application, the model is wrong because the maintenance line is fiction.
A major commercial event within six months. Do not replatform in the two quarters before your peak season. The savings arrive next year; the risk arrives in November.
The team is already at capacity. A migration is not something a fully committed team absorbs. Either something else stops or the migration takes twice as long and costs more than the model says.
Cost models describe steady states. Migrations are transitions, and transitions are where projects fail.
Modelling it yourself
Fill this in with real invoices rather than estimates. Twelve months of actuals, not a memory of the plan price:
Current platform
Plan fee (annual) ____
Transaction fees and surcharges ____
App subscriptions (all of them) ____
Agency or contractor retainer ____
Internal engineering time ____
Total ____
Self-hosted
Infrastructure (annual) ____
Third-party services replacing apps ____
Build cost, amortised over 3 years ____
Engineering retainer or salary ____
Total ____
Named constraint, and its annual cost ____The final line is the one that decides it. If it is blank, the totals above are an interesting comparison rather than a business case.
We run this model with clients before quoting anything, because sometimes the answer is "do not migrate". Ask for the spreadsheet.
Frequently asked questions
Is headless commerce cheaper than a hosted platform?
Below roughly $3M GMV, no — hosted is cheaper once engineering time is priced honestly. Above roughly $10M with a heavy app stack, usually yes, because hosted cost scales with revenue while infrastructure scales with traffic.
What is the biggest hidden cost of a hosted platform?
Apps. They routinely cost two to four times the plan fee, and a large share of them exist to work around platform limitations rather than to add genuine capability.
What is the biggest hidden cost of self-hosting?
Ongoing engineering. Infrastructure is cheap and predictable; the recurring cost is having someone competent responsible for the application indefinitely. Budget a retainer or a role, not a one-off build.
At what revenue does Medusa become cheaper than Shopify?
Typically between $3M and $10M GMV, with the range driven mostly by app spend and whether you pay a surcharge for using an external payment gateway. Model it with your own invoices rather than trusting a benchmark.
Does going headless reduce maintenance?
No, it moves it. You stop maintaining plugin compatibility and platform workarounds, and you start maintaining infrastructure, dependencies and your own code. Total effort is similar; what changes is that the effort now produces features rather than workarounds.
Should cost be the reason to migrate?
Rarely on its own. The migrations that succeed are justified by a capability constraint or a platform risk, with cost as a supporting argument. A migration justified only by fees tends to disappoint, because the savings arrive later than the disruption.
Medusa vs Shopify: An Honest Comparison for 2026
Not a feature grid written by someone selling one of them. Where Shopify genuinely wins, where Medusa does, and the revenue point where the maths flips.
Medusa vs Vendure: Two TypeScript Commerce Frameworks Compared
Both are TypeScript, both are self-hosted, both are good. The differences are in the extension model, the API style, and how much structure you want imposed.
Medusa vs Saleor: TypeScript REST or Python GraphQL
Two credible open-source commerce platforms with opposite technical bets. Which one fits depends far more on your team than on the feature lists.


