Odoo 16 to Odoo 18 migration: what changes and how we move you
Two releases of change in one upgrade. Odoo’s platform converts the standard database; everything on top has to clear what 17 and 18 altered. Brainvire inventories your Odoo 16, makes each module installable on 18, then proves it on a copy before a date is set.
Moving a live database from Odoo 16.0 to Odoo 18.0 in one supported pass — Odoo’s own documented example of an upgrade. Odoo’s upgrade platform performs the technical conversion of the standard modules and data. Custom modules are 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 since they were built.
Brainvire plans a straight version upgrade at 3 to 8 weeks, and skipping a version puts you 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.
/ Two versions behind
Why has the Odoo 16 upgrade waited this long?
Four reasons we hear, and none of them is the upgrade itself.
The window has already closed
Odoo supports each major version for a fixed period and publishes the dates. Odoo 16 is now past the end of its standard support window, and waiting does not pause a clock that was never yours to set.
Two releases of change, in one pass
Everything Odoo altered in 17 and everything it altered in 18 arrives together. Odoo’s own note is that the smaller the version gap, the easier the upgrade should be, which is what keeps this one deferred.
Nobody has listed what is on top
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.
The only test on the calendar is go-live
Without a test database and a run through the real flows, the first time anyone sees Odoo 18 holding your data is the morning it has to work.




Trusted by enterprise Odoo teams worldwide












