Bu makale şu anda yalnızca İngilizce olarak mevcuttur. Çeviri yakında eklenecektir.
To upgrade from Odoo 19 to Odoo 20, request an upgraded test copy of your database from Odoo, port any custom modules to 20.0 at the same time, test the copy thoroughly, and only then request the production upgrade. That is Odoo's own documented process, and it is the same whether you start from 19, 18 or 17.
To upgrade from Odoo 19 to Odoo 20, request an upgraded test copy of your database from Odoo, port any custom modules to 20.0 at the same time, test the copy thoroughly, and only then request the production upgrade. That is Odoo's own documented process, and it is the same whether you start from 19, 18 or 17. The step that sets the date is almost always custom modules: Odoo's documentation states that a database with custom modules "cannot be upgraded until a version of your custom modules is available for the target version of Odoo."
This guide follows Odoo's upgrade documentation and the Odoo 20 release notes, both read on 25 September 2026. The first half is the official process. The second half is our checklist of 20.0 changes that affect custom code, drawn from those release notes.
Key Takeaways
- Odoo's documented order: upgraded test database, port custom modules, test, then upgrade production
- Custom modules decide the date: a database cannot be upgraded until every custom module exists for 20.0
- Odoo supports each major version for three years. Odoo lists 17.0's standard support as ending in September 2026 (planned)
- On Odoo Online, major-version upgrades become mandatory every two years; Odoo.sh and on-premise users choose their own timing
- For custom code, the 20.0 changes to check first are record rules (replaced by a domain on access rights), removed mail tracking values, Font Awesome being replaced by Material Symbols, and the accounting structure (parent accounts, depreciation models)
- Before booking an upgrade, check whether every third-party module has a published 20.0 build
Step 0: Decide whether now is the time
- On 17.0: Odoo's support table lists the end of 17.0's standard support as "September 2026 (planned)". Odoo offers extended support after that, but its documentation describes it as "subject to a mandatory additional fee". Upgrade soon, and consider going straight to 19 or 20.
- On 18.0 or 19.0: you are within standard support (Odoo lists September 2027 and September 2028, both planned). Upgrade when the 20.0 changes are worth it to you and your modules are ready.
- On Odoo Online: the timing is partly decided for you. For a major version, Odoo states that "an upgrade is mandatory every two years", and it notifies you before an automatic upgrade.
Odoo's own advice on distance also applies: "the smaller the version gap, the easier the upgrade should be." You can upgrade directly to any supported version.
Step 1: Get an upgraded test database
Odoo Online: open the database manager, choose the database, click Manage, then Upgrade. Pick the target version, enter the email that should receive the link, and leave the purpose as Test. Odoo emails a link to the upgraded test database when it is ready.
Odoo.sh: the upgrade platform is built in. Odoo sends the latest production daily backup to the upgrade platform and loads the result on a staging branch in a special mode: every commit you push restores the upgraded backup and updates all custom modules. That lets you port and test your code against a clean copy of the upgraded data. The upgrade log is at ~/logs/upgrade.log in the staging build.
On-premise: run Odoo's upgrade script on the machine that hosts the database:
python <(curl -s https://upgrade.odoo.com/upgrade) test -d <your db name> -t <target version>
Odoo notes three requirements: standard Linux commands must be available (WSL works); the system user needs access to the database; and the script must reach the upgrade servers on TCP 443 and on random ports between 32768 and 60999. That port range often needs a firewall exception. The upgraded dump comes back without your production filestore, so merge the returned filestore folder into a copy of your production filestore before testing.
Whichever route you use, you can request more than one test database. Odoo attaches an upgrade report to the success email and makes it available in Discuss to administrators. Read it: it lists the changes the new version made to your data.
Step 2: Port custom modules in parallel
Odoo recommends that customers who maintain their own modules request the upgraded database "while also upgrading the source code of your custom modules." Work on both at the same time; the test database is where the ported code proves itself.
Three categories need different handling:
- Your own custom modules. You or your developer ports them. The next section lists the 20.0 changes to check first.
- Third-party modules (from apps.odoo.com or a vendor). The vendor has to publish a 20.0 build. Ask for a date before you book the upgrade. For ECOSIRE modules, our Odoo 20 compatibility page shows which ones already have a published 20.0 build, read live from our download records.
- Modules you no longer need. Uninstall them on 19 before you upgrade. Every module removed is one less to port and test.
What changed in 20.0 that affects custom code
This list comes from Odoo's 20.0 release notes. It is where we look first when porting a module. It is not a complete porting manual: read the release notes and Odoo's developer documentation for your case.
| Area | What Odoo's release notes say | What to check in your modules |
|---|---|---|
| Security | "Access rights have been simplified by removing record rules and adding a domain directly at the access right level." | Every record rule your modules ship; re-test what each user group can see and edit |
| Mail tracking | "Tracking values have been removed; the tracking message is now generated on the fly." Admins who still need them "can install a dedicated module." | Code, reports or exports that read stored tracking values |
| Icons | "Font Awesome icons have been replaced by Material Symbols icons." | Custom views, buttons and website snippets that use Font Awesome classes |
| Push notifications | No longer handled by Firebase, but by Odoo's in-house push tools | Any integration that assumed Firebase |
| Chart of accounts | "Account groups have been replaced by parent accounts … Account codes are now optional." | Reports, imports and code that rely on account groups or assume every account has a code |
| Fixed assets | "Asset models have been replaced by depreciation models" | Asset customizations and imports |
| Payments | Statuses renamed: "In Process" → "Paid", "Paid" → "Reconciled" | Filters, dashboards and exports keyed on the old labels |
| Expenses | The standalone "Employee Expenses" menu is removed; approved expenses create draft bills | Menus, access rights and training material |
| Inventory | "The return wizard has been removed, and the returns process has been simplified." | Customizations of the return flow |
| Manufacturing | The flexible consumption setting is removed (flexible consumption is now the default); "Produce" and "Produce All" are merged into one "Produce" button | Code and tests that press or override those buttons, or that rely on strict consumption |
| Project | The profitability report in the project dashboard is removed and replaced by dedicated budget and margin reports | Customizations and user training that relied on it |
Step 3: Test the upgraded database like a production day
Odoo neutralizes test databases: scheduled actions are disabled, and outgoing mail servers are archived and replaced with a fake one. Your test copy will not email customers, but it also will not show you anything that only happens on a schedule. Run those flows by hand.
A test pass we use with clients:
- Finance: post an invoice and a bill, register and reconcile a payment, run the reports your accountant files, and compare balances with the 19 database.
- Sales and purchase: quote to invoice, and purchase order to receipt to bill, including every automated step you rely on.
- Inventory and manufacturing: receipts, deliveries, a return (the flow has changed), a manufacturing order and, if you use it, a split order.
- Security: sign in as a user from each group and confirm what they can and cannot see. This is where the record-rule change shows up.
- Integrations: payment providers, shipping connectors, marketplaces, and anything that calls Odoo's API.
- Printouts: invoices, delivery slips and labels. Odoo redesigned product, manufacturing and packaging labels in 20.0.
Report problems with Odoo's standard behaviour to Odoo: on the Support page, choose "An issue related to my future upgrade (I am testing an upgrade)". Problems in custom or third-party modules go to whoever maintains that module.
Step 4: Upgrade production
When testing is clean, request the production upgrade. The database is unavailable while the upgrade runs. For a production problem, Odoo's Support page has a separate option: "An issue related to my upgrade (production)".
Plan the window: freeze data entry, take and verify a backup, run the upgrade, repeat a short version of your test pass, then reopen. Odoo's documentation also notes what an upgrade does not cover: downgrading, switching editions (Community to Enterprise), changing hosting type, or migrating from another ERP.
Community edition
Odoo's upgrade platform and documentation are written around Odoo's hosted and supported editions. If you run Community on your own server, check what applies to you. Many Community teams port their data with a partner or with community tools. The custom-code checklist above applies either way, because the changes are in the shared framework.
Getting help
If you want the upgrade done for you, our Odoo migration service covers the test upgrade, custom-module porting and the test pass above. If one blocker is an ECOSIRE module, check the Odoo 20 compatibility page, and contact us about any module that is not there yet. For what the new version offers, read what's new in Odoo 20.
Frequently Asked Questions
Can I upgrade directly from Odoo 17 to Odoo 20?
Yes. Odoo's documentation states that you can upgrade from any version to supported versions only, and 20.0 is a supported version. Odoo also notes that a smaller version gap usually makes for an easier upgrade, so the porting work for custom modules grows with the distance.
How long does an Odoo 19 to 20 upgrade take?
The database upgrade itself is done by Odoo's platform. For Odoo Online, Odoo says that when its silent test upgrade succeeds and "lasts less than 20 minutes", you can trigger the upgrade directly from the database. The total project time depends mostly on how many custom and third-party modules have to be ported and tested.
Do I have to upgrade to Odoo 20 now?
Not necessarily. Odoo supports each major version for three years, and Odoo.sh and on-premise users choose their own timing. On Odoo Online, a major-version upgrade becomes mandatory every two years. If you are on 17.0, its standard support is listed as ending in September 2026 (planned), so plan an upgrade now.
Will my custom modules work after upgrading to Odoo 20?
Only once they are ported. Odoo states that a database with custom modules cannot be upgraded until those modules exist for the target version. On 20.0, check record rules, stored mail tracking values, Font Awesome icons and the accounting structure first.
Does the upgrade copy my attachments and files?
On-premise, the upgraded database comes back without your production filestore. Odoo returns a filestore folder of new and extracted files that you merge with your production filestore before testing. On Odoo.sh, the process uses your production backup and runs on a staging branch.
Yazan
ECOSIRE TeamTechnical Writing
The ECOSIRE technical writing team covers Odoo ERP, Shopify eCommerce, AI agents, Power BI analytics, GoHighLevel automation, and enterprise software best practices. Our guides help businesses make informed technology decisions.
ECOSIRE
Odoo ERP ile İşinizi Dönüştürün
Operasyonlarınızı kolaylaştırmak için uzman Odoo uygulaması, özelleştirme ve destek.
İlgili Makaleler
German E-Invoicing (E-Rechnung) in Odoo: XRechnung, ZUGFeRD and the 2025–2028 Deadlines
Receiving e-invoices is mandatory in Germany since 2025 and issuing follows in 2027/2028: accepted formats, how Odoo produces XRechnung and ZUGFeRD, and what to test.
France's E-Invoicing Reform (2026–2027): What Changes for a Company on Odoo
Receiving e-invoices is mandatory in France since 1 September 2026 and SMEs issue them from 1 September 2027: calendar, approved platforms, Factur-X/UBL/CII and an Odoo checklist.
VeriFactu in Odoo: A Practical 2027 Guide for Spanish Companies
What VeriFactu requires after the move to 2027, who is out of scope (SII, TicketBAI), how to enable Odoo 19's VeriFactu module and what to test before production.