Migrate Odoo 15 to 20
Last updated: October 2026
Migrating Odoo Community Edition from version 15 to 20 involves 751 models added or removed, 132 module merges, and 185 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 15 and 20, the following major changes occur: 49 model renames, 817 constraint changes, and 185 field renames, alongside the 751 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.
- Five-step migration, one upload. OCU chains 15→16→17→18→19→20 into a single operation, the longest supported path: six major versions with one upload and one download.
- 751 models added or removed across five versions. The cumulative scope: 49 model renames, 132 module merges, 185 field renames and 817 constraint changes. Each step is validated before the next begins.
- Five generations of changes. Coupons become loyalty programs (16), mail channels become discuss channels (17), ir_property becomes JSONB (18), contracts become employee versions (19), and access rights are rebuilt as ir.access (20).
- Odoo 15 has been end of life since October 2024. Community Edition 15 no longer receives security patches. This path takes it to the newest release in one upload.
What changes in detail
Here is a detailed breakdown of the structural changes between Odoo 15 and 20:
Step 1: Odoo 15 to 16
- Loyalty, payment providers and JSONB translations. coupon.program becomes loyalty.program, payment.acquirer becomes payment.provider, and translations move from ir_translation into JSONB columns.
Step 2: Odoo 16 to 17
- Messaging overhaul. mail.channel is replaced by discuss.channel. Channel data and message history are carried over.
Step 3: Odoo 17 to 18
- ir_property table converted to JSONB. Company-dependent fields move to JSONB columns on each model.
Step 4: Odoo 18 to 19
- HR, units of measure and inventory. hr.contract becomes hr.version, unit of measure categories are removed, and valuation layers become product.value. groups_id becomes group_ids.
Step 5: 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 5-step migration handled automatically. You upload a version 15 backup and download a version 20 result — no intermediate steps required.
- Step 1: 15 → 16 — 147 models added or removed, 23 module merges, 138 constraint changes.
- Step 2: 16 → 17 — 134 models added or removed, 24 module merges, 158 constraint changes.
- Step 3: 17 → 18 — 155 models added or removed, 25 module merges, 120 constraint changes.
- Step 4: 18 → 19 — 129 models added or removed, 25 module merges, 207 constraint changes.
- Step 5: 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 5 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 5-step migration costs the same as a single-step one).
Frequently asked questions
- Can I really migrate from Odoo 15 all the way to 20?
- Yes. OCU chains five steps (15→16→17→18→19→20) into one job. You upload a v15 backup and download a v20 result.
- How much does a 15 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 stop at 19?
- OCU runs the same steps either way. Stopping at 19 makes sense when a third-party module you depend on has no Odoo 20 version yet; otherwise going to 20 saves a second migration later.
- What do I need on the server for Odoo 20?
- Python 3.12 or newer and PostgreSQL 16 or newer. An Odoo 15 server usually needs a new operating system and database server.
- 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 15 to 16 — 147 models added or removed, 23 module merges.
- Odoo 19 to 20 — 186 models added or removed, 35 module merges.
- Odoo 15 to 17 — 281 models added or removed, 47 module merges.
- Odoo 15 to 18 — 436 models added or removed, 72 module merges.
- Odoo 15 to 19 — 565 models added or removed, 97 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 16 to 20 — 604 models added or removed, 109 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.
- Coming from Odoo 10 to 14? — How to get an older database to 15 first.
- 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 15 to 20?
Free test migrations, unlimited runs. No credit card required.
Start your free test migration