Project Billing from Timesheets in Odoo#
Professional services firms bill clients based on hours worked, project milestones, or fixed prices. Odoo connects timesheets to invoices - eliminating manual billing preparation and ensuring every billable hour is captured.
Prerequisites#
Apps → Project and Timesheets → install.
Sale Order Billing Methods#
When creating a sale order line for a service product, choose the billing method:
- Fixed Price: invoice the full amount at project start or milestone
- Based on Timesheets: invoice based on actual hours logged
- Based on Milestones: invoice when a milestone is reached
Time-and-Materials Billing Setup#
Product → General tab:
- Product Type: Service
- Invoicing Policy: Timesheets
Sale Order:
- Product: Consulting Services
- Price: $150/hour
- Quantity: estimate (e.g., 40 hours)
When confirmed, a project task is created automatically. Employees log time on the task.
Logging Timesheets#
Timesheets → My Timesheets → New:
- Date: 2027-10-14
- Project: Customer Project
- Task: Requirements Analysis
- Hours: 3.5
- Description: Interviewed 5 stakeholders, documented requirements
Or from the task itself:
Project → [Task] → Timesheets tab → Add a line.
Generating an Invoice from Timesheets#
Sale Order → Create Invoice:
- Invoice what: Timesheets (unbilled hours only)
- Odoo calculates: hours logged since last invoice × hourly rate = amount
The invoice includes a detail line per timesheet entry (or summarized, depending on configuration).
Fixed Price Billing with Timesheet Tracking#
Some clients want fixed price but you want to track hours for profitability:
Sale Order billing: Fixed Price (invoices 100% upfront or at milestones)
Project → Profitability tab: tracks hours logged vs. budgeted
At project close: actual hours × internal cost rate = cost of delivery → compare to fixed fee → margin analysis.
Milestone Billing#
Sale Order → Milestones:
- Milestone 1: Requirements sign-off → bill 25% ($3,750)
- Milestone 2: Development complete → bill 50% ($7,500)
- Milestone 3: Go-live → bill 25% ($3,750)
When a milestone is marked complete:
Sale Order → Create Invoice → Milestone:
- Select the completed milestone → invoice for that amount
Reporting on Project Profitability#
Project → Project → [Project] → Profitability:
- Revenue billed vs. budgeted
- Hours logged vs. estimated
- Cost of hours (internal rate) vs. revenue (billable rate)
- Gross margin %: (Revenue − Cost) / Revenue

