Overview
Project billing in Odoo 19 connects the Project module with Sales and Accounting to invoice customers for project work. You can bill by time and materials, fixed milestones, or a combination. The sale_project and sale_timesheet modules bridge these workflows.
Prerequisites
- Odoo 19 with Project, Sales, and Timesheets modules installed
- Products configured as services for billing
- Project Manager access
Step 1: Configure Service Products
Create products for billing project work. Navigate to Sales > Products and create service-type products:
Time-Based Service
- Product Type — Service
- Invoicing Policy — Timesheets (invoice based on logged hours)
- Create on Order — Task or Project, which auto-creates when the SO is confirmed
- Unit of Measure — Hours
- Sales Price — Your hourly rate
Fixed-Price Service
- Product Type — Service
- Invoicing Policy — Ordered Quantities (invoice at confirmation or delivery)
- Create on Order — Project with milestones
Step 2: Create a Sales Order with Project
- Create a sales order for the customer
- Add a service product line
- Confirm the order — Odoo automatically creates the project and/or tasks
- The project links back to the sales order for billing tracking
Step 3: Configure Milestone Billing
For fixed-price projects with milestone-based invoicing:
- Navigate to Project > Configuration > Settings and enable Milestones
- On the service product, set invoicing to Milestones
- On the project, create milestones with target dates
- As milestones are completed, the corresponding portion becomes invoiceable
- Create invoices from the sales order as milestones are reached
Step 4: Configure Time-Based Billing
For time and materials billing:
- Set the service product's invoicing policy to Timesheets
- Team members log time on project tasks via Timesheets
- Each timesheet entry records hours against the sales order line
- Invoice from the sales order — Odoo invoices the logged hours multiplied by the agreed rate
Step 5: Track Profitability
Monitor project profitability through:
- Project Updates — Add status updates with financial summaries
- Analytic Accounting — Each project has an analytic account that tracks all revenue and costs
- Compare invoiced amounts against employee costs and expenses
Step 6: Handle Project Expenses
With the sale_expense module, employees can link project expenses to sales orders:
- Expenses are tracked against the project's analytic account
- Re-invoiceable expenses appear on the customer's invoice
- Non-billable expenses reduce project margin
Step 7: Invoice from Sales Order
When ready to bill:
- Open the linked sales order
- Click Create Invoice
- Choose invoice type: Regular (for delivered qty), Down Payment (advance), or Final Invoice
- Review and confirm the invoice
Best Practices
- Use milestones for fixed-price projects to bill progressively
- Set up a "Not Billable" project for internal work that should not be invoiced
- Review unbilled timesheet hours weekly to keep invoicing current
- Use analytic reports for monthly project profitability reviews
- Communicate billing structure clearly in the quotation template