Service Contracts and Renewals in Odoo#
Service contracts - maintenance agreements, support contracts, software licenses - require ongoing tracking, timely renewal invoicing, and renewal rate reporting. Odoo handles this through the Subscriptions or recurring Sales modules.
Option 1 - Odoo Subscriptions Module#
For true subscription-based contracts:
Apps → Subscriptions → install.
Creates a subscription record with:
- Recurring Plan: monthly, annual
- Renewal Date: auto-calculated from start date + plan period
- MRR: monthly recurring revenue tracking
When the renewal date approaches, Odoo generates the renewal invoice automatically.
Option 2 - Recurring Sales Orders (Without Subscriptions)#
For simpler contract tracking without the full subscriptions module:
Sales → Configuration → Settings → enable Recurring Revenue.
On a sale order:
- Recurring: Yes
- Recurrence: Annual (or monthly)
- Start Date: contract start
- Next Renewal: auto-calculated
Recurring orders appear in the recurring revenue pipeline view.
Renewal Workflow#
90 days before renewal:
- An activity reminder is auto-created for the salesperson
- Salesperson contacts the customer to confirm renewal, discuss changes, or upsell
- If renewing: confirm the next period's sale order or subscription
- If not renewing: mark as lost with reason "contract not renewed"
Renewal Rate Reporting#
Subscriptions → Reporting → MRR Analysis (or Sales Recurring Revenue report):
- Renewal Rate = (Renewed contracts / Expiring contracts) × 100
- Track month-by-month renewal rate to spot churn trends
- Group by salesperson, product, or customer segment
Contract Value Tracking#
Each contract/subscription tracks:
- Contract Value (ACV): annual contract value
- MRR: monthly equivalent
- Remaining Value: months remaining × MRR
Use this to prioritize renewal effort on high-value contracts at risk.
Prorated Invoicing on Mid-Term Changes#
When a customer adds services mid-contract:
- Edit the contract/subscription → add the new product
- Odoo calculates the prorated charge from today to the contract anniversary
- A prorated invoice is generated immediately
- The full new amount is included in the next renewal invoice
Integration with CRM#
Link service contracts to CRM opportunities for renewal:
- Contract expiry triggers a new CRM opportunity: "Renewal - [Customer] - [Contract]"
- Assign to the account manager
- Track the renewal opportunity through the normal pipeline
- Won = contract renewed; Lost = churned

