Odoo 19 arrived in September 2025; Odoo 20 followed on 24 September 2026, unveiled at Odoo Experience in Brussels. Read side by side, the two versions tell a clear story. Odoo 19 consolidated the platform and took the first steps into embedded AI. Odoo 20 makes AI the operating model — agents that write to your database, not just advise you — and pays for that ambition with structural cleanups: merged apps, removed mechanisms, and tighter accounting rules. This comparison works feature by feature, using Odoo's official release notes for version 20 and the documented state of version 19, so you can see exactly what an upgrade changes — and what it removes.
The comparison table
| Area | Odoo 19 | Odoo 20 |
|---|---|---|
| AI agents | AI assistance embedded in apps; agents configured around “topics” | Agents create and update records (including from an uploaded PDF), answer questions about files, generate images, take voice instructions; “topics” renamed to “skills” |
| Agents in automation | Not available | Agents can be summoned by automated actions and scheduled actions; runs reviewable in the automation chat |
| AI cost | AI features tied to the subscription | All AI features require IAP credits bought separately; no plan includes credits |
| External AI connection | Custom integrations only | Native MCP (Model Context Protocol) connector, working within the user's access rights |
| AI assistants | — | AI accounting assistant (insights over your accounting data) and AI website assistant (pages, snippets, images, forms, menus) |
| Offline work | Connection required for record work | Offline mode: create, edit, archive, delete records and re-run earlier searches; syncs on reconnect |
| Mobile app | Standard mobile interface | Redesigned: swipe-down command palette, bottom-sheet date picker, touch-friendly forms, share files from the phone into Odoo |
| Access rights | Access control lists plus separate record rules | Simplified: record rules removed; a domain is defined directly on each access right |
| Field Service | Standalone Field Service app | App discontinued; live map, route planning, travel fees, and worksheets integrated into Planning |
| Bank entries | Manual journal entries on bank accounts allowed | Bank consistency rule: entries affecting bank accounts must originate from bank transactions |
| Vendor bill entry | Manual encoding, with earlier prediction helpers | Bill line prediction suggests product, account, tax, analytic distribution, and vehicle from history and labels |
| Paying bills | Payments registered against external bank flows | Pay bills inside Odoo, singly or in batches with one signature, via PISP |
| Chart of accounts structure | Account groups | Parent accounts replace account groups; account codes optional |
| Payment statuses | “In Process” and “Paid” | Renamed: “In Process” becomes “Paid”; “Paid” becomes “Reconciled” |
| Multi-currency reporting | Translation differences handled inside reports | Auditable Cumulative Translation Adjustment (CTA) line on balance sheet, trial balance, and general ledger |
| Manufacturing flow | Operations wait for the previous operation's full quantity | Continuous production: record produced quantities on work orders; later operations start once some quantity is ready (BoM setting); manufacturing orders can be split |
| Reordering rules | Minimum and maximum levels set manually | Minimum and maximum levels suggested from demand history, desired days of coverage, and order frequency |
| Payroll | Work entries drive the payroll flow | New payroll dashboard; work entries removed and merged with time off types |
| Expenses | Standalone Employee Expenses menu | Menu removed; approved expenses generate draft bills for accounting |
| Point of Sale | Combos assembled manually; hardware via conventional setup | POS recommends converting order lines into combos; browser-based hardware discovery |
| Interface icons | Font Awesome icons | Material Symbols icons; softer tag and status colours |
| Push notifications | Handled by Firebase | Handled by Odoo's in-house push service |
| External API | XML-RPC and JSON-RPC available | XML-RPC deprecated: db service removed in 20, common/object scheduled for removal in Odoo 22; plan migration to the JSON-2 API |
| eCommerce options | Mondial Relay pickup module and SOFORT payments available | Both removed; Mondial Relay reachable via Sendcloud |
| Industry packages | Existing package library | 13 new packages, including agri-equipment rental, catering, electronic refurbishment, interior design, pet groomer, and vineyard |
| Licensing | Standard and Custom plans | Standard price unchanged; Custom rises about 20% from 2027; new Light User licence (from EUR 7.90/user/month in Europe) |
| Supported versions | 17, 18, 19 | 18, 19, 20 — Odoo 17 standard support ended September 2026 |
The biggest delta: AI goes from feature to operator
Every other row in the table is an evolution; the AI rows are a change of kind. In Odoo 19, AI helped you write, summarise, and predict inside individual apps, and agent behaviour was organised into “topics”. In Odoo 20, an agent is closer to a junior colleague with a login: it creates records from an uploaded PDF of instructions, updates records on request, answers questions about a file you are previewing, generates images, and accepts dictated instructions. It can be triggered by the automation engine — an automated action or a scheduled action can summon it — and its automated runs leave a reviewable trail in the automation chat. Guardrails exist: agents show live progress, and when one hits its tool-call limit it asks a human before continuing. Conversations are kept for up to 30 days, and Odoo picks the model per task once you choose a provider.
The commercial model changes with the capability. In Odoo 20, every AI feature consumes IAP credits, purchased separately; no plan bundles them. A 19-era assumption that AI is simply “in the subscription” will produce a surprise invoice culture if it survives into a 20 budget. Cost now scales with how much work you hand the agents, so the budgeting unit is the workflow, not the user.
Accounting: same app, stricter rules
Accountants feel the upgrade as discipline. The bank consistency rule ends manual journal entries on bank accounts — in 19 a bookkeeper could post one to fix a difference; in 20 the entry must originate from a bank transaction, and reconciliation gains a summary report to prove the state of each period. Bill line prediction attacks the opposite problem, keystrokes: product, account, tax, analytic distribution, and vehicle are pre-filled from history and labels, while anything you typed manually on existing lines is left alone. Parent accounts replace account groups, account codes become optional, a CTA line makes currency translation differences auditable, and the renamed payment statuses (“Paid”, then “Reconciled”) describe what actually happened to the money. Duplicate invoice detection, present from 19.0 with red (likely) and yellow (possible) warnings, continues as the safety net. And expenses stop living in their own menu: approved expenses become draft bills, reviewed in the same flow as vendor bills.
Structure: what merged, what vanished
Odoo 20 deletes more than a typical release. Field Service loses its app entirely — its live technician map, routing, travel fees, and worksheets now live in Planning, so a 19 database with heavy Field Service use needs a functional remap, not just a version bump. Payroll loses work entries, the mechanism that fed payslips in 19; version 20 merges work entry types with time off types and runs payroll from a new dashboard. Security loses record rules as a separate concept: the domain that used to live on a rule now sits on the access right itself, which is simpler to read but means every custom rule from 19 must be re-expressed. On the technical side, XML-RPC is deprecated with its db service removed, push notifications move from Firebase to Odoo's own service, and the frontend moves to OWL 3 — integration and custom-module testing belong in any serious 19-to-20 plan.
Operations and front office
For warehouses and factories, the practical wins are concrete. Reordering rules in 19 depended on a planner typing sensible minimum and maximum quantities; in 20 those levels are suggested from demand history, target days of coverage, and order frequency. Manufacturing in 19 waited for an operation to finish its full quantity before the next began; continuous production in 20 lets later operations start as soon as some quantity is ready, and manufacturing orders can be split. Offline mode is the release's quiet enabler for both: record work continues without a connection and syncs later, and the redesigned mobile app — command palette, bottom-sheet date picker, file sharing from the phone — makes that workable on the devices people actually carry. At the till, POS in 20 suggests converting order lines into combos and discovers hardware through the browser, trimming two small frictions that 19 left to staff.
Money and support: the two clocks
Two timelines should drive the upgrade decision. The first is price: the Standard plan is unchanged, but the Custom plan rises by about 20% from 2027 — the first Odoo price rise in four years — while the new Light User licence (from EUR 7.90 per user per month in Europe) cuts the cost of limited-access users such as HR self-service or Barcode-only staff. Regional prices vary; model your renewal from the pricing page, not from converted figures. The second clock is support: with 20 released, the supported line is 18, 19, and 20, and Odoo 17's standard support ended in September 2026. If you are on 19, you have time — but every structural change above (Field Service, record rules, XML-RPC, work entries) argues for testing early on a copy of your database rather than discovering them in production.
