Skip to content

How to Set Up Project Billing in Odoo 19

DeployMonkey Team · March 24, 2026 8 min read

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

  1. Create a sales order for the customer
  2. Add a service product line
  3. Confirm the order — Odoo automatically creates the project and/or tasks
  4. The project links back to the sales order for billing tracking

Step 3: Configure Milestone Billing

For fixed-price projects with milestone-based invoicing:

  1. Navigate to Project > Configuration > Settings and enable Milestones
  2. On the service product, set invoicing to Milestones
  3. On the project, create milestones with target dates
  4. As milestones are completed, the corresponding portion becomes invoiceable
  5. Create invoices from the sales order as milestones are reached

Step 4: Configure Time-Based Billing

For time and materials billing:

  1. Set the service product's invoicing policy to Timesheets
  2. Team members log time on project tasks via Timesheets
  3. Each timesheet entry records hours against the sales order line
  4. 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:

  1. Open the linked sales order
  2. Click Create Invoice
  3. Choose invoice type: Regular (for delivered qty), Down Payment (advance), or Final Invoice
  4. 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