Skip to Content

Odoo 20, Light Users: what they are, how they are counted and why the bill can grow without anyone noticing

What Odoo 20 Light Users are, how employees are counted, and why the new rule hits companies that have used Odoo for years

With Odoo 20 the official price list has an entry that was not there before: the Light user, at €4.90 per user per month on the Italian price list. It is a brand-new category, born with this release: in version 19 it exists neither in the price list nor in the software. And it arrives together with the first price change since 2022: the Custom plan goes up by 20%, while Standard stays the same, as Odoo itself announced on 24 September (official Odoo blog). In the same announcement the Light User is presented as a paid access "per employee".

Put like that, it sounds like good news: a cheaper user for people who only need to book time off or clock in. Partly, it is. But reading the Odoo 20 code and the definition in the price list, the right question is not how much a Light user costs. It is who gets counted as one, and when they stop being one.

What a Light User is, according to the code

Up to Odoo 18, an internal user's permissions are read app by app: Sales, Inventory, Accounting, each with its own levels. Odoo 19 added a summary field to the user form, role, with just two values: User and Administrator. In Odoo 20 that field has three — Light, User, Administrator — and it is no longer just a label: it tells which licence that user counts as. The commit that introduces the Light role (818614c, 16 April 2026) states its purpose plainly:

The goal is to allow each employee to have a low access user (backend) without having to pay the full price of a regular user.

Technically, a Light User is not a separate kind of user: it is an ordinary internal user left with only the groups classified as "light". Each module declares its own: one's own time off, one's own attendances, lunch, the POS cashier, the shop floor operator, a few inventory and sales options. The price list describes the same things from the commercial side: My timeoffs, My Expenses, My Appraisals, My Attendances, My Planning, the inventory barcode operator, read-only access to Knowledge (official price list).

So far, a sensible tool. The problems lie in two details.

First detail: one tick box makes you a full user

The role is not chosen, it is computed. The role field is a projection of the user's groups: if all of them are "light", the user is Light; if even a single one is not, the user is User — that is, a full licence.

The commit says so, and a test in the HR module checks it (test_real_access_makes_regular):

Granting access beyond the light set turns a Light user into a regular User.

In practice: the HR manager who gives a factory worker read access to quality documents, or lets a warehouse operator see one more app, has just turned a Light licence into a full one. The code that computes the role has no warning and no confirmation: a computed field simply changes.

Some apps are reserved to full users by design: in Enterprise the menus for Knowledge, Approvals and AI are visible only to the base.group_user_regular group. If you want a shop floor employee to request an approval from the backend, or use the AI assistant, you pay for a full user.

Second detail: employees without a login count too

This is the part we expect to cause the most discussion at the first renewal.

Today the definition in the official price list has two halves:

Is considered as a light user, any user account indicated as active and designated as a "Light User" in the Software, or any active employee record (from the human resources App) not linked to an active non-portal user account.

And on the same page, among the examples of paying users, it literally says: "An employee without users".

In other words: every active employee in the Employees app who has no user is a Light User, even if they have never logged in and never will. The HR records, which many companies keep complete because they are needed for attendances, payroll, shifts or simply the org chart, become a billing base.

And the Odoo 20 code measures it. From this version on, the periodic message every instance sends to Odoo (the publisher warranty, the same one Odoo uses to check the contract) contains two new counters:

  • nbr_light_users and nbr_active_light_users, the users with the Light role (commit 5d0d3ac, 14 August 2026);
  • nbr_employees_wo_user, the active employees without a user, or with an archived or portal-only user (addons/hr/models/update.py, a file that does not exist in Odoo 19).

It is exactly the second half of the price list definition, turned into a query.

On top of that, Odoo 20 actively pushes in the same direction: the employee form has a new widget to create the user and send the invitation in one click, and the commit says it clearly — each employee should have at least a light user. In the code, the function that creates it describes the result as a "less-billable" user. Less billable, not free.

Until September it was not like this

The rule is new, and you can see it by comparing the official price list with its archived copies. Until 14 September 2026 the question "What is the definition of a paying user?" had this answer (price list as of 14/09/2026):

A paying user is usually an employee who has access to the Odoo backend to create, view, or edit documents.

Employees without access were not mentioned. In the 1 October copy the definition grows — "or an employee (record in hr application) who has no linked user" — and a new line appears among the examples of paying users: "An employee without users" (price list as of 01/10/2026).

For years, then, the rule was clear: you pay for whoever works in the system. And many companies built on it. They loaded their whole workforce into Odoo — factory workers, drivers, shop floor staff, seasonal workers — precisely because employee records cost nothing: they were used for attendances, shifts, payroll, assigning vehicles and equipment, and the software budget was based on users alone.

With the new definition that same database is worth something different. Every active record without a user is a Light licence. A budget planned on "fifteen users" becomes "fifteen users plus everyone on the payroll", without the company changing anything in the way it uses Odoo.

A sample calculation, using the Italian price list: a company with 80 employees on record and 15 users working in the system has 65 records without a user. At €4.90 a month each, that is €3,822 more per year, before the 20% increase on the Custom plan.

