Odoo insight

Upgrade Odoo 19 to 20 Without Breaking Custom Modules

KR Karthik RajOdoo Technical Consultant, 10+ years 9 min read

An Odoo upgrade can look straightforward until your business-critical custom modules stop working.

Your sales team may depend on a custom quotation approval process. Your warehouse may use additional stock validation rules. Your finance team may rely on a tailored invoice report, or on an integration that transfers data to another application.

These features may work perfectly in your current Odoo version. But when you move to Odoo 20, changes to standard models, fields, methods, views or dependencies can affect how those customisations behave.

The important question is not simply how to upgrade Odoo. It is who is responsible for making your custom modules compatible with Odoo 20.

The answer depends on who developed and maintains the modules, what your maintenance agreement covers, and whether the required source code is available. Understanding these responsibilities before starting the upgrade helps your business avoid delays, unexpected development costs and disruption to daily operations.

Why do custom Odoo modules need attention during an upgrade?

Custom Odoo module compatibility errors surfacing during an Odoo 19 to 20 upgrade
A custom module that works today can break on upgrade when the standard model, view or method it extends has changed.

Custom modules extend Odoo to support business requirements that the standard applications do not fully address. They may introduce new fields, modify existing workflows, add reports, automate operations, or connect Odoo with external systems.

An Odoo version upgrade can introduce changes that affect these extensions:

  • Model changes. A custom module may depend on a field or method that has changed in the new version.
  • View changes. An inherited form or list view may no longer match the updated standard view structure.
  • Business logic changes. A customisation that modifies sales, inventory or accounting operations may need code adjustments.
  • Dependency changes. A module may rely on another custom or third-party module that is not yet compatible.
  • Integration changes. External applications may require updates if the custom integration depends on modified Odoo functionality.

Consider a manufacturer using a custom module to prevent production orders from being confirmed until material availability is checked. If the module depends on a method that changes during the upgrade, the validation process may fail.

The database upgrade alone does not guarantee that this business rule will keep working. The custom code must also be reviewed, adapted and tested.

Does Odoo's standard upgrade service update custom modules?

Checklist a developer works through on custom modules during an Odoo 19 to 20 upgrade
The database upgrade and the custom-code upgrade are two separate pieces of work.

Not necessarily. This is one of the most important distinctions to understand before planning an Odoo 20 upgrade.

Odoo's upgrade service focuses on converting the database and supported applications to the target version. The coverage of custom developments depends on the applicable Enterprise upgrade terms and maintenance arrangements.

According to Odoo's upgrade documentation, the service can cover:

  • Standard Odoo applications.
  • Customisations created using Odoo Studio, subject to the stated subscription conditions.
  • Developments and customisations covered by a maintenance of customisations subscription.

Additional modules developed in-house or by third parties, including Odoo partners, are not automatically covered when they fall outside the applicable maintenance agreement.

So your business should not assume that requesting a database upgrade also includes the redevelopment of every custom module. Before proceeding, confirm which customisations are covered by your subscription or maintenance agreement, which modules were developed separately, who currently maintains the source code, and whether that developer is responsible for Odoo 20 compatibility.

Who is responsible for updating your custom Odoo modules?

Who owns and maintains the custom Odoo code being carried from Odoo 19 to Odoo 20
Responsibility follows whoever maintains the code — not whoever originally wrote it.

Responsibility generally belongs to the party maintaining the custom module, but the exact arrangement depends on your development and maintenance agreement.

Development arrangementWho should handle the update
Developed and maintained by an internal teamYour internal Odoo development team
Developed and maintained by an Odoo partnerThe partner, according to the agreed maintenance scope
Developed by a third party with an active maintenance agreementThe contracted maintenance provider
Developed by a freelancer without ongoing supportYour business must arrange new development support
Developed in-house but no longer maintainedAn available internal or external Odoo developer

Internal development team

If your company has its own Odoo developers, they can review the existing code, identify compatibility issues, update the modules and test them against Odoo 20. Your team should also understand the original business requirements — particularly where custom code supports approval rules, manufacturing operations or accounting processes.

Original Odoo development partner

If an Odoo partner developed and maintains your modules, check whether version upgrades are included in your agreement. Do not rely only on the fact that the partner originally wrote the software: confirm the current maintenance scope, response responsibilities and upgrade deliverables.

Third-party developer or maintenance provider

If another developer maintains the modules, that provider should assess the code and confirm the work required for Odoo 20 compatibility. The agreement should define which modules are included, what testing is expected, and who handles issues discovered after deployment.

The practical rule: the business owns the decision to upgrade and must ensure the work is assigned. The developer or maintenance provider is responsible for the technical work covered by the agreed scope.

What if your original Odoo developer is no longer available?

Reviewing installed custom modules and their source code before an Odoo 19 to 20 upgrade
A new developer can take the work over — provided the source code and dependencies are available.

This is more common than businesses expect. The original developer may have left, the partner may no longer provide support, or the freelancer who built the modules may be unreachable. That does not automatically mean you need to rebuild your entire Odoo system.

Before assigning the upgrade, collect:

  • Custom module source code and repository access.
  • The Odoo version each module was developed for.
  • A list of installed custom and third-party modules.
  • Module dependencies and external libraries.
  • Documentation explaining important custom workflows.
  • Details of external API connections and scheduled jobs.
  • Available test cases and known technical issues.

If the source code is missing, the developer must first investigate how the existing functionality was implemented and determine whether it can be recovered or needs to be recreated.

