Feature · Budgeting · Written for CFO / VP Finance

The budget lives in a spreadsheet, and the variance is a copy-paste on the fifth working day

The plan was built once, in a workbook, and it has sat beside the system ever since. The actuals live in the ledger. So every month someone exports a trial balance, lines it up against the plan in another column, and works out where a department or a project has run over. The answer is always last month's, because it is only as fresh as the last export, and by the time a line is visibly over budget, the spend that put it there already happened.

01
The capability

What you get with budgeting

A budget that sits on the ledger instead of beside it. You set a planned amount against budgetary positions, named groups of GL accounts, and against analytic accounts, so a budget can be read per account group or per project and department. Each budget line then carries three figures on one row: the planned amount you set, the practical amount the ledger has actually posted against it, and a theoretical amount, the plan prorated to today's date, so a line is measured against where it should be part-way through the period rather than only against the full-year figure. An achievement percentage falls out of the same line. Because the practical figure is read from the ledger that already holds your actuals, the comparison is one line, not two files that have to be made to agree.

02
The capability

Where budgeting comes from

Not from stock Odoo, and this is the part worth checking before you sign anything. Odoo Community ships no budget module and no budget model at all, a live check of the running system found neither. That is true, and it is not the end of the story.

It comes from a free module the Odoo community publishes and keeps current, specifically the budgeting module Odoo removed from the Community edition, which the community then republished under the same free licence. We install it, it runs on the deployment you own, and the code stays yours. A missing piece arriving as a free install rather than a paid tier is the shape of the whole stack, not an exception to it: NetSuite's answer to the same gap is a module and a per-user renewal, and that difference is the product.

One thing we say plainly because its own maintainers do: the module's published maturity is Beta. It is current and maintained across several Odoo versions, and it is not something we will call mature or proven, because that is not what it calls itself.

The budget on the ledger, not beside it
The budget on the ledger, not beside it — today versus del.ai on Where the plan lives, The variance and 1 more

The budget on the ledger, not beside it

FAQ

What is budget-versus-actual reporting?

Budget-versus-actual reporting is the comparison, line by line, of what an organisation planned to spend or earn against what its ledger actually recorded. A budget is set for a period against a dimension that matters to the business, a group of general-ledger accounts, a department, a project, and the actual figure is the sum the ledger has posted against that same dimension so far. The report is useful only to the degree the two sides share a definition: if the plan is grouped one way and the ledger another, the variance is an artefact of the mismatch rather than a fact about the business. That is why the comparison is strongest when the actual is read from the ledger directly, on the same account-group or analytic dimension the plan was set against, instead of being exported and re-grouped in a spreadsheet.

What is a time-prorated (theoretical) budget figure, and why is it more useful than the full-year number?

A theoretical budget figure is the annual plan scaled down to the point in the period you have actually reached, roughly, if you are a third of the way through the year, it is a third of the plan. It exists because comparing spend to date against a whole-year budget flatters every line early and panics every line late: a department that has used forty percent of its annual budget in month five looks fine against the year and is in fact running ahead of pace. The theoretical figure puts the actual next to where the plan says it should be now, so the achievement percentage means something in the middle of a period and not only at the end of one. It is a straight-line proration, not a seasonal model, so a business with a lumpy calendar reads it as a guide rather than a target.

What is the difference between budget-versus-actual and commitment (encumbrance) control?

Budget-versus-actual tells you what has already hit the ledger against a plan. Commitment control, also called encumbrance accounting, does something earlier and different: when a purchase order is raised, it reserves that amount against the budget immediately, before any bill is posted, so the budget shows what is already spoken for and not only what is spent. The two answer different questions, one is "how much have we used", the other is "how much is left that nobody has claimed yet", and a tool that does the first does not automatically do the second. This matters when comparing systems, because they are often described with the same word. NetSuite markets its version as budgeting "with modeling capabilities, approval workflows" inside one planning suite; a budget-versus-actual module reports on the ledger and stops there, and reserving budget at the point of commitment is a separate capability that has to be named separately rather than assumed.

Does Odoo include budgeting, or does it come from a separate module?

It comes from a separate module. Odoo 18 Community, the edition installed here, ships no budget module and no budget data model at all; a live check of the running system found neither. The capability is supplied by a free module the Odoo community publishes and keeps current, and it is specifically the budgeting module Odoo removed from the Community edition, which the community then republished under the same free licence and now maintains across several versions. Its published maturity is Beta. The practical consequence is that budgeting is an install rather than a paid tier: the module runs on the same self-owned deployment as the rest of the accounting, with no per-user fee, and what it provides is budget-versus-actual over account groups and analytic accounts, not commitment control, scenario planning or driver-based forecasting, none of which are in it.