Why it risks upsetting many customers

Put together, the pieces paint a scenario worth looking at before it shows up on the invoice.

It changes the rules mid-game. Those who chose Odoo and filled it with data over the years did so under a precise cost rule. What weighs is not the increase itself, but that the base it is calculated on shifts to something the customer had built believing it was free. And it is hard to sell to whoever has to justify the IT budget to the board. Changes like this undermine trust in the relationship between customer and vendor (Odoo SA): today the change hit employees — who can assure companies that tomorrow the same will not happen to portal users? 

It comes with a price increase. The plan that goes up by 20% (Odoo's announcement) is Custom, the one used by almost every company working with a partner: according to the price list it is the plan you need for Odoo.sh and on-premise, external API, Studio, multi-company and agentic AI. On the Italian price list it costs €27.90 per user per month billed yearly and €33.90 billed monthly; the discount shown on the page (€22.90 and €27.90) only applies for the first 12 months to the users ordered initially. A customer who at renewal sees the unit price go up and a new line for Light users appear will hardly read it as a concession.

It hits companies with more employees than users. Manufacturing, logistics, retail with many stores, companies using Odoo for attendances or payroll: it is normal to have far more employees on record than actual users. Until September the conversation about Odoo's cost was "how many users work in the system". With this definition it becomes "how many people are on your staff".

The switch to full user is silent. One extra permission granted with good intentions changes the licence type, and nobody notices until the contract shows it. The control is not technical, it is a process — and in most companies it does not exist.

The price is not straightforward to get. To activate the Light licence the price list points to a meeting with an Odoo Advisor, who "will review your requirements and provide a customized quote based on your organization's needs". It is not an option you tick in the portal.

The measurement is automatic. There is nothing illegitimate about software counting what you pay for: it has always done so with users. But it is worth knowing: since version 20 Odoo knows how many employees without a user there are in your database, and the price list definition says those employees are paid for.

What about Odoo Community?

If you only use the Community edition — the odoo/odoo repository, without the Enterprise modules — the short answer is: no licence to pay, Light or full. The modules involved (base, hr, mail) are released under the LGPL-3 licence, and the price list with users, Light Users and plans applies to Enterprise subscriptions.

There are, however, two things to know.

The Light role exists in Community too. The role field, the "light" groups and the widget that creates a user from the employee form all live in Community modules. There they are just an access level: a convenient way to give every employee a user with the bare minimum. No cost.

Community also reports the counters to Odoo. The publisher warranty message lives in the mail module, which is Community, and is sent by a weekly scheduled action (Publisher: Update Notification) to services.odoo.com. Since version 20 that message includes the number of Light users and of employees without a user even on a Community installation, where the subscription code is simply empty. It does not produce an invoice, but it means Odoo knows how many people are on record even in databases that do not pay. On an on-premise Community installation the destination address is an option in the configuration file (publisher_warranty_url) and the scheduled action can be disabled. Not on Enterprise: it is the same channel used to verify the subscription.

The practical consequence is for those considering a move from Community to Enterprise. Until September the maths was done on users. Now it must include employee records too, and a company using Community for attendances and HR may find that the cost of Enterprise is very different from what it had estimated.

What to check before your next renewal

These checks take an hour, and they are worth doing before the contract renews itself:

  1. How many users you have per role. In Odoo 20, Settings → Users, grouped by Role: Light, User, Administrator. Anyone who is User but only uses time off and attendances probably has one group too many.
  2. How many active employees have no user. In the Employees app, filter on employees with no linked user. Former employees never archived, occasional collaborators, duplicate records: by the definition, each one is a Light licence.
  3. Who assigns permissions. Decide who can give users extra groups, and know it. One more tick box is one more full licence.
  4. Whether HR should live in Odoo. For some companies keeping the full staff register in Odoo is worth the cost, for others it is not. It is a choice, not a configuration detail.
  5. On Odoo 19 or earlier, the Light role does not exist in the software, but the price list definition makes no distinction between versions. Before the renewal, and before migrating to 20, count the active employee records without a user and ask how they will be counted.

In short

The Light User is a reasonable idea: bringing into Odoo people who are left out today, at a lower price. But the definition chosen by Odoo counts as Light even people who never log in. That changes the rule on which many companies built their database for years, the one under which employee records were not paid for. The version 20 code measures and reports them, and a single permission is enough to trigger a full licence. Coming together with a price increase, many customers will likely find out from the invoice rather than from their partner.

If you want to understand what changes in your case — how many users and employees you have today, how many roles were assigned out of habit, what happens when you migrate to 20 — let's talk: it is a short analysis, done on the real data of your database.

For a complete overview of the release, read our technical overview of Odoo 20.

news October 18, 2026
Archive
Sign in to leave a comment
Odoo 20, a technical overview: what actually changes if you are on Odoo 17 or 18
What Odoo 20 really brings — agentic AI, a new PDF engine, ir.access — and what it means if you are on Odoo 17 or 18