/ Version to version
What actually changed between Odoo 16 and Odoo 18?
The upgrade crosses two release boundaries, so each row names the release it landed in and cites Odoo’s release notes for Odoo 17 or Odoo 18. The third column is our reading, not theirs.
| Area | What changed | What it means for your upgrade |
|---|---|---|
| Removed 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 |
| 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 |
| Transfers and routes | Odoo 17 dropped the planned versus immediate transfer distinction. Odoo 18 fires push rules on validation 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 |
| Close controls | Odoo 18 added a lock dates wizard that locks by journal type, plus a Hard Lock date with an exceptions mechanism | A Hard Lock date cannot be changed once saved, so it is set late and deliberately |
| Payments | Odoo 18 stopped payments creating an accounting move unless an outstanding account is set on the linked payment method | Every payment method is checked for its outstanding account before anything is posted on 18 |
| Taxes | Odoo 17 put codes in every localization’s tax names, added a Tax Description field and made some fields unmodifiable once a tax is used. Odoo 18 made all standard sales taxes follow a company setting defining them as price-included or price-excluded | One decision at company level, then a check that every tax overriding it still behaves as it did |
| Budgets | Odoo 18 rebuilt budget management around analytic budgets: no more dates on budget lines, no more budgetary positions. Separate financial budgets compare against the profit and loss report | Budget structure is redesigned, not carried. Agree the new shape with finance before cut-over |
| Statements | Odoo 18 removed and merged the Follow-up and Customer Statement views and modules, and revamped the Partner Ledger to read like a customer statement that can be sent to customers | Reports, automations, saved filters and training material pointing at the old views are re-pointed |
| Inventory valuation | Odoo 17 set the cost of FIFO products to the average price of the remaining quantities. Odoo 18 added valuation by lot or serial number, so each lot of a product can carry its own valuation | Costing behavior moves in 17 and gains an option in 18. Both are verified against your closing figures on a copy |
| Views and reports | Odoo 17 shipped a redesigned user interface and technically overhauled the accounting reports. Odoo 18 gave Studio a report editor that adds table columns, relabels and highlights form buttons, and declares a customized invoice template compatible with Send & Print | Views and report templates written for 16 are the most common source of tracebacks, and some of that code can retire into Studio |
| Spreadsheets | Odoo 18 renamed ODOO.PIVOT formulas to PIVOT, inserts pivot tables as dynamic pivots, added calculated fields, and removed the Link to Odoo menu option in spreadsheets | Every saved spreadsheet is opened during testing. The rename is silent until someone looks |
| Manufacturing planning | Odoo 17 let a bill of materials update apply to existing manufacturing orders. Odoo 18 gave the Master Production Schedule yearly planning, automatic replenishment, maximum batch sizes, an import template and visibility across all BoM levels | Planning customizations are worth challenging before they are ported, not after |
/ Responsibilities
Who does what in an Odoo 16 to 18 upgrade?
The boundaries are published, not negotiable. All of it is stated in Odoo’s upgrade documentation and its guide to upgrading a customized database. We name them here so nobody finds the boundary in week five.
Odoo converts the standard database
Odoo’s upgrade platform performs the technical conversion of standard modules and data to the target version. The 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 this step.
Your custom modules are our job
That same agreement expressly excludes additional modules without a maintenance contract, built in-house or by third parties, including Odoo partners. So we do it, against two releases of change rather than one: each module made installable on an empty Odoo 18 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 new version’s features and workflows. Skipping a version makes the last one bigger: your team meets two releases of interface change at once.
Testing is shared, and it is the point
Odoo is explicit: if a new version breaks a customization, making it compatible is the responsibility of whoever maintains it. We test on a 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 18 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, and skipping a version puts you at the top. 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 and 18 now do as standard. Retiring redundant code here is the cheapest work on the plan.
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
Each module goes on an empty Odoo 18 database first, so tracebacks come from the module rather than your data, then on the upgraded copy. Two generations of renames are handled with upgrade scripts.
Test, rehearse, cut over
Your flows run end to end on the upgraded copy, including integrations, automated 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 18 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
A module that extends Odoo by inheritance moves forward. One that edited a standard file has to be found first, and it has two releases of change to survive rather than one.
What was changed without code
Studio work is carried by the upgrade service while Studio stays installed and the subscription is active. Configuration, saved filters, mail templates and translations are still re-checked by hand.
What talks to the database
EDI feeds, APIs, connectors and scheduled jobs are on Odoo’s own do-not-forget-to-test list. A connector removed in 17 or 18 needs a replacement chosen before the date, not after.
Where the database lives
Odoo Online, Odoo.sh and on-premise each request and deploy the upgrade differently. On Odoo.sh the upgraded copy is restored and your modules updated on every commit, which resequences the work.
/ Version moves, on the record
Have we moved a customized Odoo database before?
Three version-to-version moves onto Odoo 16, each with the case study behind it.
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 →
CURE International
A non-profit running children’s hospitals across several countries. The Odoo 16 upgrade put eight sites on one centralized inventory and purchase system, replaced manual stock adjustments with automated records under user-based access, and structured the approval workflows.
Read the case →
AMASCO LLC
AMASCO runs repairs and maintenance across oil and gas, maritime and Gulf shipping. Brainvire moved its Odoo backend from 14 to 16 and rebuilt the customizations there: a project created when a quote is accepted and linked to procurement, role-based limits on posting entries, and requisitions that pass approval first.
Read the case →
/ The target decision
From Odoo 16, should you target 18 or go straight to 19?
Odoo’s published standard and extended support table gives every major version three years of standard support, and lists Odoo 16.0 as released in October 2022 with standard support ending September 2025 — a date already passed. So the question is not whether to move, but how far.
| Criterion | Move to Odoo 18 | Move to Odoo 19 |
|---|---|---|
| Version gap from Odoo 16 | Two major versions in one pass | Three major versions in one pass |
| Support window Odoo publishes | Released October 2024. Standard support listed to September 2027 (planned) | Released September 2025. Standard support listed to September 2028 (planned) |
| Release notes to absorb | The Odoo 17 and Odoo 18 release notes | Those plus the Odoo 19 release notes, landing together |
| Work on your custom modules | Each made installable on 18, then retested against your flows | Each made installable on 19, with a third release of change to absorb first |
| What comes after | A second, smaller upgrade to 19 whenever you choose it | Nothing further until the next major version |
| Odoo’s own guidance | Odoo notes that the smaller the version gap, the easier the upgrade should be | Same guidance, stretched one version further |
Choose 18 for the smallest change your position still allows; choose 19 if your customization surface is light. We size both first. Already on 17? The shorter move is Odoo 17 to 18; other routes start at Odoo migration.
/ Questions we are asked
Odoo 16 to 18 migration FAQs.
What is an Odoo 16 to 18 migration?
An Odoo 16 to 18 migration moves a production database from Odoo 16.0 to Odoo 18.0 in a single pass. Odoo's own upgrade platform performs the technical conversion of the standard modules and data. Your partner makes every custom module installable on 18, runs the business flows on a test copy, and plans the cut-over with you.
Can we go straight from Odoo 16 to 18?
Straight to 18. Odoo's upgrade documentation uses moving a database from Odoo 16.0 to Odoo 18.0 as its own worked example, and states that you can upgrade from any version to a supported version. There is no requirement to land on 17 first, and stopping there means running the whole test cycle twice.
Why is an Odoo 16 to 18 upgrade bigger?
Because it crosses two release boundaries instead of one. Your custom code absorbs everything Odoo changed in 17 and everything it changed in 18 in the same pass, and so does your test script. Odoo's own note is that the smaller the version gap, the easier the upgrade should be. The shape of the work is identical; the volume is not.
Is Odoo 16 still supported?
Odoo gives every major version three years of standard support. Its published support table lists Odoo 16.0 as released in October 2022 with standard support ending September 2025, a date that has passed, and prints it without the planned marker that later versions carry. Odoo 17.0 is listed to September 2026 and Odoo 18.0 to September 2027.
What changed between Odoo 16 and 18?
Two releases of change arrive together. Odoo 17 removed the manual reconciliation widget, dropped the planned versus immediate transfer distinction, put codes in localization tax names and enforced approval rules server-side. Odoo 18 rebuilt budgets around analytic budgets, added a hard lock date, merged the Follow-up and Customer Statement views, and redesigned the default multi-step routes.
Will our custom modules work on Odoo 18?
Not automatically. Odoo states that a database containing custom modules cannot be upgraded until a version of those modules exists 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 makes each module installable on 18, then retests it against your flows.
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 Studio while Studio is installed and the subscription is active, and developments under a maintenance of customizations subscription. Everything else is the customer's or partner's work, and that is the part we take.
How long does a 16 to 18 upgrade take?
Brainvire plans a straight version upgrade at three to eight weeks, and a two-version jump usually sits at the top of that band. Those are our own planning figures, not Odoo published ones, and they assume a code freeze and one full rehearsal. Where new scope travels with the upgrade, our implementation bands apply instead.
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 do you test the upgrade before go-live?
On a copy, never on production. Odoo delivers an upgraded test database and neutralizes it: scheduled actions are disabled, outgoing mail servers are archived, payment providers and delivery carriers are reset to test, and bank synchronization is off. We run your flows end to end, then rehearse the whole upgrade the day before.
Can an upgrade be done without downtime?
No, and no partner should promise it. Odoo states that the production database is unavailable while it upgrades, which is why the move is planned for the window when usage is lowest. On Odoo.sh the platform reverts automatically if the upgrade fails and keeps a pre-upgrade backup. On Odoo Online a completed upgrade cannot be reversed.
What does Odoo's upgrade service not cover?
Odoo lists three exclusions: cleaning pre-existing data and configurations during the upgrade, upgrading additional modules that are not covered by a maintenance contract, whether built in-house or by third parties including Odoo partners, and training people on the new version's features and workflows. Brainvire scopes each of those as its own piece of work.
/ 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.