Odoo Migration
Still on Odoo 12 or 13? What Staying Actually Costs
Nothing breaks on the day a version leaves support, which is exactly what makes staying on Odoo 12 or 13 feel free. The bill arrives in pieces instead, spread across security exposure, an integration that stops working, a developer you cannot find, and an upgrade quote that has grown every year you waited.
Part of our guide to Odoo Migration
Nothing breaks on the day support ends
Odoo supports each major version for three years. Odoo 12 arrived in October 2018 and left that window in 2021. Odoo 13 arrived a year later and left in 2022. By 2026 both are several years past the point where anyone at Odoo is fixing anything in them.
The system does not notice. It boots, invoices go out, the warehouse picks. This is the single reason so many businesses are still running them, and it is a reasonable response to what they can observe.
What they cannot observe is that the cost has moved off the invoice and onto the balance sheet as risk.
Where the money actually goes
Security you cannot patch
Once a version is out of standard support it receives no security fixes. Vulnerabilities found after that date are disclosed publicly and fixed in current releases, which is exactly the information an attacker needs about your version.
For most businesses this stays theoretical until an audit, a cyber insurance renewal or a customer security questionnaire makes it concrete. Then it becomes urgent, and urgent upgrades are the expensive kind.
A shrinking pool of people
Odoo 12 is a different codebase to work in. The attrs attribute that drove conditional visibility in views has since been removed in favour of direct invisible expressions. The JavaScript layer was rewritten around the OWL component framework. Field names on core models have moved between versions.
A developer who started with Odoo in 2023 has never seen most of this. They can learn it, and you will pay for that learning, on a codebase that has no future. Meanwhile the people who genuinely know Odoo 12 have mostly moved on to work that does.
Integrations age out from the other side
Your ERP is one end of every integration. The other end keeps moving.
Payment providers retire API versions on their own schedule. Banks change statement formats. Shipping carriers deprecate endpoints. When that happens, the fix has to be written against a framework that no longer receives updates, by someone who is comfortable in it, and tested on a version nobody else is running. Every one of those constraints adds cost.
We cover the general shape of this in integration architecture, and it is materially worse when one side is frozen.
The upgrade bill compounds
This is the cost that grows while you wait, and the reason "we will do it next year" is rarely the cheaper choice.
The database conversion is not the problem. Odoo's upgrade service handles standard data in standard models, and the process steps through intervening versions rather than jumping, as we explain in the upgrade path.
The problem is everything you added. Custom modules have to be reviewed and re-tested against every framework change between your version and the target. That work does not scale with the size of the jump in a straight line, because the interactions multiply. Two versions behind is a project with a known shape. Six versions behind is a project where the first phase is finding out what you have.
What actually breaks in a v12 or v13 upgrade
The pattern is consistent enough to plan around. In rough order of how much time they consume:
- View definitions. The old
attrssyntax for conditional visibility and readonly is gone. Every custom view that used it needs rewriting, and there are usually more than anyone remembers. - JavaScript and widgets. Anything built against the pre-OWL framework is a rewrite, not a port. Custom widgets and client actions are the usual casualties.
- Renamed fields and methods on core models. Invisible inside Odoo, breaking for anything that calls in by name. This is where integrations fail.
- Reports. QWeb templates that reference moved fields render blank rather than erroring, which is why they are found late.
- Modules that no longer need to exist. Six years of Odoo releases have absorbed a lot of what used to require custom work.
That last one is the opportunity hiding in the project. Some of what you paid to build in 2018 is now standard, and porting it forward means paying twice for the same feature. A proper fit-gap review before the port is usually the highest-return hour in the whole upgrade.
The full breakdown is in what actually breaks in an Odoo upgrade, and custom module migration covers the porting work itself.
How to plan it from this far back
Upgrading from six versions behind is a different exercise from a routine annual upgrade. The difference is how much of it is discovery.
1. Inventory what you have. Every custom module, every integration, every report anyone depends on. From this far back the list is always longer than the one people carry in their heads.
2. Decide what deserves to survive. Sort the inventory into keep, replace with standard Odoo, and retire. The retire pile is usually the biggest surprise and the biggest saving.
3. Convert the database and see what happens. A test conversion tells you more in a day than a fortnight of speculation. Nothing is at risk because nothing touches production.
4. Test as real users, not as an administrator. An administrator session cannot see an access rights problem, which is why they are found by staff in week one rather than by the project in week six. Our upgrade testing strategy covers how to structure this.
5. Plan the rollback before the cutover. Not because you expect to use it, but because deciding under pressure produces worse decisions. See rollback planning.
6. Run parallel briefly. Compare the numbers that matter, on real data, before you commit.
Migration validation covers what to compare, and upgrade mistakes covers what tends to go wrong.
The honest version of the advice
If you are on Odoo 12 or 13 and everything works, you do not have an emergency. You have a growing liability with no deadline attached, which is harder to act on than an emergency and more expensive to ignore.
The useful next step is not a quote. It is a test conversion and an inventory, because both are cheap and both replace guesses with facts. Once you know what you have and what survives, the decision between upgrading and reimplementing usually makes itself.
We do this work as a fixed-scope assessment before anyone commits to the larger project, precisely because from this far back nobody, including us, can price the project honestly without it.
FAQ
Questions, answered.
Is Odoo 12 still supported?
No. Odoo gives every major version three years of standard support, and Odoo 12 was released in October 2018, so its window closed in 2021. Odoo 13 followed in October 2019 and left standard support in 2022. As of 2026 the supported releases are Odoo 17, 18 and 19.
Out of standard support means no more security patches, no bug fixes and no helpdesk. The software keeps running. That is the trap: an unsupported Odoo behaves normally right up until the moment a disclosed vulnerability, a Python version change or a payment provider API retirement makes it someone's emergency.
Odoo does sell extended support for older versions, with bug fixes offered subject to feasibility. It buys time. It does not put you back on a maintained release, and it does not stop the upgrade getting more expensive.
Expert tip. Treat the support window as a budget line, not a technical detail. A version bought in year one gives you roughly two comfortable years and one year of planning. Book the upgrade in that third year and it is a project. Leave it to year six and it is a rescue.
What does it actually cost to stay on an old Odoo version?
The licence cost is zero, and every other cost rises. In our experience the bill lands in four places.
- Security. Unpatched vulnerabilities stay unpatched. If you handle card data or personal data, an unsupported ERP is a finding waiting for an auditor.
- People. Odoo 12 predates the current view syntax, the current JavaScript framework and the current ORM conventions. Every year the pool of developers who have worked in that codebase shrinks, and the ones who have charge more to go back to it.
- Integrations. Your ERP is not the only system upgrading. Payment providers retire API versions, banks change statement formats, and the connector that bridges them was written for a framework nobody maintains.
- The upgrade itself. This is the compounding one. Custom code has to be re-tested against every framework change between your version and the target, and that list only grows.
Expert tip. Price the do-nothing option properly before comparing it to a quote. Most businesses compare an upgrade against zero, when the honest comparison is an upgrade against a larger upgrade later plus the risk carried in between.
Can I upgrade directly from Odoo 12 to Odoo 19?
Yes, in the sense that you will end on Odoo 19 and you do not run seven separate projects to get there. Odoo's upgrade service converts the database through the intervening versions rather than in one leap, so the sequence happens whether or not you watch it.
The database usually survives this well. Standard data in standard models is what the upgrade scripts are written for.
Your custom code is the real project. Every module written for Odoo 12 meets six years of framework change at once: the attrs view syntax was removed, the JavaScript layer was rewritten, field and method names moved. Nothing tells you which of your customisations still make sense, because some of them were working around gaps that Odoo has since filled natively.
Common mistakes
- Budgeting the upgrade and forgetting the re-testing, which is usually the larger half
- Porting every custom module instead of asking which ones standard Odoo now replaces
- Leaving integrations out of the test plan, then discovering them at go-live
- Skipping a parallel run because the database converted cleanly
Is it cheaper to reimplement Odoo instead of upgrading?
Sometimes, and past roughly four versions behind it is a genuine question rather than a rhetorical one.
Upgrading preserves your history and your configuration, including the configuration you regret. Reimplementing gives you a clean, current system and forces you to re-enter or migrate the data you actually need.
A rough guide from projects we have run:
- Two or three versions behind, customisations still earning their keep: upgrade
- Five or more behind, heavy customisation, several modules nobody can explain: price both
- The system was configured for a business you no longer run: reimplement, because you are paying to carry old decisions forward
Expert tip. The deciding question is not the version number, it is whether your customisations still describe how the business works. Upgrading a faithful record of an obsolete process is the most expensive outcome available, because you pay full price to preserve something you will then pay again to change.
Keep reading
More on Odoo Migration.
The full guide, plus the other articles in this cluster.
With CODEerts
Planning an upgrade?
We are certified Odoo partners. We migrate and upgrade Odoo databases, including the custom modules and integrations that decide how long it really takes.
See how we can helpBook a callReady to make Odoo work the way your business does?
Book a free callCODEerts is a team of certified Odoo partners and full-stack engineers. We implement, customise and support Odoo ERP, then build the software around it.