Required Datapoints
- Number of Expiring Contracts
- Number of Renewed Contracts
- Timeframe: Typically monthly, quarterly, or annual
- Renewal Type: Auto-renewal vs. active negotiation (optional)
Contract Renewal Rate measures the percentage of expiring customer contracts that are renewed within a given period. It helps track customer retention, revenue continuity, and CS performance.
Contract Renewal Rate tracks the percentage of customers who renew their contracts at the end of a term, offering a direct view into customer satisfaction, perceived product value, and retention health.
The relevance and interpretation of this metric shift depending on the model or product:
A high renewal rate is a strong signal of product value and success coverage. A low or declining rate indicates potential churn risks, pricing gaps, or competitive threats.
Segment by plan, CSM, or vertical to uncover renewal patterns and optimize intervention plays.
Contract Renewal Rate informs:
These are the main factors that directly impact the metric. Understanding these lets you know what levers you can pull to improve the outcome
Actionable ideas to optimize this KPI, from fast, low-effort wins to strategic initiatives that drive measurable impact.
Activities commonly tied to improving or operationalizing this KPI.
| Activity | Description |
|---|---|
| Renewal Planning | Renewal Planning involves proactively evaluating customer accounts before contract expiration to identify potential risks and opportunities. It gives teams a clear plan for where to focus, how to sequence work, and what to measure. Relevant KPIs include Contract Renewal Rate. |
| Forecasting | Forecasting involves systematically estimating future sales, revenue, or key performance indicators by leveraging historical data, current market trends, and advanced analytics. It turns signals into decisions, interventions, and measurable follow-up. Relevant KPIs include Average Deal Size and Contract Renewal Rate. |
| Product Utilization Monitoring | Product Utilization Monitoring involves systematically tracking, analyzing, and interpreting how customers interact with a product after adoption. It turns signals into decisions, interventions, and measurable follow-up. Relevant KPIs include Contract Renewal Rate. |
Q2 Data:
This KPI is associated with the following stages in the AAARRR (Pirate Metrics) funnel:
This KPI is classified as a lagging Indicator. It reflects the results of past actions or behaviors and is used to validate performance or assess the impact of previous strategies.
This role is directly accountable for the KPI and is expected to drive progress and decisions around it.
These roles contribute directly to performance and typically partner on execution, reporting, or optimization.
These leading indicators influence this KPI and act as early signals that forecast future changes in this KPI.
These lagging indicators confirm, quantify, or amplify this KPI and help explain the broader business impact on this KPI after the fact.
How this KPI is structured in Cube.js, including its key measures, dimensions, and calculation logic for consistent reporting.
cube('Contracts', { sql: `SELECT * FROM contracts`,
measures: { expiringContracts: { sql: `expiring_contracts`, type: 'sum', title: 'Number of Expiring Contracts', description: 'Total number of contracts that are expiring within the given period.' },
renewedContracts: { sql: `renewed_contracts`, type: 'sum', title: 'Number of Renewed Contracts', description: 'Total number of contracts that have been renewed within the given period.' },
renewalRate: { sql: `100.0 * ${renewedContracts} / NULLIF(${expiringContracts}, 0)`, type: 'number', title: 'Contract Renewal Rate', description: 'Percentage of expiring contracts that are renewed within the given period.' } },
dimensions: { id: { sql: `id`, type: 'number', primaryKey: true, title: 'Contract ID', description: 'Unique identifier for each contract.' },
renewalType: { sql: `renewal_type`, type: 'string', title: 'Renewal Type', description: 'Type of renewal: auto-renewal or active negotiation.' },
contractDate: { sql: `contract_date`, type: 'time', title: 'Contract Date', description: 'The date when the contract was created or renewed.' } }});Note: This is a reference implementation and should be used as a starting point. You’ll need to adapt it to match your own data model and schema