Odoo 20 for Professional Services: Timesheets, Billing and Margins
Odoo for professional services in Odoo 20: timesheets, time and materials billing, employee rates, milestone invoicing and the new project margin reports.
Consulting, legal, accounting, engineering and agency firms sell time, so the system must follow every hour from task to invoice. Our Odoo implementation services set up that chain for firms that bill by the hour, by milestone or by retainer.
This guide is for partners, finance leads and delivery heads who run billable projects. To price an Odoo project itself, read our guide on fixed-fee vs time and materials for Odoo projects instead.
What does Odoo for professional services cover?
Odoo for professional services covers the full chain from won deal to paid invoice: CRM, Sales, Project, Timesheets, Planning, Accounting and Expenses on one database. Each app owns one step, and the links between them carry the hours and the money.
| Step | Odoo app | What it does for a services firm |
|---|---|---|
| Win the work | CRM | Track opportunities; in Odoo 20, create a project straight from an opportunity |
| Agree the scope | Sales | Quote service products with an invoicing policy and rate |
| Plan the team | Planning | Book people on projects and, in Odoo 20, on specific tasks |
| Deliver | Project | Tasks, milestones, client portal and Gantt view |
| Record time | Timesheets | Billable and non-billable hours per task and employee |
| Bill and report | Accounting | Invoices, analytic accounts and project margins |
Odoo project management sits in the middle. A confirmed sales order can create the project and its tasks for you, so time logged later lands on the right order line.
How do Odoo timesheets work in Odoo 20?
Odoo timesheets record who worked how long on which task, and each billable entry links to a sales order item so it can be invoiced. Users must be set up as employees to log time, and each project must have timesheets turned on.
Per the Odoo Timesheets documentation, access has four levels: none, own timesheets, all timesheets (view, edit and validate), and administrator.
Time can be logged in the grid, on tasks, or on Helpdesk tickets.
Odoo 20 adds features that cut missed hours. Our Odoo 20 Timesheets release notes cover all five changes:
- Timer from anywhere: a top-bar timer lets staff log time from Sales, Helpdesk or Discuss without opening Timesheets.
- Timesheet assistant: suggestions built from ActivityWatch, a local activity tracker; raw activity stays on the device.
- Sharing rules: assistant rules can apply to everyone, chosen departments or only their author.
- Side activities: quick checks of chat or email do not split the task you were working on.
- Time thresholds: an activity appears as a suggestion only after a set duration.
Odoo also supports billable time targets per employee. Each user sees logged billable time against a monthly target, in red below target and green once it is met, with an optional leaderboard.
How does Odoo time and materials billing work?
Odoo time and materials billing invoices the hours logged against a service product set to "Based on Timesheets", plus any expenses you re-invoice. The delivered quantity on the sales order rises as people log time, and you invoice what was delivered.
Odoo's time and materials guide sets it up in five steps:
- Install Project and Accounting, and turn on Analytic Accounting.
- Turn on Timesheets in the Project settings.
- Create a service product with the invoicing policy "Based on Timesheets".
- Set "Create on Order" to Project and Task, so the sales order builds the project.
- Confirm the order, log time on the task, then click Create Invoice on the order.
Expenses work the same way. An expense with "Customer to Reinvoice" set to the order flows onto the next invoice, as long as the order holds a service billed on timesheets, milestones or delivered quantities.
Odoo 20 also adds a Services and Materials option in Sales. It lists the re-invoiceable costs on each order (expenses, vendor bill lines and timesheets), and you re-invoice each at a set amount or at cost.
Task rate, project rate or employee rate: which should you use?
Use employee rate when the same service bills at different prices by seniority, project rate for one hourly price on a project, and task rate when tasks map to different services. Odoo works out the pricing type from how you link the project to sales order items.
| Pricing type | How it bills | Best for |
|---|---|---|
| Task rate | Each task links to its own sales order item | Different services for different clients |
| Project rate | One sales order item for all time on the project | One hourly price, whoever does the work |
| Employee rate | Each employee maps to a sales order item | Senior and junior consultants on the same work |
This is the most common gap we see. On the Odoo forum, a consulting firm asked how senior and junior staff can bill different rates on one task, and the thread never mentions employee rate.
Odoo's own field help in the Odoo 20 source says the employee rate "is preferable if your employees deliver the same service at a different rate." Map each consultant to a line on the order, for example senior at $150 an hour and junior at $90 (illustrative rates).
How does Odoo milestone invoicing work?
Odoo milestone invoicing bills a set share of the order when a project milestone is marked as reached. It suits phased work such as a discovery phase, a design phase and a go-live.
Per Odoo's milestone invoicing guide, you create a service product with the policy "Based on Milestones", sell it, then set a Delivered % on each milestone.
Reaching a milestone updates the order; it does not create the invoice by itself.
Project milestones can mark themselves as reached once all linked tasks are done or cancelled. The Gantt view shows each milestone in red if its deadline passes before it is reached.
One catch: project templates can hold milestones, but Odoo's docs say the Quantity (%) must be updated by hand on each new project. Check it at kickoff, or your first invoice will be wrong.
Which Odoo invoicing policy fits each engagement type?

