An Odoo upgrade implies not only swapping old software for new but is also a comprehensive task in the case of customized Odoo software. Businesses that are currently working with customized Odoo solutions have to deal with such things as database migration, custom modules migration, Studio customizations, third-party applications, integrations, data validation, regression testing, and user acceptance testing.
With Odoo 20 being released, many businesses are considering the option of upgrading to Odoo 20 and, first and foremost, the cost of this upgrade.
However, there is no standard fee that applies to all cases of Odoo upgrade. An Odoo database that uses mainly standard applications of Odoo software does not need much extra development, whereas a database with lots of customization and several integrations needs much more.
Thus, the best thing to do would be estimating the cost of your Odoo upgrade depending on your current Odoo database.
What Determines the Cost of an Odoo 20 Upgrade?
The cost of upgrading to Odoo 20 typically depends on the following:
- Number of Odoo versions to skip
- Custom lines of code
- Customization of Studio
- Third-party applications
- Database size
- External integrations
- Need for testing and validation
- New functionalities in Odoo 20
- Hosting needs
- Customization that could be replaced with native Odoo functionality
These parameters need to be evaluated before giving a fixed quote.
1. Number of Odoo Versions Skipped
The first important cost element is that of the current version of Odoo compared to Odoo 20.
For example:
| Current Version |
Target Version |
Version Gap |
| Odoo 19 |
Odoo 20 |
1 version |
| Odoo 18 |
Odoo 20 |
2 versions |
| Odoo 17 |
Odoo 20 |
3 versions |
| Odoo 16 |
Odoo 20 |
4 versions |
| Odoo 15 |
Odoo 20 |
5 versions |
An update with one version is much simpler to estimate than a migration with several major versions.
Nevertheless, it doesn't mean that each missed version will increase the total cost of the project by a certain number of hours or days. Everything depends on how many changes occurred in the modules and customizations in the process of the versions' evolution.
For instance, an enterprise going from Odoo 19 to Odoo 20 will need to resolve fewer compatibility issues than an enterprise going from Odoo 16 to Odoo 20.
It is recommended to review custom developments with respect to the newly appeared features and to question current customizations prior to migration. Eliminating custom functionality that performs operations available in Odoo out-of-the-box will help to simplify the process of the upgrade.
Why old versions cost more
The bigger version gap is:
- More changes in the framework
- More deprecated methods and APIs
- More changes in views and XML
- More changes in JS/OWL
- More changes in accounting/business processes
- More third-party modules that need to be replaced
- More migration of data
- More regression testing
The bigger the custom code base is and the more complex it is, the more code has to be tested against Odoo 20.
2. Custom Lines of Code
In customized Odoo systems, custom code can be one of the best predictors of how difficult an upgrade process will be.
- A business might have:
- Custom Python modules
- Custom XML views
- Custom JavaScript/OWL
- Custom reporting
- Custom controllers
- Custom automated actions
- Custom workflows
- Custom security access rules
- Custom server-side logic
The more extensive the custom code base, the more code that has to be tested in the new Odoo 20 system.
Using odoo-bin cloc to Measure Custom Code
Odoo has an in-built cloc utility that calculates the number of relevant lines of code in the Python, JavaScript, CSS, SCSS, and XML languages. The tool can handle additional modules available in the database, as well as specific server actions and manually added computed fields. This method is referred to as being approximate and is useful for maintenance pricing.
An example of such a command is:
./odoo-bin cloc -c odoo.conf -d my_database
This gives an objective basis to estimate the extent of custom development.
However, lines of code should not be the ultimate cost measure.
Two projects might have 20,000 lines of code each and yet have completely different levels of migration complexity.
For instance:
- 20,000 lines of basic views and reports could be easy enough to migrate.
- While 20,000 lines of code with complex accounting logic, Point of Sale customizations, JavaScript, and data migration could be more difficult to move over.
Thus, CLOC should be supplemented with a technical review.
3. Studio Customizations
The Odoo Studio application enables companies to modify their applications without building custom modules.
The Studio can be used to:
- Custom fields
- Forms modifications
- Lists and Kanban views
- Automations
- Custom reports
- Approvals
- Custom models
- Business rules
The Studio customizations need to be considered during the upgrade assessment regardless of whether or not the company maintains custom modules.
For Odoo Enterprise users, the upgrade service provided by Odoo takes into account the Studio customizations only if the Studio continues to be installed and the corresponding subscription is active.
This will allow us to avoid the manual work of porting custom modules.
Still, the company will need to test its Studio customizations post-upgrade. The upgrade is not the same as the redesign of processes.
4. Third-Party Apps and Custom Modules
The use of third-party modules will definitely affect the upgrading cost of Odoo to version 20.
These consist of:
- Modules available at the Odoo Apps Store
- Modules created by partners
- Community modules
- In-house created custom modules
- Special modules
Each module should be checked whether it is compatible with Odoo 20.
In case a third-party module has its Odoo 20 version, then there will be little work to do. The abandoned module will have to be either substituted or newly created.
Odoo's upgrading guidelines specify that extra modules created in-house or by third parties will not be part of the regular enterprise upgrade SLA unless the appropriate maintenance coverage applies.
5. Data Volume
Data volume in the database may have an impact on migration as well as the testing process.
Key data volume factors are:
- Customer and vendor count
- Product count
- Sales orders
- Purchase orders
- Invoices and bills/li
- Accounting entries
- Inventory moves
- Manufacturing data
- POS orders
- Attachments
- Documents
- Website data
- Historical data
Upgrading a smaller database with several thousand transactions is quite a different task compared to migrating a database storing several years of accounting, inventory, manufacturing, and POS history.
At the same time, data volume does not automatically equal the necessity of manual migration of each record.
Guidance on Customized Database Migration in Odoo makes special emphasis on migration scripts for situations where technical data such as models, fields, or external ID changes occur during a custom module upgrade.
6. External Integrations
Integration is yet another important expense factor.
The Odoo database can be integrated with:
- Payment gateways
- Logistics companies
- Marketplaces
- E-commerce platforms
- CRM tools
- Banking software
- Payroll software
- Tax software
- Manufacturing software
- Warehousing software
- REST APIs
- Webhooks
- Mobile apps
An integration that functioned in a previous Odoo version will need modifications due to:
- API modifications
- Authentication modifications
- Model modifications
- Field modifications
- Controller modifications
- JavaScript modifications
- Third-party API modifications
For this reason, all integrations must be specified individually in the estimate.
A project with five basic integrations cannot be estimated at the same price as a project with five highly customized two-way integrations.
7. Testing Effort
Testing is frequently overlooked in computing the cost of upgrading Odoo.
A successful technical migration is not always an indication that the migrated system is now good for production.
Testing could involve:
Functional testing
Testing of business flows like:
- Quote generation
- Quote to Sales order
- Procurement to Receipt
- Invoicing
- Posting payment
- Inventory Moves
- Production
- Point-of-Sales
- Returns
- Payroll
- Expenses
Technical testing
This could include:
- Installation of custom modules
- View validation
- Access rights
- Automation rules
- Scheduled actions
- Reports
- JavaScript
- API Integration
- Performance Testing
Regression Testing
Old business flows have to be tested once more, as any change to the core structure of Odoo could impact custom business flows.
User Acceptance testing
Business users have to check that the migrated system works before production deployment.
Odoo suggests a test process involving asking for a test database, upgrading custom modules if needed, and testing the upgraded database thoroughly before proceeding to a production upgrade.
Odoo Enterprise Upgrade Service vs. Custom Code Porting
One of the first things to understand when getting an Odoo 20 upgrade estimate is the difference between the database upgrade service and custom development migration.
If the organization is an Odoo Enterprise customer, then Odoo offers an upgrade service for supported databases. Based on current Odoo documentation, the service will include technical migration and adaptation of standard applications and data, as well as Studio customization under the mentioned conditions and customizations under a maintenance-of-customizations subscription.
Having an Enterprise subscription doesn't always mean that custom development tasks are free of charge.
Typically included
- Depending on subscription and applicable SLA:
- Standard Odoo applications
- Standard database migration
- Studio customizations where eligible
- Customizations under maintenance subscription
- Not typically included but may require additional effort
- In-house developed modules
- Unsupported third party modules
- Custom JavaScript/OWL development
- Custom integrations
- Data cleanup
- New developments
- Functional re-design
- Intense custom testing
- Training
Odoo specifically states that data cleanup, migration of additional modules that are not included in a maintenance contract and training are not included in the regular upgrade SLA.
Thus, the upgrade quote should be divided into:
Odoo Upgrade Service and Custom Code Migration and Implementation Services
It will clarify the estimate for the customer greatly.
A Practical Odoo 20 Upgrade Estimation Model
A useful estimation model can divide the project into several workstreams:
| Workstream |
Typical Assessment |
| Version upgrade |
Current version > Odoo 20 |
| Standard database upgrade |
Odoo upgrade service |
| Custom modules |
Based on CLOC and complexity |
| Studio |
Number and complexity of customizations |
| Third-party apps |
Compatibility and availability |
| Data migration |
Volume and custom data |
| Integrations |
Number and complexity |
| Testing |
Functional + technical + regression |
| Deployment |
Staging, rehearsal and production |
| UAT |
Business-user validation |
| Documentation/training |
Based on project requirements |
A simplified formula for calculation can be stated as:
Total Upgrade Cost = Core Upgrade Evaluation + Custom Code Conversion + Third Party Application Migration + Integration Cost + Data Cost + Testing + Deployment
And the exact amount can then be calculated by multiplying the rate decided.
Example Odoo 20 Upgrade Effort Bands
These bands are only exemplary ranges of estimates, not Odoo pricing. The actual effort should be determined after a review of the database, custom modules, CLOC numbers, integrations, and testing.
| Upgrade Type |
Typical Environment |
Indicative Effort |
| Basic |
Mostly standard Odoo, minimal customization |
10–20 working days |
| Small Custom |
Limited custom modules and Studio changes |
20–40 working days |
| Medium Custom |
Several custom modules, reports and integrations |
40–80 working days |
| Complex |
Large custom codebase, multiple integrations and significant data |
80–150 working days |
| Enterprise / Highly Customized |
Extensive custom modules, complex integrations, large database and intensive testing |
150+ working days |
These figures should not be viewed as an absolute pricing schedule.
For instance, while a 60,000 line of code base with basic functionality might need less resources compared to a 30,000 line of code with complex features like accounting, point of sale system, inventory management, and customization of JavaScript.
The most accurate calculation can only come through the assessment of both technical and functional aspects rather than CLOC alone.
Example: Estimating a Medium-Sized Odoo 20 Upgrade
Take the case of an organization using Odoo 17 now and intending to upgrade to Odoo 20.
If the situation includes:
- 3 version upgrades to go through
- 25,000 lines of custom code
- 15 Studio customization entries
- 8 third-party modules
- 4 integrations with other systems
- Years of accounting and sales records
- Extensive POS and inventory processes
- Necessity of complete regression testing
A plan for planning may be as follows:
| Activity |
Example Effort |
| Technical assessment |
5 days |
| Custom module migration |
35 days |
| Studio/customization validation |
5 days |
| Third-party module migration |
15 days |
| Integration updates |
15 days |
| Data migration/validation |
10 days |
| Functional and regression testing |
20 days |
| UAT support and bug fixing |
10 days |
| Production deployment and stabilization |
5 days |
| Total |
120 days |
This is just for demonstration purposes.
The amount of effort involved could either increase or decrease based on the complexity of the custom program and the integration of the third-party software applications.
How to Reduce the Cost of an Odoo 20 Upgrade
Among the most efficient ways of reducing the cost of migration is avoiding migrating all customizations.
It is better to look at each customization and ask oneself:
Is this functionality already available in Odoo 20?
The software comes with new features in every major update. There can be many customizations that are now unnecessary because of that.
For instance, an organization might have created its own custom workflow related to:
- Approval
- Purchasing rules
- Sales automation
- Inventory management
- Reporting
- Activity management
- Security
- Document management
- Notification
If the same functionality can now be obtained using standard configuration, then it will not make sense to migrate the customization.
Odoo developers recommend checking the current developments against the newer standard functionality and eliminating redundant customizations during migration.
Why Replacing Customizations Can Be Cheaper
Let's take the example where there is 2,000 lines of customized code.
If the same requirement could now be done through Odoo standard configuration, migration of 2,000 lines of code would result in extra expenses for no reason.
Instead of the process:
Analyze > Rewrite > Fix > Test > Maintain,
The company may go for the following path:
Configure > Test > Train.
It is not only related to the current Odoo 20 migration but will also give the opportunity to simplify the further upgrade process as well.
What Should Be Included in an Odoo 20 Upgrade Quote?
The quotation for a professional upgrade needs to have a clear scope.
At least, it needs to have the following information listed:
1. Versions of source and target
For example,
Odoo 17 > Odoo 20
2. Scope of database
The number of:
- databases;
- companies;
- applications used;
- approximate size of data.
3. Custom code
- The number of:
- custom modules;
- odoo-bin cloc;
- languages used;
- complexity level.
4. Studio customization
The number of:
- Studio customizations;
- automated actions;
- custom fields;
- custom views;
- reports.
5. Third party modules
Identify all third party modules and their Odoo 20 availability.
6. Integration
Identify:
- API integration
- Payment gateway
- Shipping service
- Marketplaces
- Third party applications
7. Testing
Define:
- Functional testing
- Regression testing
- Integration testing
- UAT
- Performance testing if necessary
8. Deployment
List:
- Development environment
- Staging environment
- Rehearse upgrade
- Production deployment
- Post go-live support
This will avoid any unwanted actions from becoming a cost later on in the process.
Final Checklist Before Requesting an Odoo 20 Upgrade Estimate
Before approaching an Odoo partner or development team, prepare the following:
- Current Odoo version
- Target version: Odoo 20
- Hosting type: Odoo Online, Odoo.sh, or On-Premise
- List of installed applications
- List of custom modules
- odoo-bin cloc result
- List of Studio customizations
- List of third-party applications
- List of external integrations
- Approximate database size
- Number of companies
- Number of users
- Key business workflows
- Required reports
- Required testing scenarios
- Required downtime window
- Data-cleaning requirements
- Training requirements
The more complete this information is, the more accurate the upgrade estimate will be.
The price for an Odoo 20 upgrade is not supposed to depend on how many versions you plan to jump during the upgrade. It will depend on the complexity of your current Odoo environment.
If the company uses mainly stock Odoo features, the upgrade will go smoothly, but heavily customized environments will need much more development and testing.
For counting the custom code you can use odoo-bin cloc, however, the full technical analysis has to take into account Studio customizations, third-party modules, data amount, and testing. The official Odoo upgrade procedure also includes two parts – upgrading the standard database and adaptation of unsupported custom modules.
The best way to manage the price is to analyze customizations prior to their migration. If Odoo 20 already offers a stock solution for the feature you previously customized, it can save you money not only for the current, but also for the future Odoo upgrades.
To read more about How to Plan Your Odoo 20 Migration from Odoo 16, 17, 18, or 19, refer to our blog, How to Plan Your Odoo 20 Migration from Odoo 16, 17, 18, or 19.