
Project-based businesses have a peculiar blind spot. They can tell you, in detail, how a project is going. Phase two is complete. The client is happy. The site team is on schedule. What they frequently cannot tell you, until the project is finished and someone in finance reconstructs it, is whether the project is making money.
This is not a small gap. In contracting, engineering, installation, fabrication and professional services, the difference between a 22% gross margin and a 9% gross margin on the same job is usually invisible while there is still time to do something about it. By the time it shows up in the accounts, the only remaining option is to note it and move on.
Odoo Project and Timesheets, combined with analytic accounting, close that gap. Hours logged against a task carry a cost. Materials issued to a project carry a cost. Expenses and subcontractor invoices attach to the same project. Revenue invoiced attaches to it too. The result is a live margin figure per project rather than a retrospective calculation.
This guide covers how the modules fit together, how to set cost rates so the numbers mean something, the four billing models and how each is configured, and where implementations go wrong. It is written for owners, operations directors and finance managers in project-driven businesses.
The Problem: Projects Reported on Progress, Not Cost
The symptoms recur across contracting, engineering services and installation businesses.
- Progress and cost are tracked separately, if at all. A project manager reports percentage complete. Finance reports invoiced revenue. Nobody combines them with actual cost, so β75% complete and 90% of budget consumedβ is a sentence nobody is in a position to say.
- Labour cost is a guess. Hours may be recorded for payroll. They are rarely recorded against the job. When they are, they carry no cost rate, so they measure effort but not money.
- Materials flow without attribution. Stock leaves the stores for a site. Which project consumed it is recorded on a slip, in a van, or in someoneβs memory.
- Variations are absorbed silently. The client asks for a change. It gets done. Whether it was ever priced, approved or invoiced depends on whether the project manager remembered to raise it.
- Subcontractor costs arrive late. Invoices come in weeks after the work, sometimes after the project has been reported as complete and profitable.
- Overhead is applied as a blanket percentage. Which means high-overhead projects subsidise low-overhead ones invisibly, and pricing decisions are made on averages that fit no actual job.
- Profitability is a post-mortem. Calculated at close, by finance, from payroll allocations and invoice matching. Too late to act, and too aggregated to learn from.
Why Project Cost Visibility Decides Profitability
Three arguments carry weight with the people who approve this kind of project.
Project businesses fail on the projects they thought were fine. A job known to be in trouble gets attention β resources move, scope gets renegotiated, the client conversation happens. A job assumed to be fine gets none of that until the final account. Instrumentation does not make projects more profitable by itself; it makes intervention possible while intervention still works.
Estimating only improves with actuals. Every project-based business prices new work from an estimate. If nobody compares estimates to outcomes at a granular level, the next estimate repeats the same assumptions. Businesses that close this loop typically discover that one or two work types have been systematically underpriced for years β not catastrophically, just consistently.
Labour is the largest variable, and it is the easiest to lose. Materials have invoices. Subcontractors have invoices. Internal labour has only timesheets, and if those do not exist or carry no cost, the single biggest controllable cost in the project is invisible. This is why timesheet discipline, unglamorous as it is, tends to be the highest-return element of the whole implementation.
There is also a cash argument. Projects billed on milestones or progress need those milestones tracked and triggered. Businesses that instrument delivery routinely find they are invoicing weeks later than they could be β which is a working capital improvement available without selling anything extra.
The Four Modules That Do the Work
Project β Structure and Planning
Odoo Project provides projects, task stages, tasks and sub-tasks, kanban and Gantt views, dependencies, milestones, document management and a customer portal.
For cost-tracked delivery, the configuration decisions that matter are:
- Project templates per work type. An installation, a maintenance contract and a design-and-build job have different shapes. Templates give each new project the right phases, standard tasks and checklists.
- Planned hours at task level. This is what makes variance analysis possible. A task with no estimate can be late but cannot be over budget.
- Milestones tied to billing events. So finance is not chasing project managers for invoicing status.
- Stage design that reflects real handoffs, not generic to-do columns.
- Portal access for clients where appropriate, which reduces status-update overhead considerably.
Timesheets β the Cost Input
Timesheets log time against a project and task. Entry is possible from the web interface, the Odoo Timesheets mobile app, a timer, or the grid view for weekly entry.
Three rules determine whether timesheet data is worth having:
- Daily entry, not weekly. Reconstructed timesheets are systematically wrong, and the error always flatters the person filling them in.
- Capture non-billable and internal time too. If only client-chargeable hours are recorded, you cannot calculate utilisation and you cannot see where capacity actually goes.
- Approve weekly. Approval a month later is a formality. Approval within the week catches errors while people still remember.
The fastest way to get timesheet compliance is to show people the report their data produces. Teams that see project margin and see it used in decisions treat their entries differently from teams who suspect nobody looks.
Analytic Accounting β the Missing Link
This is the component most implementations under-configure, and it is the one that makes everything else work.
Analytic accounting is a parallel dimension to the general ledger. Where the GL answers βwhat kind of cost was this?β, analytic accounting answers βwhat was it for?β Each project gets an analytic account, and every cost that touches the project posts to it β getting it right often benefits from experienced Odoo consulting services:
- Timesheet hours Γ the employeeβs cost rate
- Materials issued from stock
- Expenses claimed against the project, in the same way an employee advance or expense claim does
- Subcontractor and vendor bills allocated to it
- Revenue from invoices raised against it
The result is a single account per project holding all cost and all revenue, which is exactly what a margin report needs.
Design guidance: build an analytic plan that reflects how you want to report β typically project, but often with a second dimension such as department, branch or work type. Getting this structure right at the start matters, because retrofitting analytic distribution means re-posting entries.
Sales and Invoicing β the Revenue Side
The sales order defines what was sold and on what basis. Depending on the billing model, invoicing draws from delivered quantities, logged timesheet hours, completed milestones, or a fixed schedule.
The architectural rule that makes reporting work: the sales order, the project and the analytic account must be linked. If revenue posts to one identifier and cost to another, margin will never reconcile, and the reporting layer becomes an exercise in manual matching.
Setting Up Cost Rates Properly
A timesheet hour is worth nothing analytically until it carries a cost. Odoo takes the cost rate from the employee record, and how you set that rate determines whether your margin figures are credible.
Three approaches, in ascending order of accuracy:
- Direct salary cost only. Gross pay plus statutory employer contributions, divided by available hours. Simple, understates true cost, but consistent.
- Fully loaded employee cost. Adds benefits, tools, equipment, training and allowances. Better, and usually not much harder to calculate.
- Fully loaded plus overhead absorption. Adds a share of premises, management, administration and other indirect cost. Most accurate for pricing decisions, but requires an agreed absorption basis and annual review.
Practical advice: most businesses should start at level two and move to level three once the system is running. What matters more than the absolute accuracy is that the rate is consistent, documented, and reviewed annually β because margin trends and comparisons between projects are usually more actionable than the absolute margin number.
Two further points worth deciding explicitly:
- Role-based versus individual rates. Individual rates are more accurate but expose salary information more widely through reporting. Many businesses use role or grade average rates for exactly this reason, and that is a legitimate choice.
- Overtime treatment. Decide whether overtime hours carry a premium cost rate. For contracting businesses with significant overtime, this materially changes project margin.
Billing Methods and How to Configure Each
Odoo supports the four models project businesses actually use, and each needs different configuration. Mixing them through one generic setup is a common source of confusion.
| Billing Model | How It Works in Odoo | Best For | Watch Out For |
|---|---|---|---|
| Fixed price | Sales order with a service product; invoiced on a schedule or on delivery | Defined scope, known effort | Requires disciplined variation control, or margin erodes silently |
| Time and materials | Service product invoiced on timesheet hours, plus materials delivered | Uncertain scope, advisory work | Timesheet accuracy is the revenue β errors are lost cash |
| Milestone-based | Milestones on the project linked to invoice triggers | Long projects with defined deliverables | Milestones must be objectively verifiable, not judgement calls |
| Retainer / prepaid hours | Prepaid service product with hours drawn down by timesheets | Ongoing support and advisory | Track consumption against entitlement or you deliver free work |
A common and workable hybrid: fixed price for the defined scope, with a time-and-materials line for approved variations. Configure it as two lines on the same sales order so both post to the same analytic account and the margin view stays whole.
Whatever the model, make change requests a logged object with an effort estimate and an approval status β including the ones you decide to absorb. The absorbed ones are the invisible margin loss, and reporting them monthly as a single number changes behaviour faster than any policy.
Budget, Forecast and Early Warning
Recording cost is necessary but not sufficient. The point is to know early.
- Baseline the budget. Before work starts, the project should carry planned hours by task and a planned cost, summing to the estimate the job was priced on. Without a baseline, βweβre over budgetβ is an assertion.
- Track the two variances separately. Effort variance (hours against planned) and cost variance (value against budget) tell different stories. A project using fewer hours than planned but more expensive resources is a different problem from one simply taking longer.
- Configure early-warning thresholds. The useful alert is not βbudget exceededβ β that is a post-mortem. It is the combination that signals trouble while it is still recoverable, for example cost consumption above 70% with completion below 60%. That is the point at which re-scoping conversations with a client still go well.
- Estimate cost to complete, not just cost to date. A project 50% through its budget is only fine if it is more than 50% complete. Requiring project managers to state remaining effort monthly is a small discipline with a large effect.
- Review at the right cadence. Weekly for short projects, monthly for long ones, and always with the project manager present rather than as a finance exercise.
Planning and Resource Capacity
Odoo Planning allocates people to projects across time, showing who is committed, who is available and where the conflicts are.
The metrics worth running:
- Utilisation rate β billable hours against available hours
- Committed capacity over the next four to eight weeks, which tells sales what can safely be promised
- Over-allocation count β people assigned beyond capacity, a reliable predictor of quality problems and attrition
- Bench time β available hours with no assignment, a direct cost
- Pipeline-weighted demand β probable effort from open opportunities, which tells recruitment what to prepare for
One caution: utilisation targets set too high are self-defeating. A business running everyone at 95% has no capacity for the project that runs long, and something always runs long. Most healthy project businesses target somewhere in the 70β85% range for delivery staff depending on sector, with supervisory roles lower.
Benefits You Can Measure
- Project margin visibility. From annual post-mortem to live figure β the headline outcome.
- Revenue leakage recovered. Businesses moving from ad-hoc to disciplined time and material capture routinely find unbilled work in the first two months.
- Earlier intervention. Threshold alerts move discovery from month four to week three.
- Faster invoicing. Milestone triggers shorten the gap between delivery and invoice, improving cash conversion directly.
- Estimating accuracy. After two or three quarters of actuals, pricing moves from instinct to evidence.
- Reduced absorbed scope. Logged variations fall once the absorbed total is reported monthly.
- Utilisation improvement. Visibility redistributes load rather than increasing it.
- Faster month-end. Costs already carry project attribution, so no manual allocation exercise.
Odoo Project vs Dedicated PM Tools vs Spreadsheets
| Dimension | Spreadsheets | Odoo Project + Timesheets | Dedicated PM (MS Project, Asana, Monday) |
|---|---|---|---|
| Best fit | Under ~10 concurrent projects | Project businesses needing cost and margin | Scheduling and collaboration focus |
| Task and Gantt planning | Manual | Native | Strong to excellent |
| Timesheets with cost rates | Manual | Native | Usually add-on or absent |
| Material and stock cost to project | Manual | Native via inventory | Not available |
| Analytic accounting to the ledger | None | Native | Requires ERP integration |
| Project billing from the same record | Manual | Native | Not available |
| Live project margin | Rebuilt manually | Native | Not available without integration |
| Collaboration and UX polish | None | Functional | Generally superior |
| Licence cost | Zero, high hidden cost | Marginal for Odoo users | Separate subscription |
| Where it strains | Anything at scale | Very large construction scheduling | No cost or financial dimension |
The honest read: dedicated project tools are often nicer to use and stronger on scheduling and collaboration, and heavy construction planning may still want specialist scheduling software. What none of them do is tell you what the project cost, because they have no connection to payroll cost rates, stock issues, vendor bills or the general ledger. For project businesses where margin is the question, running project delivery inside Odoo ERP is the structural answer.
Best Practices for Implementation
- Design the analytic plan before anything else. Project as the primary dimension, plus whatever second dimension you report on, as part of a well-scoped Odoo implementation. This decision is expensive to change later.
- Set cost rates with finance, and document the basis. Ambiguity here undermines confidence in every margin figure the system produces.
- Align estimating structure with project structure. If quotes are built by phase but projects are organised by trade, variance analysis is impossible. Fix the vocabulary first.
- Create templates per work type. Then enforce their use, so cross-project comparison is possible.
- Start timesheets before you start reporting. You need six to eight weeks of clean actuals before margin reports mean anything. Begin time capture during configuration.
- Make materials issue to a project mandatory. Stock leaving the stores without a project attribution is untracked cost, and the habit is hard to correct later.
- Roll out on one project type first. Prove the numbers, then extend. Simultaneous full rollouts in project businesses rarely survive contact with site teams.
- Put the margin dashboard in the management meeting from week one. When decisions run on the systemβs numbers, adoption stops being a change management problem.
- Keep the task hierarchy shallow. Three levels is enough for almost any project. Deeper structures produce beautiful plans nobody maintains.
Common Mistakes That Hide Overruns
- Timesheets without cost rates. You measure effort and learn nothing about money.
- Skipping analytic accounting. The single most common reason project margin reporting never works.
- Excluding non-billable time. Utilisation and capacity planning become impossible.
- No baseline. A plan written after work starts is a description, not a control.
- Materials issued without project attribution. For contracting businesses this can be the largest untracked cost of all.
- Reporting margin only at project close. By then the only available action is regret.
- Letting each project manager invent their own structure. Cross-project analysis dies.
- Over-engineering the work breakdown. A 400-task plan for a six-week job is abandoned by week two.
- Ignoring subcontractor accruals. Costs arriving after project close make profitable projects retroactively unprofitable.
- Treating timesheets as an HR control. If the data is only used to check that people worked, it will be filled in to demonstrate that people worked.
Real Business Example: An Electrical Contracting Firm
Consider an electrical contracting business with 95 employees β 68 site electricians and supervisors, the rest in design, procurement and administration β running roughly 30 concurrent projects ranging from two weeks to nine months.
Before
Odoo handled purchasing, inventory and accounting. Projects were managed on spreadsheets by five project managers, each with their own format. Site hours were recorded on paper timesheets for payroll but were not allocated to jobs. Material was issued to sites against a written requisition; reconciling what went where happened at project close, if at all. Invoicing was by progress claim, prepared when a project manager submitted the paperwork β typically two to five weeks after the milestone. Project profitability was calculated by the finance manager at close, using a flat labour rate and best-guess material allocation. Two projects in the previous financial year had closed at a loss, both discovered after completion. When the managing director asked which types of work were most profitable, the honest answer was that nobody knew.
What Was Implemented
Over roughly twelve weeks the firm implemented Odoo Project, Timesheets and Planning on its existing instance, with a properly designed analytic plan. Each project received an analytic account, with a second analytic dimension for work type β new installation, maintenance contract, remedial, and design-and-build. Four project templates were created. Cost rates were set at fully loaded employee cost by grade rather than individually, a decision taken deliberately to avoid exposing individual salaries through project reports. Site staff moved to mobile daily timesheet entry against tasks, with supervisor approval each Friday. Material issues were configured to require a project, so stock could not leave the stores unattributed. Milestones were linked to progress claim triggers. A threshold alert was configured at 70% cost consumption with completion below 60%.
Adoption Reality
The first eight weeks were difficult, and the sticking point was exactly where expected β site timesheets. Two supervisors argued that electricians would not use phones on site. What changed it was making entry take under a minute, running a two-week parallel period against the paper system so nobody lost pay over a system error, and β decisively β the supervisors seeing the first labour-cost-by-project report, which showed that one long-running maintenance contract was consuming nearly twice the hours assumed in its price.
After Two Quarters
Progress claims moved from two-to-five weeks after milestone to under a week, which produced a material working capital improvement β the outcome the finance director valued most. Two projects were flagged by the threshold alert in their second month; one was re-scoped with the client, and the other had a resourcing change that brought it back close to budget. Material attribution eliminated a persistent gap between stock consumption and project cost that had previously been written off as wastage. The work-type analytic dimension produced the strategic finding: remedial work, which the firm had always treated as a low-priority filler, was running at roughly double the margin of new installation work, which the sales effort had been concentrated on for years. That single insight changed how the firm bid for the following year.
The managing directorβs summary was that they had spent a decade optimising the work they enjoyed rather than the work that paid.
Industry Use Cases
- Electrical, mechanical and building services contracting. Site labour, material attribution and progress claims. The highest-value configuration is mandatory project attribution on stock issues.
- Engineering and design consultancies. Time is the entire cost base, so timesheet discipline and cost rates carry everything. Retainer draw-down tracking matters for ongoing clients.
- IT services and system integration. Mixed fixed-price and time-and-materials engagements, often with blended onshore-offshore teams where effort variance by role reveals margin problems that blended rates hide. See IT services ERP.
- Equipment installation and commissioning. Projects combining manufactured or purchased equipment with site labour, where both must roll into one margin view. See manufacturing solutions.
- Industrial maintenance and shutdown services. Short, intense projects with heavy labour and subcontractor content, where daily cost visibility matters because the whole job may last two weeks.
- Fit-out and interiors. Material-heavy projects with frequent client variations β variation logging is the decisive practice.
- Logistics and infrastructure projects. Multi-site delivery with dispersed teams and equipment. See logistics solutions.
Implementation Tips From the Field
- Trace one project end to end before configuring the rest. Quotation to project to timesheet to material issue to invoice to margin report. Every gap in the design shows up.
- Decide role rates versus individual rates early. It is as much a confidentiality decision as an accounting one.
- Run timesheets in parallel with the existing method for two weeks. Especially where timesheets feed payroll β nobody should risk being paid wrongly because of a new system.
- Make mobile entry genuinely fast. Under sixty seconds for a site worker, or it will not happen.
- Do not migrate in-flight projects. Start new projects in the system and let existing ones finish where they are.
- Accrue subcontractor costs monthly. Otherwise margin looks good until the invoices land.
- Standardise task naming across templates. Cross-project analysis depends on comparable categories, and this is the unglamorous detail that determines whether your analytics are usable.
- Review estimate versus actual quarterly with whoever prices the work. This feedback loop is the whole point of the exercise.
- Plan a health check at 90 days. Techvariaβs Odoo support and maintenance team runs this pass, since real usage always exposes analytic gaps that design cannot anticipate.
Frequently Asked Questions
You need analytic accounting. Projects alone track tasks and time; analytic accounting is what brings timesheet cost, material cost, expenses, vendor bills and revenue together into one comparable account. Without it, you can report on progress but not on margin β and margin is the reason most businesses undertake this project.
From the cost rate on the employee record, multiplied by hours logged, posted to the projectβs analytic account. The accuracy of your margin reporting depends entirely on how that rate is set, so agree the basis with finance β direct salary, fully loaded, or fully loaded plus overhead β and document it.
Yes. Stock issues can be attributed to a projectβs analytic account, and vendor bills can be allocated the same way. Making project attribution mandatory on stock issues is the configuration that matters most for contracting businesses, where material is often the largest untracked cost.
Project manages the work β tasks, stages, deadlines, deliverables. Planning manages the people β who is allocated to what, across time, with capacity visibility. Project-based businesses generally need both: Project to run delivery, Planning to see whether you have the people for what you have committed to.
It depends on three things: whether entry takes under a minute on a phone, whether approval happens quickly, and whether people see the data used for something other than checking on them. Businesses that get all three right typically reach acceptable compliance within eight to ten weeks. Running a short parallel period alongside the existing method removes the fear of pay errors, which is usually the real objection.
Progress and milestone billing are handled natively through milestones linked to invoicing. Retention β where a client withholds a percentage until defects liability expires β is common in construction and needs deliberate configuration through Odoo customization, often with an extension. This is one of the areas where Odooβs out-of-the-box behaviour and construction-sector practice can diverge, so raise it explicitly during scoping if your contracts include it.
Dedicated tools are usually better at scheduling and collaboration. None of them tell you project margin, because they have no link to payroll cost rates, stock, vendor bills or the ledger. If your question is βwhat is the status?β, a PM tool answers it. If your question is βwhat did it cost, and are we making money?β, you need the ERP.
For a project business of 50β150 people with defined work types, typically ten to sixteen weeks, including analytic design, templates, cost rate setup, timesheet rollout, billing configuration and reporting. The variable is not the software β it is how long the business takes to agree its own cost rate basis and project structure.
Conclusion
Project businesses rarely lose money on the jobs they knew were going wrong. They lose it on the jobs that looked fine until the final account. The difference between those two outcomes is instrumentation: a baseline to compare against, hours that carry a cost, materials attributed to the job that consumed them, and a margin figure that updates while there is still time to act.
Odoo Project supplies the delivery structure. Timesheets supply the labour cost. Analytic accounting is the component that ties cost and revenue to the same identifier, and skipping it is the single most common reason these implementations disappoint. Sales and invoicing close the loop on the revenue side.
None of this is technically difficult. What it requires is agreeing a cost rate basis and holding to it, designing the analytic plan before configuration rather than after, making material attribution mandatory, and getting daily timesheet entry to a point where it takes under a minute.
Businesses that do this stop discovering their project margins and start managing them β and usually discover, within two quarters, that the work they assumed was most profitable is not the work that actually is.
Make Project Margin Visible
Techvaria is an official Odoo Silver Partner and a Zoho Premium Partner, delivering ERP, CRM and business process automation for more than 200 organisations since 2016, with teams in Bangalore, Gujarat and Dubai. We work with contracting, engineering, installation and professional services businesses on exactly this scope β analytic plan design, cost rate methodology, project templates, mobile timesheet rollout and adoption, material attribution, progress and milestone billing, and the margin reporting layer that makes it useful to management.
If your projects are reported on progress but not on cost, or you only learn a job lost money after it closed, a structured assessment is the right first step. You can also hire an Odoo functional consultant to work alongside your team.
Book a free Odoo project consultation or contact us with your headcount, project mix and current systems. We will tell you where your cost visibility breaks down and what it takes to close it.
Make Project Margin Visible

Mustufa Rahi is an Odoo Certified Functional Consultant and ERP expert at Techvaria with 15+ years of experience in implementation, automation, and business process optimization, helping organizations scale efficiently.