Odoo 18 to 19 upgrade: when to move and which path is supported
Plan to move your Odoo 18.0 database to 19.0 before standard support for 18.0 ends in September 2027. Odoo 19.0 was released in September 2025, and its standard support runs until September 2028, so a move completed in the coming year gives you a full support window on the new version. The route you can use depends on two things: your edition (Enterprise or Community) and where the database is hosted (Odoo Online, Odoo.sh or on-premise). Confirm both before you set a date, because they decide which upgrade service you can use and what staying on 18.0 longer would mean for security coverage.
For Enterprise databases, the supported route is Odoo's upgrade service. It moves a database to a newer supported version by building an upgraded test database, which you test before anything changes in production. On-premise use of that service requires an Enterprise subscription, so confirm that your subscription code is active on the instance. Community users have no access to the upgrade service. If you run Community, you need a different route, covered on the Community upgrade page, and you should choose it early because it changes your effort and testing plan. Only the Custom plan can be hosted on Odoo.sh or on-premise, so check that your Odoo.sh or on-premise contract is on that plan.
Hosting type also sets the clock. On Odoo Online and Odoo.sh, major version upgrades are mandatory every two years, so a database that stays on 18.0 will be moved eventually, whether or not the support date has passed. Confirm in Odoo's upgrade documentation when your instance is due and whether an upgrade window is already scheduled for you. Odoo SaaS versions are released every two to three months and cannot use extended support, so Online databases must keep pace with the release cycle, and extended support is not an option for them.
On-premise databases carry the most decision risk. Standard support covers the first three years after a major release and includes security updates and bug fixes. Security patches are only provided during standard support, so after September 2027 an on-premise 18.0 database would depend on paid extended support, which Odoo limits to select versions. Ask Odoo whether 18.0 would be covered and what that coverage would cost before you decide to stay. Then plan the work: request an upgraded test database, run your custom modules against it, and set a cutover date that leaves room for one full rehearsal before production.
What changes between 18.0 and 19.0 and what each change asks of you
This table lists the four changes most likely to affect a move from Odoo 18.0 to 19.0, with the impact of each on your data, integrations and custom code and the action it requires. Read each row as a question to answer for your own database, invoices and integrations. This page does not list every change, so confirm each item against the 19.0 release notes before you plan the work.
| Change | Impact | Action needed |
|---|---|---|
| PostgreSQL minimum version | The database server may be below the minimum that 19.0 requires, so it may need an upgrade before the application upgrade. | Confirm the exact minimum in the 19.0 release notes and installation docs before sizing the server. |
| Fiscal position tax mapping | Invoices, pricelists and tax-dependent reports may calculate or display taxes differently after the upgrade. | Rerun the tax mapping tests on sample invoices and compare the results with the 18.0 database. |
| External API moves to JSON-2 | Integrations that call the external API may need changed endpoints or payloads, or may stop working until updated. | Inventory every caller, then confirm your subscription plan includes external API access before cutover. |
| Module API changes | Custom modules written for 18.0 may fail to load or behave differently in 19.0. | Run the module porting checklist on every custom module and test each one on an upgraded test database. |
Why the 18.0 support deadline sets the upgrade window
The 18.0 deadline is the first date to write into the upgrade plan. Odoo 18.0 was released in October 2024, and its standard support runs until September 2027. Standard support covers the first three years after a major release, including security updates and bug fixes. Security patches are only provided during standard support, so an 18.0 database that is not covered by another support path will stop receiving them after that date. Work backward from September 2027 through the test database, the rehearsal and the production cutover, and confirm the date your change calendar must respect.
Extended support is not a safe fallback unless Odoo confirms it in writing. Paid extended support is limited to Odoo.sh for select versions and to on-premise deployments. Whether 18.0 is listed for your hosting type is a question for Odoo, and the answer should be in your file before you plan around it. Do not assume an extension that is not on the published list. Odoo Online databases cannot use extended support at all. Odoo.sh and Odoo Online also require major version upgrades every two years, so the 18.0 window is not the only upgrade your team will face on those platforms.
Hosting type changes how much time you have. Odoo SaaS versions are released every two to three months, and Odoo Online cannot use extended support, so an Online database follows a faster release cycle than a self-managed one. Check which plan and hosting type each database runs on. On the pricing page, only the Custom plan can be hosted on Odoo.sh or on-premise, and only Custom includes multi-company, Odoo Studio, external API access and custom modules. If a database uses custom modules or the external API, it is almost certainly on a hosting type that depends on the support rules above, so confirm that before setting the date.
The choice is between moving to 19.0 now and jumping to 20.0. Odoo 19.0 was released in September 2025, and its standard support runs until September 2028. Odoo 20.0 was released in September 2026, with standard support planned until September 2029. Jumping to 20.0 gives a longer standard support window but adds the 20.0 changes to the project, and it depends on whether your team can test that version in time. Compare the two paths using the trade-offs on the Odoo 19 to 20 upgrade page, and decide before the module porting and test database requests begin, because that decision changes the scope of both.
How to prepare the 18 database before the upgrade is run
These four steps set the baseline for the upgrade: the right edition and plan, a known list of customizations, verified backups and a test copy that cannot reach live systems. The upgrade service moves the database through an upgraded test database, which must be tested before production is changed, so the work done here determines how much that testing can prove.
Confirm edition and plan
Confirm that the database runs on Enterprise, because the upgrade service on-premise requires an Enterprise subscription and the Community edition has no access to it. Then check the plan against how the instance is hosted and used. Only the Custom plan can be hosted on Odoo.sh or on-premise, and only Custom includes multi-company, Odoo Studio, external API access and custom modules. If any of these are in use, confirm in writing that the subscription covers them before you schedule the upgrade.
Inventory customizations and owners
List every custom module, Studio customization, server action, external API integration and manual database change in the 18 instance, and name an owner for each. Record where each module came from, the version it was built against and whether the business still uses it. Owners decide whether each item is ported, replaced or retired, so an item without an owner usually stalls the test cycle. Ask your internal developers or implementation partner to flag which items need code changes for 19.
Take and verify full backups
Take a full database dump and a complete copy of the filestore, the directory where Odoo keeps attachments and other binary files, and store both outside the production server. Verify that the dump restores into a separate PostgreSQL instance and that the filestore matches it, because records that reference missing attachments will fail during testing. Keep the backup until the upgraded production database has run stably for a period the business agrees in advance. Document the restore steps before the upgrade window opens.
Create a neutralized test copy
Use Odoo's database duplication feature to create a test copy, then neutralize it so the test environment does not send email or call live payment or integration endpoints. Check outgoing mail servers, scheduled actions, payment providers, marketplace and shipping connectors, and webhook URLs in the copy. Confirm neutralization before anyone signs in, and make sure the copy cannot be reached by customers, suppliers or partners. Use this copy for every test pass so that results reflect the same data set.
The upgrade sequence from a neutralized copy to cutover
This sequence takes a neutralized copy of your Odoo 18 database through an upgraded test database, module and integration checks, and a timed rehearsal before production cutover. Each step closes with a check that must pass before the next step starts. The original 18 database stays in place as the rollback point until the business signs off.
Freeze scope and sign off module list
Agree the upgrade scope with the business owner of each Odoo app in use, then sign off one module list covering standard apps, Enterprise apps, Community modules and every custom module. Name an owner for each module and record whether it will be ported, replaced or retired. Freeze configuration changes that are not part of the upgrade, so the test and production databases can be compared on equal terms. Done when the signed list and the change freeze are recorded in the project file.
Request the upgraded test database
Create a neutralized copy of the Odoo 18 database, verify its backup, and submit it through the Odoo upgrade service. On-premise databases need an Enterprise subscription, and Community databases have no access to the service, so confirm subscription status before this step starts. Confirm the request steps with Odoo and your subscription contact, because they depend on your hosting type. Gate: the upgraded test database is returned and opens on a Odoo 19 instance without errors in the log.
Port custom modules in a development branch
Install the custom modules from the signed list on an Odoo 19 development instance built from the upgraded test database. Developers work in a version-controlled branch, change deprecated calls and adjust views and data files that the new release changed. Check each changed call against Odoo's 19 release notes and developer documentation and against your own code. Gate: every module on the list installs cleanly, and its automated tests pass on the 19 instance.
Compare key documents against the 18 source
Run the upgraded test database and compare a defined sample of invoices, stock moves and payroll outputs with the same documents in the Odoo 18 source. Finance, warehouse and payroll owners each check their own documents, covering totals, tax lines, fiscal position mapping, stock valuation and payslip amounts. Record every difference and its cause. Gate: each owner signs off the comparison for their area, and every unexplained difference is resolved before the next step.
Test integrations including the JSON-2 move
List every integration that reads or writes Odoo data, including banks, payment providers, shipping, identity sign-in and any system that calls the external API. Identify which integrations depend on the legacy external API and plan their move to the JSON-2 external API for Odoo 19. Test each integration against the neutralized upgraded database, using sandbox endpoints where the provider offers them so no live payments or messages are sent. Gate: each integration passes its scripted test, and failures are logged with an owner.
Rehearse full production cutover on fresh copy
Take a fresh copy of the production Odoo 18 database and filestore, neutralize it, and run the complete cutover in order: upgrade, port the modules, apply the configuration, and run the document and integration checks. Record how long each action takes, including the verification steps. The rehearsal reveals sequencing problems that the earlier test database does not. Gate: the rehearsal finishes end to end, the recorded timings set the production cutover window, and the business owners sign off the results.
Schedule cutover and keep 18 as rollback
Schedule the production cutover using the window from the rehearsal. Before the window opens, stop user writes, take a final verified backup of the Odoo 18 database and filestore, and run the upgrade and checks in the same order as the rehearsal. Keep the original 18 database and filestore untouched as the rollback point until the business signs off on production 19. Odoo 18 standard support ends in September 2027, so set the retirement date for 18 only after sign-off.
How to test the 19 database and roll back if it fails
A test pass should show that the upgraded Odoo 19 database produces the same business results as the 18 database for the processes your organization runs. Scope the pass before anyone starts testing. Accounting reconciliation comes first: bank statement matching, open invoice and payment reconciliation, aged receivables and payables, and period-end reports should be compared line by line against 18 figures taken from the same source data. Tax results need their own check. Rerun a representative set of customer invoices, vendor bills and credit notes under each fiscal position your business uses, and compare the computed tax lines with the 18 results. Where the fiscal position tax mapping differs, record every change and get the tax owner's written sign-off on each one. The second part of the pass covers workflow approvals, scheduled actions, email and document templates, reports, and every external integration call. Approval paths should be walked through with real role holders in the test copy, including the rejection and escalation branches. Confirm which scheduled actions are active on the test database and which should stay disabled. Templates should be rendered and checked for layout, language and merged fields. Integrations need the most care. Payment providers, shipping carriers, banks, identity providers and any custom code calling the external API, including calls that move to the JSON-2 external API, should be tested against sandbox endpoints. Confirm with your partner what the neutralization step disables in the test copy, so no live emails, payments or bank files leave the test environment. Rollback depends on one rule: keep the 18 database and filestore untouched until the 19 cutover has been accepted. Do not run the migration against the only copy of production data. Work from a copy, and keep the original in its current state with its backups verified and restorable. Before cutover, write the go or no-go criteria down. Typical criteria include zero unexplained differences in bank reconciliation and tax reports beyond a tolerance the finance lead has agreed, every approval path completing, every integration returning the expected responses, and named owners signing the test results. Decide who can make the call. A single decision owner, usually the executive sponsor, should hold the authority to proceed or roll back, with the finance lead and the IT lead giving written input. Agree in advance what triggers a rollback decision and how long the team has to reach one. Rolling back after users have posted new transactions on 19 is not a simple restore. Any invoice, payment, stock move or attachment created on 19 would be missing from 18 after a restore, so a reconciliation plan is required before that point arrives. The plan should list how post-cutover transactions are exported from 19, how they are replayed or re-entered into 18, and how the team checks that balances, open items and filestore attachments match afterward. Decide the cutoff point in advance and write it into the runbook. Most teams pick the moment the production 19 database opens for posting, or a short freeze window agreed with the finance lead. Confirm the exact steps and effort with your partner before cutover, because the reconciliation work grows with every hour that users keep posting on 19.
What makes an 18 to 19 upgrade longer or shorter
This table lists the factors that most often move an Odoo 18 to 19 upgrade later or earlier, why each one matters and what to check before a scope is written. Use it to compare your environment with the written scope, because the effort is set by that scope and not by a list price. The main takeaway is that custom code, external API callers and tax setup usually matter more than database size.
| Driver | Why it changes effort | What to check |
|---|---|---|
| Number and depth of custom modules | Each custom module must be ported to 19.0 APIs, views and data files, then retested. Deep overrides of core methods take longer than thin extensions. | Inventory each module, its dependencies, overridden core methods and whether an OCA or app store version exists for 19.0. |
| Integrations calling the external API | Each caller must move to the JSON-2 external API and be tested against the upgraded test database. | List every caller, endpoint, credential and the owner who can test it end to end. |
| Multi-company and localized tax setups | Fiscal position tax mapping changes in 19.0, so multi-company groups with several localizations carry the most mapping review. | Confirm fiscal positions and tax mappings per company, then compare sample invoices before and after the upgrade. |
| Database and filestore size | Size sets how long test copies take to build, neutralize and upgrade, and how long production is locked at cutover. | Measure database and filestore size, time a full test upgrade and agree the cutover window with the business. |
| Number of apps in use | Each installed app adds data, views and automated actions to migrate and test, even when lightly used. | Export the installed app list, mark apps in active use and remove unused ones before the test copy is made. |
| Team test coverage | Without written test cases and named testers, defects surface after go-live. Repeatable automated tests reduce retesting time. | Count documented business processes, assign test owners and note which processes already have automated tests. |
| Starting version and support deadline | Standard support for 18.0 ends in September 2027, and a team still on 17.0 may need an extra step first. | Confirm the target go-live date and the starting version, then decide whether an intermediate upgrade is needed. |
Questions teams ask before upgrading Odoo 18 to 19
What does the Odoo 18 to 19 upgrade cost?
The cost depends on scope, and no fixed price list applies, so a written scope produces the quote. Odoo's pricing page covers subscriptions, but the material this page draws on does not give upgrade service fees, so confirm those with Odoo directly. The cost has several parts: the Enterprise subscription that on-premise use requires, the upgrade service itself, custom module porting, integration rework, and the test and rehearsal cycles. Custom modules and integrations often drive the largest share of effort, because each one must be reviewed against the new version. DeployOpen plans, implements and tests upgrades within fixed scope agreed in writing before work starts. Ask any provider for a line-item quote that separates module porting, integration work, test cycles and cutover support, and state which items are one-time and which recur, such as ongoing support.
How long does an Odoo 18 to 19 upgrade take?
Duration depends on what must be ported and tested, and the upgrade run itself is usually the shortest part. The main drivers are the number and complexity of custom modules, the number of integrations that must be re-verified, the size of the database and filestore the test copy must carry, and how many rehearsals the business needs before cutover. Each rehearsal runs the upgrade on a fresh copy, so every extra rehearsal adds a full test cycle. Odoo's upgrade documentation says the upgraded test database should be tested before production, and that testing sets the calendar. Ask for a schedule that names the rehearsal count, the test window and the cutover freeze. Odoo 18 standard support ends in September 2027, so plan backwards from that date.
What does the upgrade require from our business and IT teams?
The upgrade needs decisions and people from your side as much as technical work. Name business testers for each process that runs on Odoo, such as sales, invoicing, inventory or payroll where used, so they can check results against real work. Provide access to a test copy of production, and handle its data under your own privacy rules. Integration owners must confirm how each connected system should behave on the new version and who will test it. Define sign-off authority in advance, so one person can approve or stop the cutover. Agree who holds the Odoo subscription and administrator credentials. Naming these people before the scope is signed tends to prevent schedule slips caused by approvals that arrive late in testing.
Can our own team upgrade Odoo 18 to 19 without a partner?
Yes, a capable internal team can do it alone if two conditions hold. The team needs Odoo development skills to port custom modules and test them, and the organization needs an Enterprise subscription, because on-premise use of the upgrade service requires one. Odoo's upgrade documentation describes the route: run the upgrade service against a copy, test the upgraded test database, then move to production. Your team also needs time for module review, integration testing and rehearsals alongside its normal work. If one condition is missing, or the team lacks capacity for the test cycles, a partner can take on part of the scope under a written agreement. DeployOpen can plan, implement, customize, test and document the upgrade inside your own infrastructure, or support your team on specific parts.
What changes for an Odoo Community upgrade to version 19?
On Community, the Odoo upgrade service is not available, so the path is different. The upgrade service requires an Enterprise subscription for on-premise use, and the Community edition has no access to it. Community upgrades usually rely on OpenUpgrade, which migrates one major version at a time, combined with module coverage checks, OCA module ports where they exist, and your own test runs. That route demands more effort for custom code and more migration verification from your team. Before choosing it, compare that effort with the cost of an Enterprise subscription, since switching may be the cheaper path for some organizations. Read the Community upgrades with OpenUpgrade page before deciding, and confirm the status of every module you depend on.
Should we skip Odoo 19 and upgrade straight to Odoo 20?
Skipping to Odoo 20 is a separate decision with its own planning, so read the Odoo 19 to 20 upgrade page before you commit. Odoo 20.0 was released in September 2026 with standard support planned until September 2029, while Odoo 19.0 standard support runs until September 2028. A jump changes the scope of module porting, test coverage and rehearsal work, because your team must absorb the changes from two versions at once. Confirm with Odoo whether the upgrade service supports the exact path you want from your current version, and do not assume a jump is available. Teams that stop at 19 will still need a later move to 20 within the support windows, so the choice shapes total effort over time.
How DeployOpen scopes, delivers and supports an Odoo 18 to 19 upgrade
DeployOpen plans the Odoo 18 to 19 upgrade as a fixed-scope engagement in your own infrastructure, with the scope agreed in writing before work starts. Each step runs against an upgraded test database before production is touched, and the handover documents what changed. Ongoing support is available as a retainer once the upgrade is live.
How we scope
- The written scope lists which databases, custom modules and integrations are included in the Odoo 18 to 19 upgrade.
- We confirm the hosting type and edition first, because the upgrade service requires an Enterprise subscription on-premise.
- We check your PostgreSQL version against the 19 requirements in the release notes before any effort is agreed.
How we build
- Custom modules are ported and tested on 19.0, and the fiscal position tax mapping change is reviewed.
- Integrations are reviewed for the JSON-2 external API change and retested against the upgraded test database.
- Test copies are duplicated and neutralized so outbound email and payment traffic is not sent to live parties.
How we hand over
- Each cutover is rehearsed on an upgraded test database, and the production run follows the rehearsed steps.
- The handover documents the ported modules, changed configuration, test results and open items for your team.
- Your team receives runbooks for the upgrade steps, so the next major version follows the same documented path.
How we support
- Ongoing support after the upgrade is available as a retainer, with its terms set in writing.
- Standard support for Odoo 18.0 ends in September 2027, so confirm your target version and go-live window early.
- On Odoo Online or Odoo.sh, major upgrades are mandatory every two years, so plan the next one from day one.

