Odoo has three hosting options, and most people pick one before they know what it rules out. The plan you buy decides where you are allowed to run the system, and one of the three will not run custom code at any price.
Here is what each one gives you, what it costs in Canadian dollars, and which way you can still move afterwards.
Same walkthrough on video, about 20 minutes, with the Odoo.sh and pricing screens up as I go: Odoo.sh vs Odoo Online vs Self-Hosted.
Your plan decides where you can run it
Odoo sells three plans. Each one allows a different set of hosting, and the gaps matter more than the price difference suggests.
| Plan | Yearly | Monthly | Hosting allowed | Studio | Multi-company | External API |
|---|---|---|---|---|---|---|
| One App Free | CA$0 | CA$0 | Odoo Online | The one app | Yes | No |
| Standard | CA$44 | CA$55 | Odoo Online only | No | No | No |
| Custom | CA$69 | CA$86 | Online, Odoo.sh, on-premise | Yes | Yes | Yes |
Community costs nothing to licence and is self-hosted only. You cannot put it on Odoo Online or on Odoo.sh, so free Odoo hosted by Odoo is not a thing that exists.
Standard is where most of the confusion sits. It has no Studio, no multi-company and no external API. So if somebody has quoted you Studio work on a Standard subscription, the plan is wrong before anyone starts.
Custom is the only plan that lets you pick your hosting. However, even on Custom, Odoo Online still will not run custom modules. Custom buys you Studio and the API, not custom code.
Why Online will not run your custom module
Odoo Online runs on shared source code. Every database on it reads the same codebase, and only your configuration separates you from the next company on the server. You can change what a user sees. You cannot change what the code does, because that same code is running someone else’s business.
Odoo says this plainly in its own documentation: Odoo Online is not compatible with non-standard apps. If a database has any, they come out before it can move to Online.
There is a second part almost nobody mentions. Odoo Online is not running the same Odoo you would self-host. The annual release is 19.0, and Online runs saas~19.4, which is a separate branch. I pulled both locally and compared them: about 630 addons in 19.0 against 632 in saas~19.4, and roughly thirty modules on each side that the other does not have.
For example, the IoT modules are in 19.0 and not in saas~19.4. So if your warehouse plan depends on an IoT box, or on your country’s e-invoicing module, the hosting choice can decide whether that feature exists for you at all. Check your own module list against both before you commit, rather than assuming Online is the same Odoo on somebody else’s server.
What Odoo.sh actually costs you
Odoo.sh is Odoo’s own hosting for businesses that need custom code but do not want to run servers. It hooks into your GitHub repository and gives you three environments. Production is live. Staging is a copy of production with real data, for testing. Development carries test data only and is not backed up.
Hosting is billed on four things, in USD:
| Component | Price | Range |
|---|---|---|
| Smallest project | USD 57.80 / month | 1 worker, 1 GB, shared, 0 staging |
| Worker | USD 57.60 / month | 1–8; past 8 you need dedicated |
| Storage | USD 0.20 / GB / month | 1–512 GB |
| Staging environment | USD 14.40 / month | 0–20 environments |
| Dedicated hosting | + USD 480.00 / month | Required past 8 workers |
Odoo.sh is two bills, not one. The hosting price does not include the Enterprise licence. You pay the per-user licence in CAD to odoo.com, and the hosting in USD to odoo.sh.
Any figure that names only one of those is understating what you will actually pay.
The numbers are easier to see worked through. Say you have ten users. The licence is 10 × CA$69, so CA$690 a month. Then size the hosting: two workers, 10 GB of storage and one staging environment comes to (2 × 57.60) + (10 × 0.20) + 14.40, which is USD 131.60 a month. Two bills, two currencies, and you need to budget for both.
Included at every tier: continuous integration, GitHub integration, third-party app installs, shell and SSH access, the online editor, monitoring, DNS and email, storage replication, backups held on three separate servers, unlimited development branches and unlimited accounts.
One caveat on sizing. Odoo does not publish a workers-to-users ratio, so treat any “one worker per N users” rule you read as a guess. Start low, watch the load graphs Odoo.sh gives you, and add a worker when the queue depth says to.
On-premise: the server is the cheap part
Self-hosting means Community for free, or Enterprise on the Custom plan at CA$69 per user per month. You supply the server. DigitalOcean, Hetzner, Vultr, OVH, AWS and Azure are all common choices, and the monthly cost swings enough by specification that quoting one number would be useless.
The server is the cheap part. The real cost is backups you actually test, monitoring that wakes somebody up, security patching, and running the version upgrade yourself once a year. If you already employ someone who does that for your other systems, self-hosting is cheap. If you do not, you are hiring for it whether you planned to or not.
Email is where self-hosted Odoo usually falls over. Odoo leans on outbound mail for quotes, order confirmations and internal notifications. Skip the SPF, DKIM and DMARC records and your invoices land in spam, which makes the system useless for anything a customer sees. Odoo Online and Odoo.sh set that up for you.
The door only swings one way
Moving off Odoo Online is easy. You download a dump with the filestore and load it into Odoo.sh or your own server.
Moving to Odoo Online is the hard direction. It needs a support ticket carrying your subscription number, target URL, dump, hosting region, database name, version, admin email and go-live timing, and Odoo runs a compatibility check before they accept it. Anything non-standard has to come out first.
So Online to anywhere is easy, and anywhere to Online is gated by the no-custom-code rule. If you genuinely cannot tell yet whether you will need custom modules, starting on Odoo.sh keeps both doors open for a known monthly cost. Starting on Online and finding out in month six means exporting the database, rebuilding the environment, redeploying every customisation and retesting the integrations, all while the business still runs on the old setup.
Settle these before you commit
Confirm which modules you need in production, not the ones that looked good in a demo. Integrations with logistics providers, payment gateways or a legacy general ledger are the ones that rule out Odoo Online, and they tend to surface in month four rather than week one.
If you are heading for Standard, check that you need none of Studio, multi-company or the API. Those are the reason most Standard subscriptions get upgraded halfway through an implementation.
For Odoo.sh or self-hosted, decide who deploys. Custom modules do not deploy themselves. Somebody needs repository access, an understanding of how Odoo modules are structured, and the authority to push to production. If that person is not on your payroll, you need a partner on retainer, and that belongs in the budget from day one.
What this means for your business
Your hosting choice sets how fast you can change Odoo when the business changes. If your fulfilment process shifts every quarter, or you keep adding sales channels, you need to deploy integrations without waiting on Odoo’s release cycle, so that means Odoo.sh or your own server. If your workflows are stable and sit inside Odoo’s native apps, Online takes the infrastructure work off your desk completely.
The expensive mistake is rarely the hosting bill. It is picking the cheap tier, hitting the custom-code wall, then building workarounds around it: manual exports, middleware, people retyping the same order twice. Those pile up. A year later there is a standing five-hour-a-week reconciliation job that exists only because somebody picked a hosting model before anyone knew the requirements.
If you would rather watch than read, the full walkthrough is on our YouTube channel: Odoo.sh vs Odoo Online vs Self-Hosted.
Common questions
Can I run Odoo Community on Odoo Online or Odoo.sh?
No. Community is self-hosted only. Odoo Online and Odoo.sh both need a paid Enterprise subscription, so free Odoo hosted by Odoo is not an option. The One App Free plan is a different thing: that is Enterprise software at no cost, for one app, on Odoo Online.
Does the Standard plan include Odoo Studio?
No. Standard has no Studio, no multi-company and no external API. Those arrive on the Custom plan at CA$69 per user per month on annual billing. This is the one people get wrong most often, usually after they have already signed.
How much does Odoo.sh cost in total?
Two bills. Hosting starts at USD 57.80 a month for one worker, 1 GB of storage, shared hardware and no staging environment. On top of that you pay the Enterprise licence at CA$69 per user per month annual, because Odoo.sh needs the Custom plan. Budget for both lines, not one.
Can I move from Odoo Online to Odoo.sh later?
Yes, and that is the easy direction. Take a dump with the filestore and import it. The hard direction is moving to Odoo Online, which needs a support ticket, a compatibility check by Odoo, and the removal of any non-standard app first.
Which option do most small businesses end up on?
Odoo Online, when the process fits Odoo’s native apps and nobody needs custom code. Odoo.sh, when there is a real integration to build and no server administrator on staff. On-premise, when somebody in-house already runs infrastructure, or the data has to stay on specific hardware for a compliance reason.
Talk to the team.
If you are picking a hosting model, or you think you are on the wrong one, book a 30-minute scoping call. We will go through your module list and tell you which options can run it. Calgary studio, in-house team, no offshore handoffs.
Book the call →