Avoid starting development with only a list of requested features. The developer needs to understand how the current system works, which business rules must remain unchanged, and which customisations are still required.

When should you hire an Odoo developer for the Odoo 20 upgrade?

Ways of engaging an Odoo developer for the custom module work in an Odoo 19 to 20 upgrade
External help is worth it when the customisations fall outside your maintenance agreement.

You may need an Odoo developer when the upgrade involves custom code that is not covered by your existing maintenance arrangement, or when your internal team does not have the capacity.

Consider development support when:

  • Your database contains custom modules developed outside Odoo Studio.
  • Existing customisations depend on older Odoo models, methods or views.
  • Custom workflows must continue working after the upgrade.
  • Third-party modules have no confirmed Odoo 20-compatible release.
  • Your original developer or implementation partner is unavailable.
  • API integrations, reports or automated actions require code changes.
  • Your team cannot confidently test and resolve compatibility issues.

The right developer should do more than make the module install successfully. They should understand the business process behind the customisation and verify that the expected outcome still works. If you need external technical support, you can hire an Odoo developer to review existing modules, handle compatibility updates and support the upgrade.

What should a developer check before updating custom modules?

Odoo inventory screen showing the standard views and fields a custom module inherits and can break on upgrade
Inherited views are a common break point: the module installs, but a field users rely on is no longer on the screen.

A structured technical assessment identifies the actual work, instead of relying on assumptions about the number of modules or lines of code.

Source code and dependencies

Inspect the module manifest, dependencies, Python files, XML views, security rules and other assets. Identify dependencies that are unavailable or incompatible with the target version. Third-party modules should be checked separately, because their compatibility may depend on the original publisher.

Models, fields and methods

Review inherited models, custom fields, computed fields, constraints and overridden methods. If the new version changes an underlying model or method, the developer must adapt the custom implementation without removing the intended business behaviour.

Views and user interactions

Check inherited form, list and search views. Confirm that users can still reach the fields, buttons, actions and information they need for their daily work.

Security and access rules

Review access control lists, record rules, groups and permissions. A module may install successfully and still block the wrong users from a required operation — or expose information to users who should not see it.

Integrations and automated operations

Test API connections, scheduled actions, automated actions, server actions and data exchange with external systems. A successful module update does not prove that an external integration or background process is working.

How should you verify custom modules before production?

Do not use the live database as the first place to test upgraded custom code.

Odoo recommends requesting an upgraded test database, preparing the custom module source code for the target version, and thoroughly testing that environment before moving to production.

  • Create a test environment. Use an appropriate database copy and preserve the required test data and files.
  • Update the custom module code. Adapt the modules and resolve dependency or installation errors.
  • Install or update the modules. Confirm the updated code loads correctly in the target version.
  • Test business workflows. Run the actual processes that depend on the customisations.
  • Check integrations. Verify API requests, data synchronisation, scheduled jobs and external connections.
  • Review access and reports. Confirm permissions, calculations, generated documents and reporting results.
  • Resolve and retest. Record failures, correct them and repeat the relevant tests.
  • Approve production deployment. Move forward only after business users confirm the critical workflows behave as expected.

For example, if a custom module controls purchase approvals, test the complete process — from purchase request creation through approval to order confirmation. Checking only whether the module installs is not sufficient.

Agree a rollback and recovery plan with your technical team before scheduling the production upgrade.

What should you agree with your Odoo developer before starting?

Agreeing the scope of an Odoo 19 to 20 custom module upgrade with a development partner
A module-by-module scope prevents the argument about who owns a defect found after go-live.

A clear scope prevents misunderstandings about who is responsible for each part of the upgrade. Before development begins, agree on:

  • Module inventory. Which custom and third-party modules are included?
  • Compatibility assessment. What code or dependency issues have been identified?
  • Business requirements. Which existing workflows must remain unchanged?
  • Development scope. Are code updates, integration changes and report adjustments included?
  • Testing responsibilities. Who prepares test cases, and who approves the business result?
  • Deployment plan. Who manages staging, production deployment, backups and recovery?
  • Post-upgrade support. Who handles defects discovered after the new version goes live?

Ask for a module-wise assessment rather than a general statement that all customisations will be upgraded. That gives your business a clearer view of the work, the responsibilities, the risks and the deliverables.

Conclusion

Updating custom Odoo modules for Odoo 20 is not automatically the responsibility of Odoo's standard upgrade service. It depends on the applicable maintenance coverage and on who maintains the custom code.

If your internal team or development partner maintains the modules, confirm they can prepare and test the required updates. If the original developer is unavailable, arrange access to the source code and technical documentation before assigning the work to someone new.

Most importantly, verify your critical business workflows in a test environment before moving to production. A successful database upgrade is only one part of a successful Odoo upgrade — your custom business processes have to work as expected too.

Frequently asked questions

Does Odoo automatically upgrade custom modules to Odoo 20?

No. Automatic upgrade coverage depends on your maintenance agreement. Custom modules developed in-house or by third parties may require manual updates from their respective developers.

Can a new Odoo developer update modules created by another developer?

Yes. A new developer can update existing modules if the source code and dependencies are available. They should first review the code and understand the existing business workflows.

How can I check whether my custom modules are ready for Odoo 20?

Test them in an upgraded staging database. Verify module functionality, dependencies, views, security, reports, integrations and business workflows. Fix any issues and get user approval before production deployment.

Running into this in your own Odoo?

Four questions on a free diagnosis call is usually enough for us to tell you whether it is a configuration change, a development job, or a decision you need to make internally first.