Match the invoicing policy to how the client buys: timesheets for open scope, milestones for phased scope, and ordered quantities for prepaid packs and retainers. Many firms mix two or three policies on one sales order.
| Engagement | Odoo setup | Invoice trigger |
|---|---|---|
| Open-scope advisory | Service based on timesheets | Hours logged and invoiced each period |
| Phased project | Service based on milestones | Milestone marked as reached |
| Prepaid hours pack | Service on ordered quantities | Order confirmed; overages billed later |
| Monthly retainer | Subscriptions linked to the project | Each billing period |
| Travel and costs | Expenses or Services and Materials | Re-invoiced at cost or a set amount |
| Wind-down | Close Invoicing on the order (Odoo 20) | Nothing more proposed for invoicing |
Odoo 20 adds two useful options. "Invoice Overages" bills extra hours on a prepaid service in the same invoice, and "Close Invoicing" marks an order as fully invoiced, per our Odoo 20 Sales release notes.
How you price the engagement is a separate decision. Our fixed-fee vs time and materials guide, linked above, covers that trade-off; this guide covers how Odoo bills each model.
How do you track Odoo project profitability in Odoo 20?
In Odoo 20, project profitability lives in the Margins and Forecast Margins reports under Project reporting, because the profitability panel on the project dashboard was removed. Custom panels built for Odoo 19 will not load after the upgrade.
The numbers come from the project's analytic account. Revenue comes from timesheets, materials, invoices, subscriptions, down payments and re-invoiced expenses. Costs come from timesheets at each employee's cost, purchases, expenses, vendor bills and other costs.
Get three things right, or the margin report will mislead you:
- Employee cost: set an hourly cost on every employee, or timesheet cost shows as zero.
- Analytic links: every bill, expense and purchase for a project must carry its analytic account.
- Non-billable time: log internal and rework hours too, so cost is complete even when revenue is not.
An illustrative example: 100 hours sold at $120 is $12,000 of revenue. At an average cost of $55 an hour, timesheet cost is $5,500 and the margin before other costs is $6,500. See our Odoo 20 Project release notes for the new reports.
What changed in Odoo 20 for services firms?
Odoo 20 brings a faster time capture, better client portals, CRM-to-project handoff and new margin reports. The table lists the changes that matter most to billable teams.
| Odoo 20 change | Why it matters |
|---|---|
| Timesheet timer in the top bar | Fewer missed hours from busy staff |
| Projects from opportunities | Start delivery from the won deal |
| Collaborators separated from followers | Share a project with a client without spamming them |
| Tasks assignable to portal users | Clients or subcontractors own tasks in the portal |
| Shifts linked to tasks in Planning | Plan the exact task, not just the project |
| Profitability panel replaced by reports | Rebuild any custom margin views |
Several of these sit in Community, including projects from opportunities and portal assignment. The timer, the assistant and task-linked shifts are Enterprise only.
Where do Odoo timesheet invoices go wrong?
Most timesheet invoicing errors come from entries with no sales order item, policies changed mid-project, or unapproved hours being billed. Each one has a simple fix.
- Missing sales order item: on the Odoo forum, a user found that timesheets did not match the sales order; entries on manually created projects had no sales order item.
- Policy changes: changing a product's invoicing policy after it is on a project does not update past links.
- Wrong rate: one sales order line has one price, so mixed seniority needs employee rate mapping.
- Unchecked hours: validate timesheets each week before you invoice, so clients see only reviewed time.
- Templates: milestone percentages copied from a template need a manual check.
Before go-live, add the Sales Order Item column to the timesheet list and filter for blanks. Running that check weekly catches billable hours that never reach an invoice.
Odoo for professional services by industry
Each services sector bills differently, so the Odoo setup changes with it. The table shows where firms usually start.
| Industry | Pain or cost driver | Odoo approach | How iVentureTeam helps |
|---|---|---|---|
| Management consulting | Seniority-based rates | Employee rate on billable projects | Build rate cards per client |
| IT services and software | Retainers plus change requests | Subscriptions plus timesheet services | Set up overage billing |
| Engineering and architecture | Phased fees | Milestone invoicing with Gantt deadlines | Design milestone templates |
| Marketing agencies | Many small client jobs | Task rate plus re-invoiced costs | Configure media cost re-billing |
| Accounting and legal | Unbilled time leakage | Timer, assistant and weekly validation | Set billable targets and reports |
| Healthcare services | Rates by day type | Custom rules on timesheet lines | Extend timesheet billing logic |
Software and SaaS firms that mix subscriptions with services can also see our page on Odoo ERP for SaaS and technology companies.
What does Odoo cost for a professional services firm?
Plan for Odoo licences per user plus a one-time implementation, and remember that staff who log billable hours usually need full users. Most services firms run on Standard unless they need Studio, multi-company or custom modules.
On the Odoo pricing page, the US price billed yearly is US$31.10 per user a month for Standard and US$61.00 for Custom. In India it is Rs 725 and Rs 1,350, with first-year discounts for new users.
The Light User at US$8.90 helps less here. Our Odoo 20 Light User guide explains that timesheets are not on the Light list, so only support staff who never log billable time can use it.
Our published Odoo implementation cost ranges are $3k to $9k for small firms (4 to 8 weeks), $9k to $27k for mid-size (8 to 14 weeks) and $27k to $150k+ for large projects (12 to 24 weeks).
Data migration adds $1.2k to $9k depending on the source system and years of history. For a first number, use our Odoo project estimate tool.
How iVentureTeam helps professional services firms on Odoo

