Migrate Odoo 10, 11, 12, 13 or 14 to Odoo 19 or 20

Last updated: October 2026

If your company still runs Odoo 10, 11, 12, 13 or 14, you are six to ten major versions behind Odoo 20. Odoo S.A. supports the three most recent major versions, so all of these have been without security fixes for years. Getting such a database onto Odoo 19 or 20 is possible, but it is a different project from a one-version upgrade.

We should be clear about our own part first: OCU migrates Odoo Community databases from version 15 upwards. It does not migrate 10 to 14 directly. This page describes the routes that do exist for older databases, what each one costs in effort, and where OCU fits once you reach 15. For the general process, see our guide to upgrading Odoo Community.

Why old versions are harder

  • Every major version is a separate step. Migration scripts are written for one version change at a time: 13 to 14, 14 to 15, and so on. A database on Odoo 12 passes through 13, 14, 15, 16, 17 and 18 on its way to 19, seven steps in total.
  • Python 2 to Python 3. Odoo 10 runs on Python 2.7, Odoo 11 and later on Python 3. Every custom module from an Odoo 10 system has to be ported, not just adjusted.
  • Large data model changes. Odoo 13 merged invoices (account.invoice) into journal entries (account.move), the largest accounting change in the range. Later versions bring their own: coupons became loyalty programs in 16, company-dependent values moved from ir_property to JSON columns in 18, and contracts became employee versions in 19.
  • Custom code at every step. Custom and third-party modules need a compatible version for each release you pass through, or need to be uninstalled before the step where they stop working.

Option 1: OpenUpgrade to 15, then OCU to 19

OpenUpgrade is the Odoo Community Association’s open-source migration project. Each branch migrates a database from the previous version: the 15.0 branch takes a 14 database to 15, the 14.0 branch takes 13 to 14, and so on back to very old releases. Up to 13.0 OpenUpgrade is a modified copy of Odoo that you run instead of Odoo; from 14.0 on it is a set of modules and scripts you run with standard Odoo.

The route: run OpenUpgrade one version at a time until the database is on Odoo 15, check it, then upload the Odoo 15 backup to OCU and let it chain 15→16→17→18→19 in one run. That keeps the manual part to the versions OCU does not cover.

Starting versionOpenUpgrade runs to reach 15Then with OCUWatch out for
Odoo 10515→19, one uploadPython 2.7 to Python 3 at the 10→11 step
Odoo 11415→19, one uploadAccounting rewrite at 12→13
Odoo 12315→19, one uploadAccounting rewrite at 12→13
Odoo 13215→19, one uploadOpenUpgrade changes form at 13→14
Odoo 14115→19, one uploadOne OpenUpgrade run, then OCU

Effort. Each OpenUpgrade run means an environment with the right Odoo and Python version, a copy of the database, the custom modules ported to that version or uninstalled, the run itself, and a check of the result. Expect to spend days per step on a customized database, not hours. The machine time is small next to that.

Risks. Script coverage differs per module and per version; each branch documents it in its docsource/modules*.rst files. Check that every module you use is covered for every step before you start, and plan what to do about the ones that are not.

Option 2: Odoo’s upgrade service with Enterprise

Odoo S.A. runs an upgrade service for databases covered by an Enterprise subscription. It migrates the standard modules across several versions on Odoo’s side, and it is how Odoo moves a Community database to Enterprise. Custom modules remain your or your partner’s job.

If you are willing to pay for Enterprise anyway, this is usually the shortest route from a very old version. If you want to stay on Community, it is not an option. Our Community vs Enterprise migration comparison covers the trade-offs. Check current pricing and conditions directly with Odoo.

Option 3: start fresh on 19 or 20 and import your data

Instead of migrating the database, install a new Odoo 19 or 20 database and bring the data across: contacts, products, chart of accounts, opening balances, open sales and purchase orders, stock levels. Odoo’s CSV import handles most of this; history stays behind, and the old system is kept read-only for reference and audits.

This is often the sensible choice for Odoo 10 or 11 systems with heavy customization, years of messy data, or a business that has changed a lot since the system was set up. It is also a chance to replace custom modules with standard features that did not exist back then. The cost is the loss of transaction history inside Odoo and the work of mapping and importing the data.

Comparing the three routes

OpenUpgrade + OCUOdoo upgrade serviceFresh start
Edition afterCommunityEnterpriseEither
History keptAllAllWhat you import
Skills neededOdoo hosting, PostgreSQL, Python for the steps to 15Low for standard modulesData mapping, functional setup
Custom modulesPort or drop at each stepPort to the target versionRebuild only what you still need
Main costYour time to 15; OCU from €99 after thatEnterprise subscriptionImplementation work

Prepare the old database first

Whatever route you choose, the same groundwork shortens it:

  1. Keep an untouched backup of the database and filestore, and do every trial on copies.
  2. List installed modules and mark each as standard, third-party or custom. Uninstall what nobody uses; every module removed is one less to carry through each step.
  3. Decide for each custom module whether it gets ported, replaced by a standard feature, or dropped.
  4. Close or clean what you can: draft documents nobody will finish, duplicate contacts, archived products with no history.
  5. Write down the checks that prove a migrated database is right: trial balance, open receivables and payables, stock valuation, a few known documents.

The Odoo migration checklist goes through these steps in detail.

Once you are on Odoo 15

From a Community 15 database, OCU takes over: upload the backup, choose 19 or 20, and it runs every intermediate step automatically, with the version-specific fixes for each hop. A test run is free, so you can check the result before paying for the production run, which costs one credit (€99) for the whole chain. See Odoo 15 to 20, Odoo 15 to 19 and Odoo 15 to 18 for what changes along the way, and the upgrade error guides for problems that typically appear in databases with a long history.

Frequently asked questions

Can OCU migrate Odoo 14 or older directly?
No. OCU starts at Odoo 15 Community. A database on Odoo 10 to 14 first has to reach version 15, for example with OpenUpgrade, and can then be uploaded to OCU, which chains 15→16→17ↂ18→19 in one run.
Can I skip versions when migrating an old Odoo database?
Not when you migrate the database itself. Every major version changes the schema in ways the next version’s migration scripts expect, so the database passes through each version in turn. Tools can chain the hops for you, but the hops still happen. Only a reimplementation, where you import data into a fresh database, skips versions.
How long does a migration from Odoo 12 to Odoo 19 take?
The machine time is the small part. The work is in the three OpenUpgrade hops from 12 to 15: setting up each environment, dealing with custom and third-party modules, and checking each result. Once the database is on 15, an automated run to 19 usually takes minutes to an hour depending on size. Run a test of each stage before planning the production cut-over.
Is there an upgrade service for Odoo 14 Community?
Odoo S.A.’s upgrade service is tied to an Enterprise subscription. For Community, OpenUpgrade covers 14→15, and from 15 you can use OCU for the remaining steps to 16, 17, 18, 19 or 20.
Can I move from Odoo Community 12 to Enterprise 18 in one go?
If you take an Enterprise subscription, Odoo’s own upgrade service is the route built for that, and it handles the switch from Community to Enterprise as part of the upgrade. Confirm the current conditions with Odoo before you plan around it. Custom modules still need porting by you or your partner.

Already on Odoo 15 or newer?

Upload a backup and run a free test migration to 19 or 20. No credit card required.

Start your free test migration