How to Set Up Milestone Billing in Odoo 19: Complete Beginner Guide
In many service-based businesses, clients pay in stages rather than settling the full amount at the beginning of a project. This approach, known as milestone-based billing, allows businesses to receive payments as different phases of the project are completed. It not only improves cash flow but also builds trust with customers, as payments are directly linked to measurable progress. With Odoo 19, managing milestone-based billing becomes straightforward, as the system allows you to define milestones, track their completion, and generate invoices accordingly. This complete step by step beginner guide walks through everything from project creation and milestone configuration to sales order setup and automatic invoice generation.
What You'll Learn:
- How to create a project with the Billable option enabled
- How to enable Milestones in project settings
- How to create a Service product with "Create on Order" as Task and "Based on Milestones" invoicing policy
- How to create a sales order linked to the project
- How to define milestones with Quantity (%) for staged billing
- How to mark milestones as achieved and generate invoices automatically
- How delivered quantities update based on milestone completion
What Is Milestone-Based Billing in Odoo 19?
Milestone-based billing is a payment model where clients are invoiced at specific stages of a project rather than upfront for the full amount. Odoo 19 provides a fully integrated system that links project milestones directly to sales orders and invoicing. When a milestone is marked as achieved, Odoo automatically updates the delivered quantity on the sales order based on the predefined percentage, and an invoice can be generated for exactly that portion. This creates a clear agreement between the business and the client, as both parties understand when payments are expected and what work must be completed before invoicing. The approach reduces financial risk, improves cash flow, and builds client trust through transparent progress-based billing.
Improved Cash Flow
Receive payments incrementally as project phases complete rather than waiting until the end. This reduces financial risk and ensures steady revenue throughout the project lifecycle.
Client Trust & Transparency
Payments are directly linked to measurable progress. Clients only pay for completed milestones, building confidence and ensuring both parties agree on when payments are triggered.
Automated Invoicing
Odoo automatically updates delivered quantities based on milestone percentages and generates draft invoices with a single click. No manual calculations or separate invoicing workflows required.
Milestone Quantity (%) Control
Each milestone has a Quantity (%) field representing the billable portion of the total project value. For example, two milestones at 50% each allow you to invoice half the project value per milestone completion.
Step by Step Guide: Milestone-Based Billing in Odoo 19
Step 1: Create a Project with the Billable Option
To use milestone-based billing in Odoo 19, the project must first be configured properly. Open an existing project or select the New option to start one by heading to the Project dashboard.
Navigate to the Project Dashboard
Go to the Project module from the Odoo 19 dashboard. Click New to create a new project or open an existing one. While creating the project, enable the Billable option so that invoicing can be performed for the project. After configuring the required options, click Create Project to save.
Enable Milestones in Project Settings
Go to the Settings of the project. Find the Milestones option and enable it. This allows milestones to be added and tracked within that specific project. The project can also be created using project templates, allowing predefined stages, tasks, and configurations to be reused.
Step 2: Create a Service Product for Milestone Billing
Once the project is ready, the next step is to create a service product that will be used in the sales process. This product must be configured with the correct invoicing policy and linked to the project.
Go to Sales > Products and Create New
Navigate to the Sales module and choose Products from the Products menu. Click the New button to create a new product form.
Select Service Type and Configure
Select Service as the product type. Set Create on Order to Task, which makes a new field appear where you can choose the project. Select the project you created so that tasks will be automatically generated under that project when a sales order is confirmed. Crucially, set the Invoicing Policy to Based on Milestones, as this ensures that invoices are generated only when milestones are achieved.
Step 3: Create a Sales Order and Link It to the Project
With the product configured, you can proceed to create a sales order that will be linked to the project and its milestones.
Create a New Quotation
Go to Orders > Quotations and click New. Enter the customer details and fill in the required information, then add the service product that was created earlier.
Confirm the Order and Review Smart Tabs
Confirm the quotation. Because the Create on Order option was set to Task, Odoo automatically creates a task under the project selected in the product configuration. After confirming the order, you will notice the appearance of smart tabs such as Project, Task, and Milestones, which help you quickly navigate between related records.
Step 4: Define Milestones with Quantity Percentages
To define milestones for the project, click on the Milestones smart tab from the sales order. Clicking New will bring you to a new page where you can add multiple milestones.
Add Milestone Name and Deadline
For each milestone, enter a name and set a deadline. There is also an option to mark whether a milestone has been achieved using the checkbox provided.
Set the Quantity (%) for Billing
The Quantity (%) field represents the portion of the total project value that can be billed when that milestone is completed. For example, if you create two milestones and assign 50% to each, then completing one milestone allows you to invoice half of the total project value. The percentages across all milestones should add up to 100%.
Step 5: Mark Milestones as Achieved
As the project progresses and work is completed, the corresponding milestone can be marked as achieved. This triggers the update of delivered quantities on the sales order.
Open the Milestone and Mark Complete
Go back to the sales order, open the Milestones smart tab, select the checkbox for the milestone that has been completed, then click the Save button. Once a milestone is marked as achieved, Odoo updates the delivered quantity in the sales order based on the Quantity (%) defined for that milestone.
Verify Delivered Quantity Update
If a milestone is set to 50%, achieving it will reflect 0.5 as the delivered quantity on the sales order, indicating that half of the project is now ready to be invoiced. This automatic update eliminates manual tracking and ensures accuracy.
Step 6: Generate Invoice Based on Completed Milestones
After marking the milestone as achieved, you can proceed to generate the invoice for the delivered portion of the project.
Click Create Invoice on Sales Order
Click the Create Invoice button from the sales order. Options like Regular Invoice, Down Payment (%), and Down Payment (fixed amount) will be shown. Select the necessary option.
Confirm and Register Payment
Click Create Draft after selecting the necessary option. Odoo will generate a draft invoice based on the delivered quantity, which corresponds to the completed milestone. After reviewing the invoice details, click Confirm to finalize it, and then proceed to register the payment.
Understanding the Milestone Quantity (%) System
The Quantity (%) field on each milestone is the core mechanism that links milestone completion to invoice amounts. Here is how different milestone configurations translate to delivered quantities and invoice values on a $10,000 project:
| Milestone | Quantity (%) | Delivered Qty | Invoice Amount |
|---|---|---|---|
| Planning & Requirements | 25% | 0.25 | $2,500 |
| Design Phase | 25% | 0.25 | $2,500 |
| Development & Testing | 30% | 0.30 | $3,000 |
| Deployment & Handover | 20% | 0.20 | $2,000 |
Milestone Smart Tabs
After confirming a sales order with Based on Milestones invoicing, the sales order form displays smart tabs for Project, Task, and Milestones. The Customer field on the task is automatically populated based on the sales order, ensuring all records remain properly connected throughout the billing workflow.
Frequently Asked Questions
What is the difference between milestone-based billing and fixed-price billing in Odoo 19?
Milestone-based billing invoices clients incrementally as each project phase is completed, using Quantity (%) fields. Fixed-price billing invoices the full project amount regardless of progress stages. Milestone billing is ideal for longer projects with clear phases.
How does Odoo 19 calculate the invoice amount for a completed milestone?
When a milestone is marked as achieved, Odoo updates the Delivered Quantity on the sales order to match the milestone's Quantity (%) value (e.g., 0.50 for 50%). The invoice amount is calculated as Delivered Quantity multiplied by the product's unit price.
Do I need to create milestones manually for each project, or can I use templates?
Milestones are defined per project. However, Odoo 19 supports project templates that can include predefined stages and task configurations. Milestones themselves need to be set up for each project based on the agreed payment schedule with the client.
Can I use milestone billing with existing projects that already have tasks?
Yes. Open the project settings and enable the Milestones option. Then link a service product with Based on Milestones invoicing policy through a sales order. Existing tasks remain linked to the project and milestones can be added at any stage.
What happens if I mark multiple milestones as achieved before generating an invoice?
The Delivered Quantity on the sales order accumulates the sum of all completed milestone percentages. For example, completing two 25% milestones updates the delivered quantity to 0.50. Generating an invoice then bills for 50% of the total project value in a single invoice.
Need Help with Odoo 19 Project Billing?
Our Odoo experts can help you configure milestone-based billing, set up project templates, and build a complete project management and invoicing workflow tailored to your service business.
About the author
Head of Odoo Practice
Leads Braincuber's Odoo implementations across the US, India, and EU. Shipped 50+ Odoo deployments. Specializes in NetSuite and SAP Business One migrations.