iVentureTeam sets up Odoo so every billable hour reaches an invoice and every project shows a real margin. We have delivered 150+ ERP projects across 35+ countries with 40+ Odoo specialists over 13+ years.
- Billing design: rate cards, invoicing policies and milestone templates mapped to how your clients buy.
- Timesheet rollout: timer, assistant rules, billable targets and a weekly validation routine.
- Margin reporting: employee costs, analytic accounts and Odoo 20 margin reports your partners trust.
- Custom billing rules: day-type rates, client caps or approval steps through our Odoo customization services.
- Data migration: clients, open projects and timesheet history moved from your current tool.
Odoo timesheet billing case study: Enabl Health
An Australian health-tech firm moved from manual time tracking and rate lookups to invoices built straight from timesheets. The project took 10 weeks of delivery plus ongoing support.
Enabl Health had to bill different rates for weekdays, weekends and holidays. Time was tracked with manual start and stop times, and the doctor and patient portals did not work well on phones.
We cleaned five data sets, then extended Odoo Timesheets, Payroll and Portal. Timesheets are now classified by day type, which drives the billing rate on each entry, and start and stop timers calculate time from timestamps.
Invoices now come from timesheet rates and day types without manual lookups, and portal users edit timesheets and upload documents on mobile. Read the Enabl Health timesheet-to-invoice case study.
The bottom line on Odoo for professional services
Odoo fits professional services firms that want timesheets, billing and margins in one system, as long as rates, policies and costs are set up with care. Odoo 20 makes time capture easier and moves margins into new reports.
Start with how your clients buy, then pick the invoicing policy and pricing type for each. Set employee costs and analytic links before go-live, and check unlinked timesheets every week.
Ready to turn billable hours into on-time invoices?

