From Odoo Online, Odoo.sh or a partner's server to one you own.
This page says what is possible, what it costs you in licensing, and what breaks along the way. We would rather you read it now than discover it in week three.
Where you are coming from changes the plan
| Starting point | How you get your data out | The main constraint |
|---|---|---|
| Odoo Online | Self-service download from your Odoo account: a zip with the SQL dump, the filestore and a manifest of installed modules and their versions. | You can only leave on a major version (17.0, 18.0, 19.0). Online often runs intermediate versions such as 18.2 that cannot be hosted anywhere else. If you are on one, you wait for, or request, the next major upgrade first. |
| Odoo.sh | Daily, weekly and monthly backups with filestore from the project's backups tab, plus your git repository, which you already own. | Usually already on a major version. The work is reproducing the build: submodules, Python requirements, worker and cron settings that Odoo.sh set for you, and the mail and domain setup. |
| Partner-hosted | Whatever your contract says. Often a database dump on request, sometimes with the filestore, sometimes with the code, sometimes with a fee. | Getting everything before the relationship changes. Inventory what you own first: dump, filestore, code repository, credentials, domain and mail. Ask for it in that order and do not announce you are leaving until you have it. |
| Your own server or another host | We take a dump and filestore directly, or you send them. | Usually the easiest. The work is documenting what nobody wrote down and making the backups real. |
The caveats, plainly
These are not reasons not to move. They are the things a quote has to account for, and the things people are most often not told.
Odoo Online: major versions only
Odoo Online databases are frequently on intermediate versions (for example 18.3) that exist only on Odoo's own hosting. A database on one of those cannot be restored on a normal Odoo install. Leaving Online means being on a major version first. Sometimes that is a matter of asking; sometimes it is a matter of waiting for the next release. We check this on day one, because it sets the calendar.
Enterprise costs more per user off Online
On-premise Enterprise is licensed on a different plan than Online, and the per-user price is roughly double. If you have twenty users, that difference adds up to more than the hosting saves. This is why the usual path for a company leaving Online is to also leave Enterprise: move to Odoo Community with community (OCA) replacements for the Enterprise apps you actually use. It is a real trade, and we show it to you on your own data before you choose. If you keep Enterprise, the subscription transfer is arranged with Odoo and we set the license up on the new server; that is fine too.
Do not move and upgrade in the same step
If you need both, we do them in sequence: move first on the version you are on, run there for a few weeks, then upgrade. Doing both at once means that when something breaks, nobody knows which change caused it.
What does not travel with the database
- Email. Odoo Online and Odoo.sh send mail for you. On your own server, outgoing mail needs an SMTP provider and your domain's SPF and DKIM records; incoming aliases need a mailbox and MX or forwarding. We set it up; you or your IT person will need to add DNS records.
- In-app purchase credits (IAP). Services like SMS, document digitization and partner autocomplete are tied to the database identity. They are re-linked after the move and, for testing copies, disabled so a test does not spend your credits.
- Single sign-on (OAuth). Google and Microsoft sign-in are registered against your old address. They need new redirect URLs on the new domain.
- Payment provider webhooks. Stripe, Authorize.net, PayPal and similar call back to a URL. That URL changes, so each provider's settings are updated, and each is tested with a real small transaction after cutover.
- Website domain and certificate. If Odoo runs your website, DNS moves to the new server and a certificate is issued there.
- Bank feeds. Odoo's built-in bank synchronization is an Enterprise service. Off Enterprise, bank statements come in by file import or through a community connector; on Enterprise, feeds are re-authorized on the new server.
- Scheduled actions. Crons are reviewed before the first start on the new server so a job that ran on the old one does not run twice.
How a move runs
Timings are typical for a company with a handful of custom modules; larger databases and more integrations add time to the parallel run. A partner who is slow to hand over assets stretches step one; nothing else should surprise you.
-
Inventory and assessment days 1 to 5
Version check (major or intermediate), edition, installed modules against what has a Community or OCA equivalent, integrations in use, where every asset lives, and what your current contract says about getting it. Output: a written plan and a fixed quote.
-
Your server, in your name week 1
You create a Hetzner Cloud project (we walk you through it, it takes ten minutes) and invite us. We build the server from a script committed to your new repository, with firewall, SSH keys, monitoring and the backup job to a Backblaze B2 bucket you also own.
-
Restore a neutralized copy week 1 to 2
Your database and filestore are restored as a copy with mail, crons, bank sync, payment providers and IAP all switched off. We confirm every module loads, then, if you are leaving Enterprise, uninstall Enterprise apps on this copy and install their replacements, scripting each step so it can be repeated exactly.
-
Plumbing week 2
Outgoing and incoming mail, the web address, certificate, OAuth, payment webhooks and any carrier or bank connections are set up on the new server, each one documented in the integrations sheet as it is done.
-
Parallel run weeks 2 to 4
Your team uses the copy for real work, in parallel with the old system, and reports anything that differs. During this time we freeze changes on the old system so nothing is lost at cutover. Most issues found here are small and fixed the same day.
-
Cutover one evening
Users stop, a final backup is taken from the old system, restored on the new one with the scripted steps from step three, DNS and mail are switched, and a go/no-go checklist is run: login, create a quote, post a test invoice, send a test email, print a report, run a payment for one dollar. Then users start again.
-
Close-out thirty days after
The old system stays available read-only for thirty days, then is cancelled or deleted on your instruction. The last export is kept cold in your backup bucket. You get the runbook, the integrations sheet, and the credentials list, and we confirm in writing that we can be removed from everything and it still runs.
Before you tell your partner you are leaving
If your Odoo is with a partner, do this first, quietly, and ideally with us on the call:
- Ask for a full database backup with filestore "for your own records". This is a normal request.
- Ask for read access to the code repository, or a zip of the custom modules, "for your auditor" or "for your insurance". Also normal.
- Confirm you control the domain registrar and the DNS for your Odoo address and your mail.
- List every third-party account (mail provider, payment provider, shipping, bank feed, SMS) and check who is the owner on each.
- Read the contract for notice periods, data-return terms and any fee for handover.
Once those are in hand, the conversation about leaving is a conversation, not a negotiation.
What we need from you
- A contact who can create accounts (Hetzner, Backblaze, GitHub) in the company's name and add us to them.
- Someone who can change DNS records, or permission for us to do it.
- Two or three people who will actually use the parallel system and report what differs.
- A decision on Enterprise versus Community before the copy is built.
- An evening for cutover when nobody is invoicing.
Find out if you can move, and when
Send your version and hosting. The first answer, whether Online lets you leave yet, is usually free and takes a day.