WHAT WE SEE IN THE FIELD
The project was delivered successfully. Nobody knows the margin.
The customer is happy. The work was completed. The invoice was sent.
From a delivery perspective, the project looks successful.
Then someone asks: How profitable was it?
And the answer requires
a spreadsheet, hours need to be collected from Timesheets, Supplier costs come from Accounting, expenses are somewhere else, the original sales value needs to be checked...Someone then builds the margin manually, often weeks after the project has already finished.
This is one of the biggest missed opportunities in project-based businesses.
Profitability should not be something reconstructed after delivery.
It should be visible while the project is still running.
PROJECT PROFITABILITY IN ODOO
Revenue and cost need to meet at project level
Odoo Project includes profitability reporting for billable projects.
The profitability dashboard brings together revenue and cost information linked to the project and its analytic account. Odoo can distinguish expected amounts, amounts that are ready to be invoiced or billed, and amounts that have already been invoiced or posted.
That means a project manager can move beyond: How much have we invoiced?
and start asking:
- How much have we sold?
- How much have we delivered?
- What has the project cost us so far?
- What costs are still expected?
- What margin are we actually protecting?
That is a much more useful project conversation.
TIMESHEETS ARE A COST, NOT JUST A TIME RECORD
Twenty hours spent is not the same as twenty hours sold
This distinction is essential in service businesses.
Imagine a project sold for €10,000.
The team estimates 80 hours of work.
Halfway through the project, 65 hours have already been consumed.
The customer may still see a project that is progressing normally.
Operationally, however, the margin may already be under pressure.
Odoo Timesheets records time against projects and tasks, and billable projects can link those entries to Sales Order items for invoicing.
For profitability purposes, those timesheets can also contribute to the internal cost of the project, so the same hour can have two very different values:
What the customer pays for it
and
What it costs the company to deliver it
Project profitability depends on understanding both.
HOW WE WOULD CONFIGURE IT
Start by defining what should count as project cost
Before looking at a profitability dashboard, we first need to decide what the company considers part of the project margin.
Depending on the business, this might include:
- Employee time
- External consultants
- Purchased services
- Materials
- Travel expenses
- Accommodation
- Other employee expenses
- Subcontracting
The Odoo profitability dashboard can include several records linked to the project and its analytic account, including timesheets, sales, purchases and other project-related costs.
But Odoo cannot decide the management model for you.
The first question is therefore: What does “project profitability” mean in this company?
Only after that does the dashboard become meaningful.
THE ANALYTIC ACCOUNT MATTERS
The project needs a financial identity
A major part of Odoo's project profitability logic relies on the analytic account associated with the project.
Analytic accounting is used to track revenues and costs by dimensions such as projects or services, allowing accounting entries to be distributed to the relevant analytic accounts.
This means that a supplier invoice can be an accounting cost for the company and, at the same time, a cost attributable to a specific project.
For example: A €3,000 subcontractor invoice enters Accounting.
If it is correctly linked analytically to Project A, that cost becomes part of the project's economics.
Without that link, the company still records the expense correctly in general accounting.
But the project profitability report may tell an incomplete story.
This is why analytic configuration is not simply an Accounting concern, tt affects project management.
SOLD, DELIVERED AND INVOICED ARE DIFFERENT THINGS
Revenue has several stages
Suppose you sell a project for €50,000. That does not mean you have already delivered €50,000 of value, and it certainly does not mean you have already invoiced €50,000.
Odoo's project profitability view distinguishes revenue at different stages, including amounts sold, delivered and invoiced. The profitability dashboard similarly separates expected amounts from those ready to be invoiced and those already invoiced.
That distinction becomes particularly useful in long projects.
Example:
- Sold: €50,000
- Delivered: €30,000
- Invoiced: €20,000
These numbers tell three different stories.
- The project manager can see delivery progress,
- Finance can see billing progress.
- Management can compare both against the costs already incurred.
One figure alone would hide too much.
FIXED PRICE PROJECTS
Margin depends on controlling effort
A fixed price project creates a simple commercial promise:
- The customer pays the agreed amount.
- The delivery risk sits largely with the provider.
If you sell a project for €20,000 and need 150 hours to deliver it instead of the planned 100, revenue may remain exactly the same, but the margin does not.
This is where accurate timesheets become particularly valuable.
The purpose is not to control whether someone worked 7 hours and 43 minutes. It is to understand whether the effort being consumed still makes economic sense relative to what was sold.
In fixed-price environments, overruns need to become visible before the project is finished.
TIME AND MATERIAL PROJECTS
More hours do not automatically mean more margin
Time and Material projects behave differently.
If the customer is billed based on timesheets, additional hours may also generate additional revenue.
Odoo supports billable timesheets and can use them as the basis for customer invoicing.
But even here, profitability is not automatic.
Consider:
- A senior consultant costs the company €80/hour.
- The customer is billed €100/hour.
- A junior consultant costs €35/hour.
- The customer is also billed €100/hour.
The commercial value of one hour may be identical, but its contribution to margin is not.
This is why utilisation, cost rates and delivery mix matter even when every hour is billable.
MILESTONE PROJECTS
Revenue recognition in the operational process can follow delivery progress
Some projects are neither fixed-price upfront nor billed strictly by the hour - They are invoiced by milestone.
Odoo supports service products configured with Based on Milestones invoicing. When a project milestone is reached, the corresponding delivered percentage is updated on the Sales Order, making that amount available for invoicing.
Example:
- 25% on design approval
- 25% after prototype
- 30% after implementation
- 20% after final acceptance
This gives the project team a way to connect operational progress with commercial billing.
It also means profitability can be viewed against the actual delivery model rather than treating every project as if it were sold and invoiced in the same way.
PURCHASES AND SUBCONTRACTORS
Internal hours are only one part of project cost
A common profitability mistake is calculating:
Revenue minus employee hours = margin
That may work for a pure consulting project, tt quickly becomes misleading when external costs exist.
Imagine:
- Project revenue: €40,000
- Internal labour cost: €15,000
- At first glance:
- Margin contribution: €25,000
- But the project also required:
- External engineering: €8,000
- Travel: €2,500
- Specialist software: €1,500
The economics are now very different.
Odoo's project profitability reporting can include purchase-related costs when the records are correctly linked to the project and its analytic account.
That gives project management a more complete view than timesheets alone.
THE MOST COMMON MISTAKE
Looking at invoicing and calling it profitability
Imagine two projects.
Project A
- Revenue invoiced: €50,000
- Cost: €20,000
Project B
- Revenue invoiced: €50,000
- Cost: €47,000
From a sales report, they look identical.
From a profitability perspective, they are completely different businesses.
Revenue tells you how much you sold. Profitability tells you what remained after delivering it.
Both matter.
But they answer different questions.
ANOTHER COMMON MISTAKE
Discovering the overrun after the final invoice
A post-mortem can explain what went wrong, but It can no longer recover the margin.
If a project was estimated at 200 hours and the team has already consumed 190 hours while only 60% of the work is complete, management needs that information now.
Not at project closing.
This is where integrating Project and Timesheets becomes useful.
Odoo allows working time to be logged directly against projects and tasks, including through a timer or manual entries.
The quality of the profitability view therefore depends partly on the quality and timeliness of the operational data.
Late timesheets create late visibility.
TIMESHEET DISCIPLINE MATTERS
Bad time data creates false confidence
There is always resistance around timesheets and badly designed timesheet processes deserve that resistance.
If consultants need ten minutes every evening just to explain where their time went, the process is probably too detailed. But the alternative cannot be no information at all if the business sells people's time.
We normally look for a balance:
- Enough detail to understand project cost.
- Enough structure to support customer invoicing where required.
- Not so much detail that timesheet entry becomes an administrative project in itself.
Odoo allows users to record time through the Timesheets app and directly from Project tasks or Helpdesk tickets, which helps keep time recording close to the work itself.
The objective is usable financial data with the lowest reasonable operational burden.
PROJECT DASHBOARD
The project manager should not need a separate spreadsheet
Odoo's Project Dashboard brings together several dimensions of a project, including tasks, timesheets, milestones, profitability and budgets depending on the applications and configuration in use.
This is important.
A project manager should be able to review delivery and economics in the same context.
For example:
- Are milestones on track?
- How many hours have been consumed?
- What has already been invoiced?
- What costs have been incurred?
- What costs are still expected?
- Is the project still economically healthy?
Project management becomes stronger when operational and financial information stop being separate conversations.
WHAT WE WOULD REVIEW IN A PROJECT PROFITABILITY SETUP
For a project-based company, we would normally verify:
How projects are sold: Fixed price, Timesheets, Milestones or a combination.
How employee costs are represented: The profitability model is only useful if internal labour costs are meaningful.
How external purchases are linked: Supplier costs need to reach the correct project.
How expenses are allocated: Travel and other project expenses should not disappear into general overhead if management wants them included in project margin.
How timesheets are recorded: The level of detail should support management without creating unnecessary administration.
How analytic accounting is structured: Project-level reporting depends on correct analytic attribution.
Who reviews profitability and when: A dashboard nobody looks at is not a control mechanism.
That last point matters most.
OXALYO'S TAKE
Project profitability is a management process, not a report
Odoo can bring together sales, timesheets, purchases, expenses and accounting information around the same project.
That does not automatically mean the company is managing profitability.
The real value appears when project managers use that information while they can still act on it.
A falling margin may lead to:
- a scope discussion,
- a change request,
- a resource change,
- a purchasing decision,
- a billing action,
- or simply a different delivery approach.
The ERP provides visibility.
Management still needs to respond.
When we configure project profitability in Odoo, we therefore focus on one question: What information does the project manager need early enough to change the outcome?
That is far more useful than knowing the exact margin three weeks after the project is closed.
FAQ: ODOO PROJECT PROFITABILITY
Can Odoo calculate project profitability?
Yes. Odoo includes profitability reporting for billable projects and can compare revenue and costs linked to the project and its analytic account.
What costs can Odoo include in project profitability?
Odoo can incorporate different project-related records, including timesheet costs and purchase-related costs, provided they are properly linked to the project and its analytic account.
Can Odoo track profitability before the project is finished?
Yes. The project profitability dashboard distinguishes different stages of expected, delivered, billable and invoiced information, which allows profitability to be monitored while the project is in progress.
Can Odoo invoice projects based on timesheets?
Yes. Billable timesheets can be linked to Sales Order items and used for invoicing customers according to the configured service product and invoicing policy.
Can Odoo invoice a project by milestones?
Yes. Odoo 19 supports milestone-based invoicing. Completing a milestone updates the delivered percentage on the related Sales Order, after which the corresponding amount can be invoiced.
What is the role of analytic accounting in Odoo projects?
Analytic accounting allows revenues and costs to be attributed to dimensions such as projects. Correct analytic allocation is therefore important for producing meaningful project-level profitability information.
Does Odoo Project replace financial accounting?
No. Project profitability provides a management view of project economics. Financial Accounting remains responsible for the company's formal accounting records. The two work together when project-related financial records are correctly linked.
Do you know the margin of your projects before they are finished?
If project profitability is still calculated manually after delivery, Odoo may already contain most of the information you need, but it is not yet being connected at project level.
Talk to Oxalyo about your Odoo Project and profitability setup.