Get an Odoo setup designed around your rate cards and billing models. Plan your Odoo timesheet and billing setup with us, call +91-90235-15208, or email business@iventureteam.com.
Frequently Asked Questions
Is Odoo good for professional services firms?
+
Yes for most small and mid-size firms. Odoo links CRM, sales, projects, timesheets and accounting in one database, so hours flow to invoices and margins. Very large firms with complex resource planning should test Planning in depth first.
Can Odoo bill different hourly rates per employee?
+
Yes. On a billable project, the employee rate pricing type maps each employee to a sales order item with its own price. Senior and junior consultants can then bill different rates on the same task.
How do I invoice timesheets in Odoo?
+
Sell a service product with the invoicing policy Based on Timesheets. Staff log time on the linked task, the delivered quantity rises on the sales order, and you click Create Invoice on the order.
Does Odoo support milestone billing?
+
Yes. Sell a service product set to Based on Milestones, give each milestone a Delivered %, and mark it as reached. Odoo updates the sales order, and you then create the invoice for that share.
Where is the project profitability report in Odoo 20?
+
Odoo 20 removed the profitability panel from the project dashboard. Use the Margins and Forecast Margins reports under Project reporting instead, and rebuild any custom panels made for Odoo 19.
Can Light Users log timesheets in Odoo 20?
+
No. Timesheets are not on Odoo's Light User list, so staff who log billable hours usually need a full user. Light Users suit staff who only use self-service HR, such as time off and expenses.
Is Odoo Timesheets available in Community?
+
Community can log time on project tasks. The Timesheets app features in the Odoo 20 release notes, such as the top-bar timer and the timesheet assistant, are Enterprise only.
How long does an Odoo setup take for a services firm?
+
Our published ranges are 4 to 8 weeks for small firms, 8 to 14 weeks for mid-size and 12 to 24 weeks for large projects. Custom billing rules and timesheet history migration add time.
Ready to put this into action?
Talk to iVentureTeam about Odoo, AI automation, or custom development — get a free, no-obligation consultation.
Free Odoo tools
All tools- Odoo Health CheckVersion, modules, findings and upgrade cost
- Odoo App SelectorWhich apps you need, by industry
- Odoo Project EstimateIndicative cost and timeline in minutes
- Odoo Implementation Cost CalculatorImplementation cost and timeline, in minutes
- Odoo Migration Cost CalculatorVersion jump or legacy ERP, priced in minutes
Continue reading
Odoo Industry Packages Explained: Install, Customize and Roll Back
What Odoo industry packages install, which plan they need, and how to install, customize and roll back on Odoo Online, Odoo.sh and on-premise safely.
Odoo UAT for Odoo 19 and 20: Scenarios, Sign-Off and Defect Triage
Odoo UAT guide for Odoo 19 and 20: scenario templates, where to test, defect triage by type and severity, sign-off criteria and a final go-live checklist.
Odoo Accounting for CFOs in the GCC: VAT, E-Invoicing and Controls
Odoo accounting for CFOs in the GCC: UAE and Saudi VAT, ZATCA and UAE e-invoicing, AED and SAR multi-currency, lock dates and hashed audit controls.
