Migrate Odoo 17 to 20

Last updated: October 2026

Migrating Odoo Community Edition from version 17 to 20 involves 470 models added or removed, 85 module merges, and 105 field renames. OCU automates this entire process — upload your database backup and download a production-ready database running Odoo 20.

New to Odoo upgrades? Start with our guide on how to upgrade Odoo Community Edition, which covers the options, the preparation and the steps that apply to every version.

What changes

Between Odoo 17 and 20, the following major changes occur: 28 model renames, 521 constraint changes, and 105 field renames, alongside the 470 models added or removed.

Counted from the Odoo source of each version and from the OCU migration mappings, step by step; Odoo’s internal test modules are left out because they never exist in a production database. Multi-step paths add up their steps.

  • Three-step migration, one upload. OCU chains 17→18, 18→19 and 19→20 into a single operation. Upload a v17 backup, download a v20 database.
  • Three architectural shifts. ir_property becomes JSONB columns (18), HR, units of measure and inventory valuation are restructured (19), and access rights, banks and time off types are rebuilt (20). Each step is validated before the next begins.
  • 85 modules consolidated. Across the three steps, 85 modules merge into their parent modules, from the sales product configurator to HR contracts and the website sale extras.
  • PostgreSQL 16 for the result. Odoo 20 needs PostgreSQL 16 and Python 3.12. OCU runs the whole chain on PostgreSQL 16.

What changes in detail

Here is a detailed breakdown of the structural changes between Odoo 17 and 20:

Step 1: Odoo 17 to 18

  • ir_property table converted to JSONB. Company-dependent fields move from the ir_property table to JSONB columns on each model: product prices, default accounts, stock locations and other company-specific settings.
  • 25 modules merged, 29 fields renamed. sale_product_configurator folds into sale, and inherited views are reloaded from the Odoo 18 XML.

Step 2: Odoo 18 to 19

  • 15 model renames. hr.contract becomes hr.version, procurement.group becomes stock.reference, product.packaging becomes product.uom, stock.valuation.layer becomes product.value, and others.
  • groups_id becomes group_ids. On users, actions, views and menus, with the old name rewritten in record rules, filters and server actions.

Step 3: Odoo 19 to 20

  • ir.access replaces ir.model.access and ir.rule. Standard access data is reloaded in the new format. Custom access rights and global record rules are converted; group record rules are kept and listed in the log for review.
  • res.bank, hr.leave.type and stock.scrap removed. Bank details move onto bank accounts, time off types become work entry types, and scrap orders are carried onto their stock moves.

Cumulative impact

  • 105 field renames across three steps. 29 in 17 to 18, 43 in 18 to 19 and 33 in 19 to 20. Domain references, filters and server actions are updated at each step.
  • 521 constraint changes. 120, 207 and 194 per step. Your data is checked against each step’s rules before they apply.

Migration path

This is a 3-step migration handled automatically. You upload a version 17 backup and download a version 20 result — no intermediate steps required.

  • Step 1: 17 → 18 — 155 models added or removed, 25 module merges, 120 constraint changes.
  • Step 2: 18 → 19 — 129 models added or removed, 25 module merges, 207 constraint changes.
  • Step 3: 19 → 20 — 186 models added or removed, 35 module merges, 194 constraint changes.

Before you migrate

  1. Back up your database. Create a fresh backup from Odoo’s database manager (Settings → Database Manager). The .zip format includes your filestore.
  2. Note your installed modules. Check Settings → Apps for any third-party or custom modules. These will need updated versions for Odoo 20 after migration.
  3. Run a test migration first. Test migrations are free and unlimited. Verify the result before committing a production credit.
  4. Plan your custom module updates. OCU handles standard Odoo modules. Custom or third-party modules need separate updates for Odoo 20 compatibility.

How it works

  1. Upload your .zip, .sql, or .dump backup. We auto-detect the source version.
  2. Migrate. We handle schema changes, module merges, field renames, and data migration across all 3 steps.
  3. Download your upgraded backup, ready for Odoo 20.

What OCU handles automatically

  • Schema changes. Column types, table renames, new required fields — all structural database changes are applied automatically.
  • Module merges. When Odoo consolidates modules between versions, OCU updates the module registry and migrates data to the new locations.
  • Field renames. Fields that change names between versions are renamed in the database, including references in domains, filters, and server actions.
  • Constraint validation. New CHECK and UNIQUE constraints are validated against your data, with automatic fixes for common violations.
  • View updates. Inherited views are reset so Odoo 20 can reload them from the updated XML definitions.
  • Filestore. Your attachments, images, and documents are preserved and included in the output.

Pricing

Test migrations are free and unlimited — run as many as you need to validate the upgrade. The output is neutralized (emails disabled, crons off) so it’s safe to explore but not for production use.

Production migrations cost one credit (99€), charged only when the migration completes successfully. If the migration fails, no credit is consumed. One credit covers the full path regardless of how many steps are involved (this 3-step migration costs the same as a single-step one).

Frequently asked questions

Can I go from Odoo 17 to 20 without installing 18 and 19?
Yes. OCU runs the three steps in one job. Upload a v17 backup and download a v20 result; the intermediate versions never need a server of their own.
How much does a 17 to 20 migration cost?
One credit (€99), the same as a single step. Test migrations are free, and the credit is only charged when a production migration completes successfully.
Is it safer to migrate one version at a time?
OCU runs the same steps either way: 17→18, then 18→19, then 19→20. Running them as one chained job makes no difference to the result and costs one credit instead of three.
What do I need on the server for Odoo 20?
Python 3.12 or newer and PostgreSQL 16 or newer. Plan the database server upgrade alongside the Odoo upgrade.
Can I test the migration before paying?
Yes. Test migrations are free, however many steps are involved. The test output has outgoing mail and scheduled actions switched off.

Other migration paths

Further reading

Ready to migrate Odoo 17 to 20?

Free test migrations, unlimited runs. No credit card required.

Start your free test migration