Odoo 16 to Odoo 19 migration: what changes and how we move you
Three releases of change in one upgrade. Odoo’s platform converts the standard database; everything built on top has to clear what 17, 18 and 19 altered. That part is ours.
Moving a live database from Odoo 16.0 to Odoo 19.0 in one pass. Odoo’s upgrade platform performs the technical conversion of the standard modules and data. Making three releases’ worth of custom code run on 19 is the customer’s or partner’s job.
Teams still running Odoo 16.0 in production, especially those carrying custom modules, Studio changes or third-party apps nobody has inventoried.
Brainvire plans a straight version upgrade at 3 to 8 weeks, and a three-version jump sits at the top of that band. These are our own planning figures, not Odoo published ones. With new scope, our implementation bands apply instead.
A technical consultant who ports the modules, a functional consultant who owns the test script, a solution architect on the upgrade posture, and your application owner as counterpart.
/ Three versions behind
Why is the Odoo 16 upgrade still waiting?
Four reasons we hear, and none of them is the upgrade itself.
The window on 16 has already closed
Odoo supports each major version for three years and publishes the dates. Odoo 16 is past the end of its standard support window, and waiting does not pause a clock that was never yours to set.
Three releases of change, in one pass
Everything Odoo altered in 17, 18 and 19 arrives together. Odoo’s own note is that the smaller the version gap, the easier the upgrade should be, which is exactly what keeps this one deferred.
Nobody has listed what sits above the standard
Studio changes, custom modules, third-party apps, things edited in place. Odoo will not upgrade a database with custom modules until a version of them exists for the target release.
Models were merged and removed along the way
Across three releases, standard models and fields were renamed, merged or dropped. Odoo warns that data from a removed standard model may have to be recovered from the old table with an upgrade script.




Trusted by enterprise Odoo teams worldwide












