If your company runs Odoo 19 and is considering Odoo 20, start with the workflows that would disrupt operations if they failed. Will balances and stock quantities still reconcile? Will custom modules and integrations still work? This ToDoOps guide shows how to collect evidence before booking the upgrade window. Odoo 20 shipped in September 2026. Odoo lists planned standard support through September 2029 for version 20 and September 2028 for version 19 in its support schedule.
Define the upgrade scope
List the applications, customizations and integrations the business depends on. Give each critical workflow an owner who can verify the outcome. If the wider project includes implementation or development, explore the site calculators for an initial estimate of the options they cover.
What the official upgrade test gives you
Odoo’s upgrade documentation describes testing on a neutralized copy of your database. In that copy, outgoing email, scheduled actions and bank synchronization are disabled, and payment providers and carriers use test environments 1. That protects real partners from accidental messages and transactions. It also limits what the copy can prove: a successful upgrade run shows the data moved, not that your integrations work or that custom code behaves correctly.
Treat three questions separately:
- Standard data: did invoices, credit notes, stock and reports survive the move?
- Customization: does each custom module or Studio change still behave correctly on version 20? Verify this separately.
- Integrations: do connections work against sandbox endpoints, never production?
A worked rehearsal plan
Rehearse on a fresh neutralized copy and time every step. The table uses a hypothetical rehearsal to show how to set a planning window. Your numbers will depend on database size and customization.
| Step | Measured time (example) | Evidence to collect | Decision it supports |
|---|---|---|---|
| Database upgrade | 55 min | Completion log, error list | Is the downtime window realistic? |
| Smoke test | 25 min | Invoice, credit note, stock and report results | Do figures reconcile with the source? |
| Buffer | 20 min | Time held for fixes and re-checks | Is there margin for surprises? |
| Planning window | 100 min | Sum of the three steps | Window to propose to the business |
The 100 minutes is simply 55 + 25 + 20. If your own rehearsal runs longer, plan around your figure, not this example. Also record who ran each step and what changed between attempts; that record reduces surprises on the real night.
What the smoke test should cover
- Invoices and credit notes: totals, taxes, partner balances and open items compared with the pre-upgrade copy. Use representative cases in the protected copy, such as a multi-tax invoice and a partial credit note.
- Stock: on-hand quantities, valuation and one receipt-to-delivery cycle.
- Reports: the management and financial reports your team actually uses, compared line by line.
- Sandbox integrations: each connection tested against test endpoints with test credentials.
Be careful with e-invoicing. A test on a copy does not establish ZATCA compliance and does not show that an integration will succeed in production. Verify those areas separately, with the relevant sandbox and your compliance owner.
Downtime, recovery and the rollback question
Run the rehearsal as a downtime rehearsal: same order of steps, same people, a stopwatch. Do not promise a rollback. Recovery depends on where Odoo runs. Where you or your host manage the infrastructure, a restore only counts if you have actually tested it. On Odoo Online, the documentation states that a successfully upgraded database cannot be reverted to the previous version 1, so do not plan around a generic restore there. Put that effort into the rehearsal and the go/no-go checks instead.
Go/no-go on evidence
Ask the finance and inventory owners to review the results before committing to the date.
- Go: reconciliations match, integration checks pass in sandbox, the rehearsal fits the window, and, where hosting applies, a recovery has been tested.
- No-go: unexplained differences in balances or stock, a failed integration check, or custom code not yet verified.
Record the reason for the decision in a short note signed off by finance and inventory owners. NIST SP 800-53 Rev. 5, control CM-3(2), is a general reference for this discipline: test, validate and document changes with minimal interference to operations 2. Use that reference as a general change-control practice.
Why your apps and industry change the risk
Risk depends on what you run. Review your Odoo apps and industry workflows to decide where to test deepest: a distributor will weight stock and carriers, a services firm invoicing and timesheets. If you want to see the interface first, the guided demo is a tour only and does not replace testing your own data.
Next step
Start with an inventory of customizations and integrations, then run one timed rehearsal. If you want help scoping it, contact ToDoOps. You can also return to the ToDoOps homepage or the calculators for planning context.
References
1. Odoo official documentation: Odoo 20 upgrade documentation, release and support schedule, and Odoo Online upgrade notes.
2. NIST SP 800-53 Rev. 5, control CM-3(2): Testing, Validation, and Documentation of Changes.
