MRR timeline


Get a detailed timeline of Monthly Recurring Revenue (MRR) and customer movements for your account. You can optionally break down the data by plan, currency, billing frequency, pricing model, customer subtype, region/market, country, industry, customer age, or size. The report also calculates churn, retention, ARPA, ASP, LTV, quick ratio, and FX adjustments.

GET /reports/mrr

Query parameters

ParameterTypeDescription
datestringOptional date range for the report (e.g., 20250901-20251001). Defaults to last 365 days.
intervalstringday, week, quarter, or month. Defaults to month.
breakdownstringGroup MRR by plan, currency, billing_freq, pricing_model, payment_method, subtype, market, country, industry, age, size.
baseCurrencystringOptional base currency for FX conversion. Defaults to the account's base currency.
customerstringFilter by a specific customer ID.
planstringFilter by plan IDs (space-separated for multiple).
currencystringFilter by currency codes (space-separated).
billing_freqstringFilter by billing frequency (month/year).
pricing_modelstringFilter by pricing model (licensed, metered).
payment_methodstringFilter by payment method (e.g., visa, paypal, ach).
subtypestringFilter by customer subtype.
regionstringFilter by region (maps to countries).
countrystringFilter by specific country codes.
industrystringFilter by customer industry.
agestringFilter by customer age in months or ranges (e.g., 0-6 6-12).
sizestringFilter by customer size.
statusstringFilter by subscription status.
categorystringFilter by MRR movement category (new, expansion, contraction, churn, reactivation).
fix_fxbooleanIf true, uses a fixed FX rate from the first period instead of period-specific rates.

Example response

200 OK
{
"currency": "usd",
"breakdown": "plan",
"result": [
{
"date": "2025-09-01",
"end_date": "2025-09-30",
"new": 5000,
"expansion": 1000,
"contraction": -500,
"churn": -200,
"reactivation": 100,
"mrr_diff": 5400,
"customers_diff": 5,
"total_mrr": 10500,
"total_arr": 126000,
"total_customers": 50,
"arpa": 210,
"asp": 1000,
"quick_ratio": 2.5,
"customer_churn_rate": 0.04,
"mrr_churn_rate": 0.02,
"net_mrr_churn_rate": 0.01,
"customer_retention_rate": 96,
"mrr_retention_rate": 98,
"nrr": 99,
"customer_churn_avg": 0.035,
"ltv": 5250,
"fx_adjustment": 50,
"breakdown": {
"basic": {
"label": "Basic Plan",
"new": 2000,
"expansion": 500,
"contraction": -100,
"churn": -50,
"reactivation": 0,
"mrr_diff": 2350,
"customers_diff": 2,
"total_mrr": 5000,
"total_arr": 60000,
"total_customers": 25,
"arpa": 200,
"asp": 1000,
"customer_churn_rate": 0.02,
"customer_churn_avg": 0.018,
"ltv": 10000,
"fx_adjustment": 20
},
"pro": {
"label": "Pro Plan",
"...": "..."
}
}
}
]
}

Result properties

PropertyTypeDescription
datestringStart of the period (yyyy-MM-dd).
end_datestringEnd of the period.
newintegerMRR from new customers.
expansionintegerMRR from existing customers upgrading.
contractionintegerMRR lost from downgrades.
churnintegerMRR lost from churned customers.
reactivationintegerMRR from reactivated customers.
mrr_diffintegerTotal MRR movement for the period.
customers_diffintegerTotal customer movement for the period.
total_mrrintegerTotal MRR in base currency at period end.
total_arrintegerAnnualized recurring revenue (MRR × 12).
total_customersintegerTotal customers at period end.
arpaintegerAverage revenue per account.
aspintegerAverage subscription price for new customers.
quick_ratiofloatRatio of growth (new + expansion) to losses (contraction + churn).
customer_churn_ratefloatChurn rate for customers during period.
mrr_churn_ratefloatChurn rate for MRR during period.
net_mrr_churn_ratefloatNet MRR churn (churn + contraction + expansion + reactivation).
customer_retention_ratefloat100% - customer churn rate.
mrr_retention_ratefloat100% - MRR churn rate.
nrrfloatNet revenue retention.
customer_churn_avgfloatAverage customer churn over past 180 days (or 25 weeks).
ltvintegerLifetime value estimate based on ARPA / average monthly churn.
fx_adjustmentintegerFX rate adjustment applied to MRR.

Breakdown properties

If breakdown is used, the breakdown object contains keys corresponding to breakdown values (plan IDs, currency codes, countries, etc.) with the following structure:

PropertyTypeDescription
labelstringDisplay label for the breakdown value.
total_mrrintegerTotal MRR for this breakdown.
total_arrintegerTotal ARR for this breakdown.
total_customersintegerTotal customers in this breakdown.
newintegerMRR from new customers.
expansionintegerMRR from upgrades.
contractionintegerMRR lost from downgrades.
churnintegerMRR lost from churn.
reactivationintegerMRR from reactivations.
mrr_diffintegerNet MRR movement.
customers_diffintegerNet customer movement.
new_customersintegerNumber of new customers.
expansion_customersintegerNumber of customers expanding.
contraction_customersintegerNumber of customers contracting.
churn_customersintegerNumber of churned customers.
reactivation_customersintegerNumber of reactivated customers.
arpaintegerAverage revenue per account.
aspintegerAverage subscription price.
customer_churn_ratefloatCustomer churn rate for this breakdown.
customer_churn_avgfloatAverage churn over prior periods.
ltvintegerLifetime value estimate.
fx_adjustmentintegerFX adjustment for this breakdown.