/ Three releases at once
What actually changed between Odoo 16 and Odoo 19?
Each row names the release that made the change and cites Odoo’s own notes for Odoo 17, Odoo 18 or Odoo 19. The third column is our reading.
| Area | What changed | What it means for your upgrade |
|---|---|---|
| Connectors | Odoo 18 removed the eBay Connector, and removed the Alipay, PayU Latam and PayUmoney payment providers | A replacement is chosen and built before cut-over. The row that most often moves a date |
| Fiscal positions | Odoo 19 removed tax mappings from fiscal positions. Each tax now declares where it applies and which taxes it replaces | Tax determination is re-tested first if you run several regimes |
| Units and packagings | Odoo 19 merged product units and product packagings into one model and removed unit of measure categories | Product data is reviewed before the upgrade, not after |
| Bank reconciliation | Odoo 17 removed the manual reconciliation widget; lines reconcile silently unless a write-off entry is needed | The daily bank flow behaves differently. Finance re-tests it first |
| Receipts | Odoo 19 merged purchase and sales receipts with invoices and bills. Sales receipts are switched on in the settings | Filters, reports and automations pointing at the old receipt models are rebuilt |
| Transfers and routes | Odoo 17 dropped the planned versus immediate transfer distinction. Odoo 18 fires push rules when a transfer is validated and redesigned every default multi-step route around that | Warehouse flows are re-tested end to end. The pair most likely to surprise operations |
| Approvals and APIs | Odoo 17 moved approval rules from client-side to server-side enforcement, so they now apply to API calls too | An integration can meet a rule it never saw. Test connectors, not only screens |
| Taxes and lock dates | Odoo 17 put codes in every localization’s tax names and added a Tax Description field. Odoo 18 made standard sales taxes follow a company setting defining them as price-included or price-excluded, and added a lock dates wizard with a Hard Lock date | One decision at company level, then a check that every tax overriding it still behaves as it did. A Hard Lock date cannot be changed once saved |
| Budgets and statements | Odoo 18 rebuilt budget management around analytic budgets, with no dates on budget lines and no budgetary positions, and merged the Follow-up and Customer Statement views into a revamped Partner Ledger. Odoo 19 added an Annual Statements report printing the balance sheet, profit and loss and trial balances together | Budget structure is redesigned, not carried across. Reports finance built by hand are standard now, and cheaper to delete than to port forward |
| Inventory valuation | Odoo 17 set the cost of FIFO products to the average price of the remaining quantities. Odoo 18 gave each lot or serial number of the same product its own separate valuation | Costing behavior moves in 17 and gains an option in 18. Both are verified against your closing figures on a copy |
| Employees, payroll and expenses | Odoo 19 merged employees and contracts and introduced a versioning mechanism, renamed payroll Batches to Pay Runs with a guided interface, and removed expense reports so several expenses are submitted, approved and posted together from the list view | HR customizations, payroll integrations and expense approval flows reading the old models need the closest look on this list |
| Views, reports and spreadsheets | Odoo 17 shipped a redesigned user interface and technically overhauled the accounting reports. Odoo 18 renamed ODOO.PIVOT formulas to PIVOT and removed the Link to Odoo menu option in spreadsheets. Odoo 19 lets Studio open from any view | View and report code written for 16 is the most common source of tracebacks, and some of it can retire into Studio |
/ Responsibilities
Who does what in an Odoo 16 to 19 upgrade?
The boundaries are published, not negotiable. Both are stated in Odoo’s upgrade documentation and its guide to upgrading a customized database.
Odoo converts the standard database
Odoo’s upgrade platform performs the technical conversion of standard modules and data to the target version. Its Enterprise agreement covers standard applications, Studio customizations while Studio stays installed and subscribed, and developments under a maintenance of customizations subscription. Brainvire does not perform Odoo’s upgrade step.
Your custom modules are our job
That same agreement expressly excludes “the upgrade of additional modules not covered by a maintenance contract that are created in-house or by third parties, including Odoo partners.” So we do it, against three releases of change rather than one: each module made installable on an empty Odoo 19 database first, then on the upgraded copy.
Three things no upgrade includes
Odoo lists what its upgrade service does not cover: cleaning pre-existing data and configurations while upgrading, upgrading additional modules without a maintenance contract, and training people on the upgraded version’s features. Skipping two versions makes that last one bigger: your team meets three releases of interface change at once.
Testing is shared, and it is the point
Odoo is explicit: if a change in a new version breaks a customization, making it compatible is the responsibility of whoever maintains that module. We test on an upgraded copy against your real flows, you confirm the outcomes, and what fails is fixed before a date is agreed.
/ Delivery
How does a 16 to 19 upgrade actually run?
Odoo publishes a six-step path; we run it as four stages. Brainvire plans a straight version upgrade at 3 to 8 weeks. With new scope, our implementation bands apply instead:
Freeze and challenge
Development stops: anything built during the upgrade has to be upgraded and tested again. Every customization is argued against what 17, 18 and 19 now do as standard. Three releases is where the most redundant code is found.
Request an upgraded test database
Odoo delivers a converted copy. How you request it depends on hosting: the Upgrade platform, the Odoo Online database manager, your Odoo.sh project, or the command line on-premise. This stage only proves the conversion completes.
Make every module installable on 19
Each module goes on an empty Odoo 19 database first, so tracebacks come from the module rather than your data, then on the upgraded copy. Three generations of renamed models and fields are handled with upgrade scripts.
Test, rehearse, cut over
Your flows run end to end on the upgraded copy, including integrations, server actions and exports. If time has passed we request a fresh copy, rehearse the day before, then take production down in the quietest window you have.
/ Scope
What makes a 16 to 19 upgrade bigger or smaller?
Four things decide it, and only one is Odoo. Two Odoo 16 databases of the same size can sit weeks apart; Odoo consulting is where yours gets sized.
How many, and how they were built
Odoo names what breaks first: invalid dependencies, changed asset declarations, references to fields, models or views that no longer exist, xpaths that moved. A module that extends by inheritance moves forward; one that edited a standard file has three releases to survive.
What the standard upgrade takes with it
Models, fields and external identifiers renamed along the way need upgrade scripts so nothing is lost. Records flagged noupdate are not refreshed, and any view broken during conversion is disabled and listed on the upgrade report.
What talks to the database
EDI feeds, APIs, connectors and scheduled jobs sit on Odoo’s own do-not-forget-to-test list, alongside automated actions, exports and server actions. A connector removed in 17, 18 or 19 needs a replacement chosen before the date.
Where the database lives
Odoo Online, Odoo.sh and on-premise each request the upgrade differently and each carries its own obligation to move. On Odoo.sh the upgraded copy is restored and your modules updated on every commit.
/ Version moves, on the record
Have we moved a customized Odoo database across several versions?
Three multi-version moves, two across three major releases. We claim no delivered Odoo 19 upgrade here, because no published Brainvire case study reports one yet.
Accelerated Solutions Group
ASG manufactures automotive accessories. Its Odoo 13 setup had turned complex under customization, so Brainvire moved it to Odoo 16: analytic accounts attach to order lines automatically, work orders are approved in bulk, manufacturing orders post labor cost, and scrap sits apart for rework.
Read the case →
Auto Locksmith Supplier
A Cleveland supplier of car locksmith tools moved from Odoo 13 to Odoo 16 across Sales, Purchase, Inventory, Shipping, payment gateways and Accounting. Brainvire migrated the working database, added TaxCloud for tax computation and IRS filing, and met new v13 customization requests while the upgrade was running.
Read the case →
Firefighter Tools Manufacturer
A North American maker of lightweight firefighter tools ran Odoo 14. Brainvire moved the ERP to Odoo 16 using migration scripts so no records were lost, integrated the Shopify storefront through APIs and webhooks, and automated Amazon payment registration, payouts and reconciliation.
Read the case →
/ The target decision
From Odoo 16, go straight to 19 or land on 18 first?
Dates come from Odoo’s standard and extended support table, which marks future end dates as planned. Straight to 19 if your customization surface is light; 18 first if the module list needs a project of its own.
| Criterion | Straight to Odoo 19 | Odoo 18 first |
|---|---|---|
| Version gap in one pass | Three major versions | Two now, one later |
| Support window Odoo publishes | Released September 2025. Standard support listed to September 2028 (planned) | Released October 2024. Standard support listed to September 2027 (planned) |
| Release notes your code absorbs | The Odoo 17, 18 and 19 notes, together | The 17 and 18 notes now, 19 at the second move |
| Full test cycles | One | Two, because the whole script runs again |
| Odoo’s own guidance | Odoo notes that the smaller the version gap, the easier the upgrade should be, and one pass stretches that guidance furthest | The same note, applied twice with a shorter gap each time, and two cut-over windows instead of one |
| What comes after | Nothing further until the next major version, on a window Odoo publishes to 2028 | A second upgrade, from Odoo 18 to 19, whenever you choose it |
/ Questions we are asked
Odoo 16 to 19 migration FAQs.
What is an Odoo 16 to 19 migration?
It is a version upgrade: a live Odoo 16.0 database moved onto Odoo 19.0. Odoo's own upgrade platform performs the technical conversion of the standard modules and data. The work that takes the time sits above that line — making every custom module installable on 19, proving your flows still run on an upgraded test copy, and planning the cut-over with you.
Can you upgrade from Odoo 16 straight to Odoo 19?
Yes. Odoo defines an upgrade as moving a database from an older version to a newer supported version, and states that you can upgrade from any version to supported versions only. Its table lists Odoo 19.0 as supported, so there is no requirement to stop on 17 or 18 first. What the distance changes is the volume of work on your custom code, not the shape of it.
What makes a three-version jump harder than a single one?
Your custom code meets three releases of standard change in one pass, and so does your test script. Odoo's own note is that the smaller the version gap, the easier the upgrade should be. Renamed models and fields need upgrade scripts, and Odoo warns that data from a standard model removed in a newer version may have to be recovered from the old table.
Is Odoo 16 still supported?
Not on every hosting type. Odoo gives each major version three years of standard support, and its table lists Odoo 16.0 as released October 2022 with standard support ending September 2025 — printed without the planned marker later versions carry. It shows 16.0 as no longer supported on Odoo Online and in extended support on Odoo.sh and on-premise. Odoo 17.0 runs to September 2026, 18.0 to September 2027, 19.0 to September 2028.
What changed between Odoo 16 and Odoo 19?
Three releases arrive together. Odoo 17 removed the manual reconciliation widget, dropped the planned versus immediate transfer distinction and enforced approval rules server-side. Odoo 18 removed the eBay Connector, rebuilt budgets around analytic budgets and redesigned the default multi-step routes. Odoo 19 removed tax mappings from fiscal positions, merged units with packagings, merged receipts into invoices and bills, and removed expense reports.
Who performs the upgrade, Odoo or the partner?
Odoo runs the database upgrade. Its platform converts standard modules and data to the target version, and its service level agreement covers standard applications, customizations created with the Studio app while Studio stays installed and the subscription is active, and developments covered by a maintenance of customizations subscription. Brainvire does not perform Odoo's upgrade step; everything outside that line is the work we take.
Will our custom modules work on Odoo 19?
Not automatically. Odoo states that a database containing custom modules cannot be upgraded until a version of those modules is available for the target version, and its service level agreement excludes the upgrade of additional modules not covered by a maintenance contract that are created in-house or by third parties, including Odoo partners. Brainvire installs each module on an empty Odoo 19 database first, then on the upgraded copy.
How long does an Odoo 16 to 19 upgrade take?
Brainvire plans a straight version upgrade at three to eight weeks, and a three-version jump sits at the top of that band. Those are our own planning figures, not numbers Odoo publishes, and they assume a code freeze and one full rehearsal before go-live. Where new scope travels with the upgrade, our implementation bands apply instead.
Should we go to Odoo 18 first and 19 later?
It depends on how much sits above the standard. One pass to 19 means one conversion, one port of the custom modules, one test cycle. Stopping on 18 halves the standard change your code meets at once, but the whole test script runs twice and 19 still comes later, against a shorter runway. We size both routes before you choose.
What happens to our Studio customizations?
Studio work is carried by Odoo's upgrade service, with conditions. The service level agreement covers customizations created with the Studio app for as long as Studio is still installed and the subscription is still active. Studio stores changes as data rather than code, so they are reviewed against the new standard views instead of rewritten.
How is the upgrade tested before go-live?
On an upgraded copy, never on production. Odoo neutralizes a test database: scheduled actions are disabled, outgoing mail servers are archived, payment providers and delivery carriers are reset to test, and bank synchronization is switched off. We run your real flows on that copy, including integrations, server actions and exports, then rehearse the whole upgrade the day before production moves.
What does Odoo's upgrade service not cover?
Odoo lists three exclusions: cleaning pre-existing data and configurations while upgrading, upgrading additional modules not covered by a maintenance contract that are created in-house or by third parties including Odoo partners, and training people on the upgraded version's features and workflows. An upgrade also does not downgrade, switch editions, change hosting type or migrate another ERP into Odoo.
/ Next step
Let’s find out what is really sitting on top of your Odoo 16.
- A senior architect replies within one business day
- Your details are never shared or sold
- An NDA can be signed before we hear any detail
US +1 (631) 897-7276 · Gulf +971-54-737-4253 · Singapore +65-9086-0319 · India +91-22-6116-3300.









Trusted by 2,000+ brands worldwide
“Brainvire has helped our business grow. We feel like it’s a true partnership. They’re always present. It’s been seven great years, looking forward to more.”
Book a working session
Tell us which Odoo version you run and what has been built on top of it.