Odoo 19, released in September 2025, is a bigger step from Odoo 18 than its interface suggests. The headline addition is a built-in AI app (Enterprise). The changes that matter most in an upgrade sit underneath: units of measure lose their categories, inventory valuation is simplified, expense reports are gone, employee contracts become versions on the employee record, and a new JSON-2 API replaces XML-RPC and JSON-RPC, which are now deprecated. Most Odoo 18 users should plan the move before Odoo 18 leaves standard support in September 2027.
This post continues our version-by-version series after Odoo 17 vs Odoo 18. We have kept to changes we could trace to Odoo's official 19 release notes and to the 19.0 source code.
Odoo 18 vs Odoo 19 at a glance
| Area | Odoo 18 | Odoo 19 |
|---|---|---|
| Interface and framework | No cache for browsed views | Browsed data and translations are cached; search and view switcher work before data loads; abbreviated dates (Aug 1, 2025) |
| AI | No general AI app | AI app (Enterprise): agents that learn from your documents, AI fields, AI in server actions, natural-language search, a Live Chat agent that can create leads |
| Sales | Optional products on a separate quotation tab | Sections and sub-sections on quotations and invoices; a section can be optional, have its prices hidden or its lines collapsed |
| Products and units | Units of measure grouped in categories; packagings as a separate model | No UoM categories; each unit has a Reference Unit and a "Contains" factor; packagings are units |
| Inventory | Valuation configured on product categories | Valuation simplified: "Periodic (at closing)" or "Perpetual (at invoicing)" as a company default, still overridable per category; a new closing interface; backdated transfers; fewer default virtual locations |
| Purchase | Purchase orders end in a "Done" state | "Done" replaced by a lock/unlock flag; suggested quantities in the purchase catalog |
| Accounting | Fiscal positions map taxes | Each tax declares which fiscal positions it applies to and what it replaces; purchase and sales receipts merged into bills and invoices; "To review" flag on moves posted by invoicing users |
| HR | Separate contract records | Employee and contract merged, with versions (hr.version); overtime rulesets in Attendances; talent pools in Recruitment |
| Expenses | Expenses grouped into expense reports | Expense reports removed; each expense is submitted, approved and posted on its own, or several at once from the list |
| Payroll | Payslip batches | Batches renamed Pay Runs with a guided flow; payslip correction on Revert |
| Website | Website builder and eCommerce | Simplified builder and settings, new building blocks, SEO checks, AI page generation from a prompt |
| External API | XML-RPC and JSON-RPC | New JSON-2 API at /json/2 with API keys; /xmlrpc, /xmlrpc/2 and /jsonrpc deprecated |
| Support | Standard support to September 2027 | Standard support planned to September 2028 |
What changes in the interface and AI
Interface work in Odoo 19 is about speed, not a redesign. Data fetched while browsing is cached, so returning to a view loads from the cache, and the search bar and view switcher are usable before the records arrive. Numeric dates give way to abbreviated ones. Blocking messages on products and contacts have been removed; only warnings remain, and they appear at the top of the screen instead of as pop-ups. Customers are no longer added as followers; Odoo suggests the recipients of earlier messages instead.
The larger addition is the AI app, an Enterprise module with a family of integrations (ai_fields, ai_server_actions, ai_documents, ai_crm, ai_livechat, ai_website and others). You can chat with agents that answer from your documents, Knowledge articles and web pages, fill fields with AI, use AI inside server actions, and type a search in plain language for Odoo to turn into a filter. The release notes list ChatGPT 5.0, and your own Gemini account, as providers. We cover setup, permissions and cost control in AI in Odoo 19.
How sales, products and inventory changed
Quotations. Sections and sub-sections now work on quotations, sales orders and invoices. A section's prices can be hidden, or its lines collapsed so the customer sees only the total. The separate optional products tab is gone: a section can be marked optional instead, and portal customers choose quantities for those lines themselves. If your sales team used optional products for upsells, rebuild those templates as optional sections. See quotations and sales orders in Odoo 19.
Units of measure. UoM categories have been removed, and product packagings merged into units. A unit now points to a Reference Unit and says how many of it it Contains, so a "Box of 12" is simply a unit that contains 12 Units. Expect this to affect imports and custom code. Details are in products, variants and pricelists.
Inventory. Valuation has been simplified. The options are now "Periodic (at closing)", where Odoo suggests the entries in the valuation report, and "Perpetual (at invoicing)", where an entry is posted when a product is billed or invoiced. The company sets a default, product categories can override it, and there is a new closing interface and support for backdated transfers. Several default virtual locations are gone. Reordering rules gain a horizon (365 days by default) and a deadline showing the latest date to reorder. Read inventory and warehouse management before you configure valuation on the upgraded copy.
Purchase. The "Done" status is replaced by a lock/unlock flag. The purchase catalog suggests quantities from past sales and demand. See purchase and vendor management.
What is new in Odoo 19 accounting
Fiscal positions work differently. Tax mappings on the fiscal position have been removed. Each tax now declares which fiscal positions it applies to and which taxes it replaces, and Odoo picks fiscal positions by sequence. If you maintain custom fiscal positions, review them on the test copy.
Other changes finance teams will meet in the first week:
- Purchase and sales receipts are merged into bills and invoices; you switch between bill and receipt on the form.
- Users with only invoicing rights can post invoices, but those moves are flagged "To review" for accountants.
- Bank reconciliation has a simpler screen, keyboard shortcuts, and can reconcile draft entries.
- A tax return feature tracks filing obligations and deadlines, and a follow-up report separates overdue invoices from due ones.
For India, the release notes list improved GSTR-1 reporting (supply types are locked on posting and stored on journal items), a simplified GST return process, a one-click TDS report and an ESIC report in payroll. We go through them in GST and India compliance in Odoo 19 and accounting setup.
What changes in HR, payroll and expenses
HR sees the deepest structural change. Employees and contracts have been merged: there is no separate hr_contract module, and contract terms live as versions (hr.version) on the employee record; a salary or schedule change becomes a new version. Reports, Studio views and custom code built on contracts must be reworked. See employees and HR records.
Expense reports have been removed. Each expense now moves through its own states (draft, submitted, approved, posted, paid). Managers can still approve or post many at once from the list, and posting several employee-paid expenses creates one bill per employee. Approval habits built around monthly reports need rethinking; our expenses post covers the new flow.
Elsewhere in HR:
- Attendances: overtime rulesets define what counts as extra hours and how it is compensated. See time off and attendance.
- Payroll (Enterprise): batches are now Pay Runs and net salary can be split across several bank accounts. See payroll for India.
What developers and integrators need to know
The external API is the change with a deadline attached. Odoo 19 introduces JSON-2: HTTP requests to /json/2/<model>/<method>, authenticated with an API key sent as a bearer token. The old /xmlrpc, /xmlrpc/2 and /jsonrpc endpoints still work in 19 but are deprecated, and Odoo's 19.0 documentation schedules their removal for Odoo 22 (fall 2028). Move integrations to JSON-2 while you are touching them anyway.
POST https://your-db.odoo.com/json/2/res.partner/search_read
Authorization: bearer <API key>
Content-Type: application/json
{"domain": [["is_company", "=", true]], "fields": ["name"]}Custom modules usually break on the model changes above: hr.version in place of contracts, the missing hr.expense.sheet, UoM without categories, and the removed quotation option lines. On users, the groups field is now group_ids, organised through a new privileges model (res.groups.privilege). Odoo 19 runs on Python 3.10 to 3.13 and needs PostgreSQL 13 or later, so check your server before you install; see installing Odoo 19.
Should you upgrade from Odoo 18 to Odoo 19?
Odoo gives each major version three years of standard support: Odoo 18 until September 2027, Odoo 19 until September 2028 (planned). The year between those dates is your planning window, not spare time. We usually take clients through these steps:
- List what you depend on. Custom modules, third-party apps, Studio changes and every integration that calls Odoo. Mark those touching contracts, expenses, units of measure, quotation options or the RPC endpoints.
- Request an upgraded test copy. Odoo's upgrade service converts standard apps and data; custom modules must be ported by whoever maintains them. Our upgrade guide explains the process.
- Check the finance data first. Stock valuation, fiscal positions, open expenses and payroll are where a wrong number costs most.
- Retrain on the changed flows. Quotation sections, single-expense approval, employee versions and Pay Runs all look different to users.
- Rehearse, then go live. Run the full upgrade again on fresh data, time it, then schedule production. Switch on AI afterwards.
If you are still on Odoo 16 or 17, you can go straight to 19 in one jump; the reasons are in upgrade to Odoo 19 now or wait for Odoo 20. For a scoped estimate, upgrade.hadoopt.com covers how we run upgrades, or talk to us directly.
Questions we get asked
What is the biggest difference between Odoo 18 and Odoo 19?
For users, the new AI app in Odoo 19 Enterprise is the most visible change. For an upgrade, the structural changes matter more: units of measure without categories, simplified inventory valuation, expense reports removed, employee contracts merged into versioned employee records, and a new JSON-2 external API that replaces the now-deprecated XML-RPC and JSON-RPC endpoints. These drive retraining and custom-module work.
Is AI available in Odoo 19 Community?
No. The core AI module in Odoo 19 is licensed as Enterprise (OEEL-1), and its integrations for fields, server actions, documents, CRM and live chat all depend on it. Community users do not get AI agents, AI fields or natural-language search out of the box. You can still connect Community to an external AI service through custom development, using the JSON-2 API or a custom module.
Will my Odoo 18 integrations still work on Odoo 19?
Integrations that use XML-RPC or JSON-RPC still work on Odoo 19, because those endpoints are deprecated rather than removed. Odoo's 19.0 documentation schedules their removal for Odoo 22, planned for fall 2028. Integrations that read contracts, expense reports, UoM categories or quotation optional products will break regardless, because those models changed. Test every integration against an upgraded copy before going live.
How long is Odoo 18 supported?
Odoo 18 is covered by standard support until September 2027, three years after its release. Odoo 19, released in September 2025, is planned to be supported until September 2028. After standard support ends, Odoo.sh and on-premise customers can buy extended support for an extra fee; Odoo Online databases are upgraded on Odoo's own schedule instead.
Can I upgrade directly from Odoo 18 to Odoo 19?
Yes. With an Enterprise subscription, Odoo's upgrade service converts your standard apps, data and Studio customisations to Odoo 19. Custom and third-party modules are not included and must be ported to 19 by their maintainers. The safe order is an upgraded test copy, fixed modules, testing by the people who use each app, a full rehearsal, then the production upgrade.