Migrate Odoo 16 to 20
Last updated: October 2026
Migrating Odoo Community Edition from version 16 to 20 involves 604 models added or removed, 109 module merges, and 143 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 16 and 20, the following major changes occur: 35 model renames, 679 constraint changes, and 143 field renames, alongside the 604 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.
- Four-step migration, one upload. OCU chains 16→17→18→19→20 into a single operation. Upload a v16 backup, download a v20 database.
- 604 models added or removed across four versions. The cumulative scope: 35 model renames, 109 module merges, 143 field renames and 679 constraint changes. Each step is validated before the next begins.
- Four architectural shifts. Discuss channels replace mail channels (17), ir_property becomes JSONB (18), HR, units of measure and valuation are restructured (19), and access rights, banks and time off types are rebuilt (20).
- Odoo 16 no longer receives fixes. Odoo supports the three most recent major versions, now 18, 19 and 20. This path takes a 16 database to the newest release in one upload.
What changes in detail
Here is a detailed breakdown of the structural changes between Odoo 16 and 20:
Step 1: Odoo 16 to 17
- Messaging overhaul. mail.channel is replaced by discuss.channel with new member and call session models. Channel data and message history are carried over.
- 24 modules merged, 38 fields renamed. Including project.task.planned_hours to allocated_hours and stock.move.quantity_done to quantity.
Step 2: Odoo 17 to 18
- ir_property table converted to JSONB. Company-dependent fields move to JSONB columns on each model, and inherited views are reloaded from the Odoo 18 XML.
Step 3: Odoo 18 to 19
- HR, units of measure and inventory. hr.contract becomes hr.version, unit of measure categories are removed, packagings become units, and valuation layers become product.value. groups_id becomes group_ids.
Step 4: Odoo 19 to 20
- Access rights, banks and time off types. ir.access replaces ir.model.access and ir.rule, bank details move onto bank accounts, and time off types become work entry types. Group record rules are kept and listed in the log for review.
Migration path
This is a 4-step migration handled automatically. You upload a version 16 backup and download a version 20 result — no intermediate steps required.
- Step 1: 16 → 17 — 134 models added or removed, 24 module merges, 158 constraint changes.
- Step 2: 17 → 18 — 155 models added or removed, 25 module merges, 120 constraint changes.
- Step 3: 18 → 19 — 129 models added or removed, 25 module merges, 207 constraint changes.
- Step 4: 19 → 20 — 186 models added or removed, 35 module merges, 194 constraint changes.
Before you migrate
- Back up your database. Create a fresh backup from Odoo’s database manager (Settings → Database Manager). The .zip format includes your filestore.
- Note your installed modules. Check Settings → Apps for any third-party or custom modules. These will need updated versions for Odoo 20 after migration.
- Run a test migration first. Test migrations are free and unlimited. Verify the result before committing a production credit.
- 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
- Upload your .zip, .sql, or .dump backup. We auto-detect the source version.
- Migrate. We handle schema changes, module merges, field renames, and data migration across all 4 steps.
- 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 4-step migration costs the same as a single-step one).
Frequently asked questions
- Can I really migrate Odoo 16 straight to 20?
- Yes. OCU chains the four steps into one job. You upload a v16 backup and download a v20 result; each intermediate step is validated before the next starts.
- How much does a 16 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.
- How long does a four-step migration take?
- Longer than a single step, since each of the four steps runs a full Odoo upgrade. The test migration report shows the exact time for your database.
- What do I need on the server for Odoo 20?
- Python 3.12 or newer and PostgreSQL 16 or newer. An Odoo 16 server usually needs a new operating system and database server, so plan it as its own change.
- Can I test the full chain 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
- Odoo 16 to 17 — 134 models added or removed, 24 module merges.
- Odoo 19 to 20 — 186 models added or removed, 35 module merges.
- Odoo 16 to 18 — 289 models added or removed, 49 module merges.
- Odoo 16 to 19 — 418 models added or removed, 74 module merges.
- Odoo 18 to 20 — 315 models added or removed, 60 module merges.
- Odoo 17 to 20 — 470 models added or removed, 85 module merges.
- Odoo 15 to 20 — 751 models added or removed, 132 module merges.
Further reading
- How to Upgrade Odoo Community Edition — Step-by-step guide covering all migration approaches.
- Odoo Migration Checklist — Everything to prepare before, during, and after upgrading.
- Odoo upgrade errors — Fixes for the error messages that stop real upgrades.
- What's New in Odoo 20 — Every verified breaking change in the 19→20 step.
- Pricing — Free test migrations, 99€ production credits.
Ready to migrate Odoo 16 to 20?
Free test migrations, unlimited runs. No credit card required.
Start your free test migration