Odoo 20 was released in September 2026, and the question most Odoo 19 users are asking is not "is it out?" but "what will it cost us to move, and what will it break?" A good Odoo 20 migration is mostly a planning exercise.
Odoo 20 was released in September 2026, and the question most Odoo 19 users are asking is not "is it out?" but "what will it cost us to move, and what will it break?" A good Odoo 20 migration is mostly a planning exercise. The database conversion itself is the shortest part. The time goes into custom modules, third-party apps, integrations, and the testing that proves your accounting and warehouse still behave the way they did last Friday.
This guide covers the process for moving an Odoo 19 database to Odoo 20, what Odoo's own documentation says about the upgrade, which technical requirements have changed, and how to decide on timing. It is written for decision-makers and for the administrators and developers who will do the work.
Quick answer: Odoo 19 to Odoo 20 migration means upgrading an existing Odoo 19 database to version 20.0. The standard flow has four parts: audit what you run (custom modules, third-party apps, integrations), request a test upgrade of a copy of your database, fix and retest until your business workflows pass, then upgrade production in a planned window. Before touching anything, check the infrastructure floor: Odoo 20 requires Python 3.12 or later and PostgreSQL 16 or later. There is no rush: Odoo 19 is listed with standard support planned until September 2028.
Odoo 19 to Odoo 20 Migration: What You Need to Know
Odoo uses the word "upgrade" for moving a database from one major version to another, and "migration" is the term most people use for the same project once custom code, data checks and integrations are included. In practice, an Odoo 20 migration involves upgrading an existing Odoo 19 database to the Odoo 20 version while validating custom modules, integrations, data, and business workflows. A wider migration, such as moving from another ERP into Odoo, is a different project with its own data-mapping work.
Three facts shape every plan:
- Odoo's upgrade platform converts standard data and standard apps. It does not rewrite your custom code. Odoo's upgrade documentation states that a database containing custom modules cannot be upgraded until a version of those modules exists for the target version. Making them compatible is the maintainer's responsibility.
- A production upgrade cannot be reversed in place. The only real rollback is the backup you took beforehand. This is why the test upgrade matters.
- You move one major version here. 19 to 20 is a single step, which is the easy case. Odoo allows upgrades from any version to a supported version, but multi-version jumps carry more risk.
Why Upgrade from Odoo 19 to Odoo 20?
First, the honest answer: you may not need to upgrade this month. Odoo's support table lists Odoo 19.0 with standard support planned to end in September 2028, and Odoo 20.0 in September 2029. Standard support covers helpdesk, bug fixes and security updates. So the real reasons to move are about timing and value, not panic.
Reasons that hold up:
- A longer support runway. Moving to 20.0 resets the three-year standard-support clock.
- Features that matter to your processes. Odoo publishes release notes for each version. Read them against your own workflows (accounting, inventory, manufacturing, HR, POS, eCommerce), and upgrade because a specific change helps you, not because a version number is higher.
- Avoiding a bigger jump later. Odoo only upgrades to supported versions, and an expired version stays available as a target for six months after end of life. Companies that skip several versions end up paying for a multi-version migration with more custom code to rework.
- Integration housekeeping. If you still run XML-RPC or JSON-RPC integrations, the version change is a natural point to review them (more on that below).
- Infrastructure refresh. Odoo 20 raises the Python and PostgreSQL minimums, which many self-hosted teams were due to update anyway.
Reasons to wait a few months:
- A critical third-party module has no Odoo 20 release yet.
- You are in a financial year-end, a peak season or an audit.
- Your custom modules need rework and the budget is not approved.
Odoo 19 vs Odoo 20: What Changes?
This table sticks to what Odoo's documentation confirms. Feature-level changes belong in the official Odoo 20 release notes; check those against the apps you actually use.
|
Area |
Odoo 19 |
Odoo 20 |
|---|---|---|
|
Release |
September 2025 |
September 2026 |
|
Standard support ends (planned) |
September 2028 |
September 2029 |
|
Minimum Python |
3.10 |
3.12 |
|
Minimum PostgreSQL |
13 |
16 |
|
XML-RPC / JSON-RPC db service |
Deprecated |
Removed |
|
XML-RPC / JSON-RPC common and object services |
Deprecated, removal scheduled |
Still present, deprecated; removal scheduled for Odoo 22 (fall 2028) |
|
JSON-2 API (/json/2) |
Available |
Available |
|
Hosting |
Odoo Online, Odoo.sh, on-premise |
Odoo Online, Odoo.sh, on-premise |
Two rows deserve emphasis. The Python and PostgreSQL changes affect anyone who runs their own servers. And the API row is the one most online articles get wrong, which we cover in its own section below.
Who Should Upgrade from Odoo 19 to Odoo 20?
The right timing depends on what sits on top of your database.
Standard Odoo, no custom code, on Odoo Online or Odoo.sh. You are the easiest case. Run a test upgrade, test your key processes, and schedule production. Odoo Online does not allow custom Python modules or non-standard apps, so there is little that can conflict.
Heavy customisation. Treat the project as a development project with a database attached. Custom modules need updating, and you should budget for rework in views, JavaScript and reports before the first test upgrade is meaningful.
Third-party apps from the Odoo Apps store or OCA. You are blocked until each vendor publishes a 20.0 version. Ask vendors now. Remember that day-one availability is rare.
Companies with external integrations (payment gateways, shipping, marketplaces, BI tools, middleware). Your timeline depends on whether each connector works with Odoo 20's API surface.
Self-hosted teams on older operating systems. Python 3.12 and PostgreSQL 16 are not available by default on every distribution. Ubuntu 22.04 ships Python 3.10 and Debian 12 ships Python 3.11, for example, whereas Ubuntu 24.04 ships Python 3.12 and PostgreSQL 16. Check your own distribution's packages before you plan.
Odoo Community users. Possible, but the tooling differs; see the Community versus Enterprise section.
What Should You Check Before Odoo 20 Migration?
A migration project goes wrong when the survey is shallow. Spend a week on these checks before you request a single test upgrade.
Check Your Odoo Edition
Community and Enterprise share a version number and release date, but the upgrade path differs. Odoo's official upgrade platform is a service tied to Enterprise subscriptions, while Community databases are generally upgraded with community-maintained scripts such as OCA OpenUpgrade. Confirm which route applies and whether it already supports 20.0 before you commit to a date.
Check Your Hosting Environment
Odoo Online, Odoo.sh and on-premise each have a different upgrade mechanism and different constraints (covered in the hosting section below). Establish which one you are on, who controls the server, and who owns the backups.
Audit Custom Modules
List every custom module: purpose, author, last edit, Odoo version, dependencies, and whether the source is in version control. Orphaned modules with no repository are a common surprise. Decide for each: migrate, rewrite, replace with standard functionality, or retire.
Check Third-Party Apps
For each non-Odoo app, record the vendor, current version, and whether a 20.0 branch exists. Where a module has no 20.0 release, your options are waiting, commissioning the update, or replacing it. Also note whether the module stores data you would lose by uninstalling it.
Audit External Integrations
Make an inventory: what connects to Odoo, which protocol it uses (XML-RPC, JSON-RPC, JSON-2, direct database access, scheduled file exchange), who maintains it, and which credentials it uses. Integrations built by someone who left the company are the ones that bite.
Review Custom Reports and Workflows
Custom QWeb reports, server actions, automated actions, scheduled actions, email templates and Studio customisations all touch standard models that may have changed. List the ones the business would notice within a day if they failed: invoices, delivery slips, payroll, commission reports.
Check Database and Server Requirements
For self-hosted systems, the checks are concrete:
- Python 3.12 or later (the Odoo 20 minimum).
- PostgreSQL 16 or later. If you are on an older PostgreSQL, you will need to plan a database server upgrade, which is a separate task with its own downtime and backup considerations.
- Python dependencies in your custom code compatible with Python 3.12. Code that ran on 3.10 or 3.11 can fail on 3.12 if it relies on modules removed from the standard library (such as distutils).
- Disk space for the database, the filestore and at least one full copy for testing.
Create a Complete Backup
Take a full backup of both the database and the filestore, store a copy off the server, and test restoring it to a separate machine. A backup you have never restored is an assumption. On-premise teams often forget the filestore, which holds attachments and images and is not part of a database dump.
Odoo 19 to Odoo 20 Migration Checklist
|
Phase |
Task |
Typically owned by |
|---|---|---|
|
Before migration |
Confirm edition, hosting, and Odoo 19 patch level |
IT / partner |
|
Inventory custom modules, third-party apps, integrations |
Developer / partner |
|
|
Check vendor Odoo 20 availability for every third-party app |
Project lead |
|
|
Upgrade server to Python 3.12 and PostgreSQL 16 (self-hosted) |
Sysadmin |
|
|
Full backup of database and filestore; test the restore |
Sysadmin |
|
|
Agree test scenarios and acceptance criteria with each department |
Business owners |
|
|
During migration |
Request test upgrade on a copy of production |
Admin / partner |
|
Review the upgrade report and logs |
Developer |
|
|
Update custom modules; run upgrade scripts where needed |
Developer |
|
|
Repeat test upgrades as fixes accumulate |
Developer |
|
|
Functional, integration and regression testing |
QA / key users |
|
|
Before production |
User acceptance testing with real scenarios |
Business users |
|
Final test upgrade close to the cutover date |
Admin / partner |
|
|
Freeze changes; set maintenance window; brief users |
Project lead |
|
|
Rollback plan written and rehearsed |
Sysadmin |
|
|
After migration |
Validate data (accounting, stock, partners) against Odoo 19 |
Finance / ops |
|
Re-enable and test integrations, payments, carriers, mail |
Developer |
|
|
Monitor logs, performance, scheduled actions for 1–2 weeks |
Admin |
|
|
Keep the Odoo 19 backup until the first period close passes |
Sysadmin |
Step-by-Step Odoo 19 to Odoo 20 Migration Process
Step 1. Audit Your Odoo 19 Environment
Document the version and patch level, the installed apps, user counts, database and filestore size, scheduled actions, mail servers and domain setup. Note anything that behaves oddly today. A migration will not fix existing data problems, and you want to know about them before they become "migration bugs."
Step 2. Review Custom Modules
Open each module and assess the likely effort. Python model code that follows the ORM conventions usually moves cleanly. Heavily overridden views, JavaScript widgets and report templates are where effort concentrates. Odoo's own developer documentation recommends this order: first make the modules install on a clean, empty database of the target version, then make them work on the upgraded copy of your real data.
Step 3. Check Third-Party Apps
Confirm each app has a 20.0 branch. Check the date and the vendor's support statement, not just the repository name. For modules that will not arrive in time, decide whether the migration proceeds without them.
Step 4. Review APIs and External Integrations
Identify which integrations call /xmlrpc, /xmlrpc/2 or /jsonrpc, and which need the removed db service. This is covered in detail in the API section below.
Step 5. Prepare Backup and Test Environment
Create an isolated test environment that mirrors production. Disable outgoing email, scheduled actions that send data out, and any integration that could write to real external systems. A test database that emails real customers is a classic avoidable incident.
Step 6. Request an Odoo 20 Test Upgrade
How this works depends on your hosting:
- Odoo Online: request the upgrade from the database manager and choose the test purpose.
- Odoo.sh: use the Upgrade tab to run a test upgrade on a staging branch.
- On-premise: use the upgrade platform (upgrade.odoo.com) with a database dump, or the command-line tool for a test upgrade.
Confirm that 20.0 is offered as a target for your database at the time you request it. Odoo's guidance is to test first, and to move to production within a short window after a successful test (the upgrade platform mentions about three days), so the data that arrived in between stays small.
Step 7. Update Custom Modules
Update manifests, dependencies and code, then install each module on a clean Odoo 20 database before trying the upgraded copy. Where data in your custom tables must change shape, write upgrade scripts. Odoo publishes the upgrade-util helper library for this, and the scripts run in defined phases during the module update.
Step 8. Fix Migration Issues
Work through the upgrade report and logs, then through the failures your testers find. Prioritise by business impact: anything that blocks invoicing, delivery, payroll or payments first, cosmetic issues later. Re-request a fresh test upgrade periodically so you are testing against realistic data.
Step 9. Perform Functional Testing
Run each business process end to end: quotation to cash, purchase to payment, manufacturing order to finished goods, hire to payroll. Use real scenarios, including the ugly ones such as partial deliveries, credit notes, multi-currency and returns.
Step 10. Perform Integration Testing
Test each connector against the Odoo 20 test database in a sandbox of the external system. Check authentication, create, read, update and delete operations, error handling, and rate behaviour.
Step 11. Conduct User Acceptance Testing
Have the people who do the work, not the project team, run their daily tasks and sign off. Record what they tested and what they accepted.
Step 12. Schedule Production Cutover
Choose the window based on your quietest period and your downtime tolerance. Freeze configuration and code changes, announce the downtime, take the final backup, and run the production upgrade using the same steps you rehearsed. A written rollback plan (restore the backup, repoint DNS or integrations) belongs in the runbook.
Step 13. Validate the Production Database
Run the post-migration checklist below before reopening the system to all users. Compare key balances and counts against Odoo 19, and keep the pre-upgrade backup until you have been through at least one accounting period close.
Planning an Odoo 20 upgrade? Get your migration environment assessed before production.
What Can Break During Odoo 19 to Odoo 20 Migration?
The list below describes risk categories and where to look. It does not claim specific removed methods, because the specifics of your code decide what fails.
|
Area |
Potential issue |
What to check |
Recommended action |
|---|---|---|---|
|
Custom modules |
Install errors, changed model or field definitions, overridden methods that no longer match |
Install on empty 20.0 database; read upgrade logs |
Fix on a branch, retest on a fresh upgraded copy |
|
Third-party apps |
No 20.0 version, or an older version that does not install |
Vendor release status, dependency versions |
Wait, commission the update, or replace |
|
APIs |
Calls to the removed db service; deprecated common/object endpoints still working but now flagged |
Server logs, integration code, middleware settings |
Move to JSON-2 on a plan; fix db calls first |
|
Website customisations |
Broken templates, snippets or JavaScript |
Every custom page and theme override |
Retest on desktop and mobile; fix assets |
|
eCommerce |
Checkout, cart, pricing, tax and payment flow differences |
Full test orders with each payment method and carrier |
Run real sandbox transactions end to end |
|
Reports |
QWeb layout shifts, missing fields, wrong totals |
Invoices, delivery slips, payslips, custom exports |
Compare printed output with Odoo 19 side by side |
|
Automated actions |
Domains or trigger fields pointing at changed fields |
Every automated and scheduled action |
Re-save, retest, check logs |
|
Accounting |
Balance or tax differences, reconciliation or localisation changes |
Trial balance, aged reports, tax reports, bank reconciliation |
Compare against Odoo 19 before signing off |
|
Inventory |
Valuation, reservations or routes behaving differently |
Stock valuation report, open pickings, lots and serials |
Reconcile counts and value with a physical sample |
|
External integrations |
Authentication failures, changed payloads, timeouts |
Each connector, with logs |
Test against the sandbox; fix before cutover |
Not sure whether your Odoo 19 customisations are ready for Odoo 20? Ask Odiware for a custom-module compatibility review.
Odoo 20 API Changes: XML-RPC, JSON-RPC and JSON-2
This is the area where outdated advice is most common. For about a year, articles and Odoo's own earlier documentation said the XML-RPC and JSON-RPC endpoints would disappear in Odoo 20. That is no longer the full picture, and acting on the old claim could mean needless emergency work or, worse, ignoring a change that does apply.
What Odoo's current documentation says:
- The legacy RPC endpoints (/xmlrpc, /xmlrpc/2, /jsonrpc) are deprecated.
- They expose three services: common, db and object.
- The db service was removed in Odoo 20 (fall 2026), and in Odoo Online 19.1.
- The common and object services are scheduled for removal in Odoo 22 (fall 2028) and Odoo Online 21.1 (winter 2027).
So XML-RPC and JSON-RPC have not been wholesale removed in Odoo 20. Integrations that read and write business records through the object service are expected to keep working on Odoo 20, while still producing deprecation warnings. What stops working are calls that manage databases over RPC: creating, duplicating, listing or dropping databases. If you run provisioning scripts, backup tooling or test-environment automation built on those calls, find them now.
The replacement is the JSON-2 API. It is served over HTTP at /json/2/<model>/<method>, authenticates with an API key sent as a bearer token (instead of login and password), selects the database with a header when needed, and uses Odoo's standard security model, so a key can only do what its user can do. It has built-in documentation at /doc. Odoo Online's external API access is limited to custom pricing plans, so check yours.
What to review for an Odoo 20 API migration:
- Search integration code and middleware for /xmlrpc, /jsonrpc and database-management calls.
- Check connector vendors (n8n, Zapier-style tools, marketplace connectors, accounting or logistics middleware) for JSON-2 support.
- Replace db service usage first, since that is what breaks in Odoo 20.
- Plan the move of remaining object calls to JSON-2 before Odoo 22, ideally during this migration project rather than in a separate one.
- Replace password-based credentials with scoped API keys.
A note on timing: Odoo has changed this schedule once already. Check the live documentation for your target version on the day you finalise your plan.
Odoo 20 Custom Module Migration
Odoo's developer documentation describes a sensible order: make your modules installable on an empty target-version database, then make them work on the upgraded copy of production data. Empty databases remove noise such as Studio changes and leftover configuration, so failures point at your code.
- Module dependencies. Check every depends entry still exists in 20.0 under the same name and with the same behaviour. Third-party dependencies are the usual blocker.
- Python code. Confirm Python 3.12 compatibility. Review overridden methods and any use of internal ORM or helper functions that may have changed signature.
- Models and fields. Look for renamed, removed or retyped standard fields that your code reads, writes or extends. Computed and stored fields may need recomputation after the upgrade.
- Views and XML. Inherited views break when the parent view changes. Expect to revisit XPath expressions and view attributes.
- JavaScript and Owl. Custom widgets and web client code are among the highest-effort parts of any version move. Test them in the browser, not just in code review.
- Controllers. Check routes, authentication modes, request handling and any website or portal logic.
- Automated and scheduled actions. Re-verify domains, trigger fields and the code in server actions.
- Reports. QWeb templates referencing changed fields or layout structures need side-by-side comparison with Odoo 19 output.
- Security rules. Access rights and record rules should be reviewed, as new models or groups may appear in standard modules.
- Data migration scripts. If a custom model's structure changes, write upgrade scripts so existing data moves with it, and test them on a copy of real data. Odoo publishes the upgrade-util library for common operations.
On Odoo Online, custom Python modules cannot be installed at all, so this section applies to Odoo.sh and on-premise deployments. Because Odiware also handles custom development, the module updates can be scoped together with the migration, using one shared inventory (see Odiware's Odoo customization services).
How to Test Your Odoo 20 Migration
Testing is where migrations succeed or fail. Run these in a copy of production data, in this order, and keep the results.
|
Test type |
What it covers |
Who runs it |
Pass condition |
|---|---|---|---|
|
Smoke test |
Login, menus, all apps open, no server errors |
Admin |
All apps load; logs clean |
|
Functional test |
End-to-end processes: sales, purchase, stock, manufacturing, HR, accounting |
Key users |
Outputs match Odoo 19 behaviour |
|
Data validation |
Record counts, balances, stock values, partner data |
Finance / ops |
Totals reconcile to Odoo 19 |
|
Integration test |
Each API consumer, payment gateway, carrier, mail, EDI |
Developer |
Correct data both directions; errors handled |
|
Regression test |
Previously working custom features and reports |
QA / developer |
No new failures vs. Odoo 19 baseline |
|
Performance test |
Heavy lists, reports, scheduled jobs, concurrent users |
Developer / sysadmin |
Comparable to or better than Odoo 19 |
|
Security test |
Access rights, record rules, API keys, portal visibility |
Admin / security |
Users see only what they should |
|
User acceptance test |
Real daily tasks by real staff |
Business users |
Written sign-off |
Two practical points. First, test data validity, not just whether screens load: a trial balance that differs by a few cents will not show up in a smoke test. Second, test the negative cases, such as a payment that fails, a delivery that is partial, or a user without access.
Odoo 20 Migration Downtime: How Long Does It Take?
There is no honest universal number. Anyone quoting one without seeing your database is guessing. The duration depends on:
- Database size. More rows and a larger filestore take longer to convert and to move.
- Custom modules. Upgrade scripts and recomputed fields add time.
- Integrations. Each one needs pausing, repointing and retesting.
- Third-party apps. Their own migration scripts run during the upgrade.
- Data volume and history. Years of accounting, stock moves and mail messages affect run time.
- Testing requirements. Regulated or high-volume businesses need longer validation before reopening.
- Hosting. On Odoo Online and Odoo.sh, the platform runs the process. On-premise adds server steps you control.
- Downtime tolerance. A business that can stop on a Sunday can run a simple cutover. A business that cannot stop needs a more careful plan.
The best predictor is your own test upgrade. How long the test upgrade runs on a full copy is the best available estimate for production, and a final rehearsal close to cutover gives you a realistic maintenance window.
How Much Does Odoo 19 to Odoo 20 Migration Cost?
There is no fixed price, because the cost follows the amount of work, not the version number. These are the drivers:
|
Cost factor |
Why it moves the price |
|---|---|
|
Number and complexity of custom modules |
Each needs code review, changes and retesting |
|
Third-party apps |
Vendor updates, replacements, or custom forks |
|
Integrations and API work |
JSON-2 migration, connector changes, sandbox testing |
|
Database and data quality |
Cleaning, volume, multi-company and multi-currency setups |
|
Hosting type |
Online and Odoo.sh use Odoo's tooling; on-premise adds server work |
|
Server and infrastructure updates |
Python 3.12 and PostgreSQL 16 upgrades for self-hosted systems |
|
Testing depth |
Number of scenarios, departments and user acceptance cycles |
|
Cutover and downtime constraints |
Weekend or phased cutovers cost more to plan |
|
Training and post-go-live support |
Staff onboarding and hypercare period |
|
Odoo licence and upgrade service terms |
Subscription terms depend on your agreement with Odoo |
A migration with a standard database and no custom code sits at one end. A heavily customised, integrated, self-hosted system sits at the other. For how Odiware thinks about budgeting a migration, see our dedicated Odoo migration cost page.
Common Odoo 20 Migration Mistakes
- Skipping the test upgrade. It is the cheapest insurance in the project.
- Upgrading production directly. The upgrade cannot be reversed in place.
- Ignoring custom modules. They block the upgrade until they match the target version.
- Ignoring third-party apps. One unavailable app can hold up the whole schedule.
- Not testing integrations. Failures show up days later as missing orders or stuck payments.
- Inadequate backups. Database only, no filestore, never restored.
- Failing to validate accounting. A tiny balance difference found at month-end is expensive.
- Not testing the website and eCommerce. Checkout bugs cost revenue immediately.
- Not testing business-critical workflows. Every company has two or three processes that must work on day one.
- Too little user acceptance testing. The project team's tests are not a replacement for the people who use the system.
- Leaving the server on old Python or PostgreSQL. Self-hosted teams discover this late.
- Forgetting that test databases are not production. Odoo notes that payment providers and delivery carriers are reset to test mode in a test upgrade. After the real upgrade, confirm they are in the right mode.
Odoo 20 Migration for Different Hosting Environments
Odoo Online
Odoo manages the infrastructure, so Python and PostgreSQL requirements are not yours to handle. You request the upgrade from your database manager, test first, then upgrade production. Odoo Online does not allow custom Python modules or non-standard apps, so code compatibility is not the issue it is elsewhere; the testing focus is on data, Studio customisations and integrations. External API access depends on your plan.
Odoo.sh
Odoo.sh is integrated with the upgrade platform. You use the Upgrade tab to run a test upgrade on a staging branch, then upgrade the production branch. Test upgrades run against the latest daily production backup, so manual backups do not apply to them. Custom modules live in your repository, so the code work happens in your branches and the upgraded database is restored with your modules updated on top.
Odoo On-Premise
You control everything, so you own more of the checklist: server operating system, Python 3.12 or later, PostgreSQL 16 or later, dependencies, backup of both database and filestore, and the cutover. For Enterprise databases you send a dump to the upgrade platform for the test and production runs, then deploy the returned database on your Odoo 20 code and update your custom modules. Plan the PostgreSQL upgrade as its own task.
Odoo 19 to 20 Migration for Community vs Enterprise
The version is the same and the migration logic is the same: audit, test, fix, validate. The difference is tooling and support.
- Enterprise. Odoo's upgrade platform and support channels are part of the subscription, including help for issues found during test and production upgrades.
- Community. There is no official upgrade service in the same sense. Teams commonly use community-maintained migration scripts such as OCA OpenUpgrade, which are run against a restored copy of the database. Availability for a new release can lag, so check before you plan a date.
Community users are not at a disadvantage in outcome, but they carry more of the technical work and more of the verification, which makes the testing steps even more important.
Post-Migration Odoo 20 Checklist
|
Area |
What to validate |
|---|---|
|
Data |
Record counts and key fields for partners, products, users, companies |
|
Accounting |
Trial balance, aged receivables and payables, tax reports, bank reconciliation, lock dates, fiscal localisation |
|
Inventory |
Stock valuation, on-hand quantities, lots and serial numbers, open transfers, routes, reordering rules |
|
CRM |
Pipelines, stages, lead assignment, activities, forecasts |
|
Sales |
Quotations, pricing rules, order confirmation, invoicing policy, subscriptions |
|
Purchase |
RFQs, approvals, vendor bills, three-way matching |
|
HR |
Employee records, contracts, leaves, attendance, payroll rules and payslips |
|
Manufacturing |
BoMs, work orders, planning, consumption, costing |
|
Website / eCommerce |
Product pages, cart, checkout, pricing, SEO URLs, redirects, forms |
|
Integrations |
Every connector working in production mode with correct credentials |
|
APIs |
No calls to removed endpoints; deprecation warnings reviewed |
|
Scheduled actions |
Active, running on time, no errors in logs |
|
Automated actions |
Triggering correctly; no duplicate emails or unintended writes |
|
Reports |
Invoices, delivery slips, labels, custom exports compared with Odoo 19 |
|
|
Outgoing and incoming servers, templates, aliases, SPF/DKIM |
|
Payment gateways |
Production mode, webhooks, a live low-value transaction |
|
Shipping |
Carrier credentials, label generation, tracking |
Frequently Asked Questions About Odoo 19 to Odoo 20 Migration
Can I upgrade directly from Odoo 19 to Odoo 20?
Yes. Odoo 19 to 20 is a single major-version step, and Odoo allows upgrades to any supported version. Direct does not mean automatic, though. A database with custom modules cannot be upgraded until those modules match the target version, so the realistic path is a test upgrade, fixes, retesting, and then production.
How do I migrate from Odoo 19 to Odoo 20?
Audit your environment, check custom modules, third-party apps and integrations, back up the database and filestore, then request a test upgrade of a copy. Fix issues, run functional, integration and user acceptance testing, schedule a maintenance window, upgrade production, and validate the result. The exact mechanism differs for Odoo Online, Odoo.sh and on-premise.
What happens to my Odoo 19 data after upgrading?
Standard data is converted by Odoo's upgrade scripts and carried into the new version. Custom data depends on your modules: it moves cleanly if your module's upgrade scripts handle structural changes, and may be lost or broken if not. The upgrade cannot be reverted in place, so your pre-upgrade backup is the safety net.
Will my custom Odoo modules work on Odoo 20?
Not automatically. Odoo's documentation says a database with custom modules cannot be upgraded until their source code matches the target version, and that compatibility is the maintainer's responsibility. Many modules need only small changes. Modules with heavy view, JavaScript or report customisation usually need more. Test each module on a clean Odoo 20 database first.
Do third-party Odoo apps need to be updated?
Yes. Every third-party app must have a version built for Odoo 20 before your database can be upgraded with it installed. Check each vendor's release status, support statement and upgrade path. If no version is coming, you can replace the app, commission an update, or retire the feature.
Does Odoo 20 remove XML-RPC?
Not entirely. According to Odoo's documentation, the db service of the legacy RPC API was removed in Odoo 20, while the common and object services are deprecated and scheduled for removal in Odoo 22 (fall 2028) and Online 21.1 (winter 2027). Existing record-level integrations should still run on Odoo 20, but the JSON-2 API is the recommended replacement.
What PostgreSQL version does Odoo 20 require?
Odoo 20 requires PostgreSQL 16 or later. The minimum was PostgreSQL 13 in Odoo 19. Odoo 20 also requires Python 3.12 or later, up from 3.10. Self-hosted users should plan the server and operating-system updates before the migration. Odoo Online and Odoo.sh infrastructure is managed by Odoo.
How long does Odoo 19 to Odoo 20 migration take?
It depends on database size, custom modules, integrations, third-party apps, testing depth and downtime tolerance. A simple database may be upgraded quickly, while a customised, integrated one takes weeks of preparation and testing. Your test upgrade is the best indicator of production duration, so time it on a full copy.
How much does Odoo 19 to Odoo 20 migration cost?
There is no fixed price. Cost follows the number of custom modules, third-party apps, integrations, the data volume, hosting type, testing depth, cutover constraints and training. A standard database with no custom code costs far less than a customised, self-hosted system. A migration assessment gives a scoped estimate based on your environment.
Can I test Odoo 20 before upgrading production?
Yes, and you should. Odoo's process is built around a test upgrade of a copy of your database, available for Odoo Online, Odoo.sh and on-premise. Test databases are separate from production, and payment providers and carriers are reset to test mode. Use it to find problems, then repeat before the final cutover.
Can Odoo Online databases be upgraded to Odoo 20?
Yes. Odoo Online lists Odoo 20.0 as a supported version. You request a test upgrade from your database manager, test it, then upgrade production. Odoo Online doesn't allow custom Python modules or non-standard apps, so the focus is on data, Studio customisations and integrations. Check that your plan allows external API access if you use it.
Should I hire an Odoo migration partner?
If your database is standard and hosted on Odoo Online, you can often manage it yourself. A partner pays off when you have custom modules, third-party apps, integrations, self-hosted infrastructure, accounting-sensitive operations or little internal Odoo expertise. A migration partner brings a tested process, developers, and testing discipline.
Conclusion: Planning Your Odoo 20 Migration
The decision process is straightforward. First, check whether you have a reason to move now: Odoo 19 is supported until September 2028 (planned), so the pressure is moderate. Second, establish readiness: infrastructure on Python 3.12 and PostgreSQL 16 for self-hosted systems, vendor support for every third-party app, a plan for custom modules, and an API inventory that shows what depends on the removed db service. Third, treat testing as the project, not an afterthought: a test upgrade, repeated fixes, user acceptance and a rehearsed cutover.
Companies with standard databases may finish an Odoo 20 migration with little drama. Companies with custom code and integrations should assess first and commit to a date second. Either way, the order is the same: audit, test, fix, validate, then cut over.
Ready to plan your Odoo 20 migration? Talk to Odiware's migration team
Get a free 30-minute review with an Odiware Odoo consultant — bring your current setup and we'll map the fastest route to a working configuration.