In many projects, clients prefer to pay in stages as work progresses rather than paying everything upfront. Milestone-based billing helps businesses get paid after completing key phases of a project. This improves cash flow and keeps the process transparent.
Odoo 18 makes it easy to invoice customers based on project milestones. Once a milestone is reached, an invoice can be created directly from the sales order. Let’s see how to set this up in Odoo 18.
Start by activating the Milestones feature from the Project module. To do so, navigate to Project Module > Configuration > Settings.

Under the Tasks Management section, the Milestones feature must be enabled. After enabling the feature, click on the Save button to save the changes made.

Once the Milestone feature is enabled, milestones can be added to the project, allowing the project to be billed based on these milestones. Once the Milestones feature is enabled, navigate to the Project dashboard and click on the New button to create a project.

In the project settings, enable the Billable option to allow milestone-based invoicing and click on the Create Project button to create a new project.

Now, a service product has to be created. To do so, navigate to the Sales module > Products > Products, and click on the New button to create a new product.

In the product form, configure the product type as Service with Create on Order set as Task. This will make a new field appear, where a project can be selected. When a sales order with this product is confirmed, a task will be automatically created under the selected project. Select the created project over there and also set the Invoicing policy to Based on Milestones.

To create a sales order, navigate to Orders > Quotations and click on the New button.

Enter the customer details and other required fields, then add the previously created product. Once the order is confirmed, a task will be automatically generated under the project specified in the Project field of the product form, as the Create on Order option was set to Task.
Upon confirmation, three smart tabs appear: Project, Task, and Milestones.

Clicking on the Milestones tab opens a new page where milestones for the project can be added by clicking on the new button.

Once the milestones are added there are options to set the deadline to achieve this milestone and also once the milestone has been reached the reached box can be checked so that the customers can be billed based on the milestones achieved.

A Quantity (%) can be defined for each milestone, indicating the progress of the task and the portion of the project that can be billed upon that milestone's completion. So here click on New to add a new milestone and for each milestone set the quantity(%) as 50.

Now navigate back to the sale order and click on the Task smart tab to view the detailed view of the task. Also in the Milestones tab, two milestones have been defined and can be viewed over there.

In the task's detailed view, the Milestone field displays the already defined milestones for the project. The desired milestone can be selected to associate with the task. Also the customer field has been filled by the customer’s name for whom the sale order was created.

Once the task is completed, the milestone is considered achieved, and the Achieved checkbox can be selected on the milestones page. For that navigate back to the sale order and click on the Milestones smart tab then click on the check box for the milestone achieved and Save.

Click on the View Sale Order to go back to the sale order.

Here Delivered has been given as 0.5 since the Quantity (%) for that Milestone has been provided as 50%, and when that milestone is reached 50% of the total quantity for the project has been delivered and that can now be invoiced. Click on the Create Invoice button and select from Regular Invoice, Down Payment (percentage), Down Payment (Fixed amount), and then click on Create Draft.

A draft invoice is created for the delivered quantity of the project based on the Milestone achieved.

Click on Confirm to confirm the invoice and then the payment can be registered.
Milestone billing offers a structured approach to invoicing, ensuring that payments are directly linked to the progress of a project. This method not only helps in reducing financial risks but also improves cash flow by allowing service providers to receive payments as key project phases are completed. By aligning payments with specific deliverables or milestones, businesses can better manage their revenue streams while maintaining client satisfaction. This approach also fosters clear communication and transparency, as both parties have a mutual understanding of the payment schedule and progress expectations, leading to smoother project execution and stronger client relationships.
To read more about How to Set Milestones With Odoo 17 Project Module, refer to our blog How to Set Milestones With Odoo 17 Project Module.