ds@mcpanalytics.aiEmail your data and your question and get an answer about your own data, with the method shown.Email your data and question. Get an answer.

Revenue Trend Analysis for Subscription Businesses

By MCP Analytics Team | Published , updated

Subscription businesses have a revenue structure that is fundamentally different from transaction-based businesses. In e-commerce, revenue resets to zero every month. You need new orders to generate new revenue. In subscription businesses, revenue carries forward. Last month's customers are (mostly) still paying this month. The forecast question isn't "how much will we sell?" but "how much will we keep, how much will we lose, and how much new revenue will we add?"

This distinction matters because it changes which metrics drive your forecast, how you decompose revenue trends, and what kind of analysis actually helps you make better decisions.

Worked Example (Simulated): MRR by Cohort Age and a Churn Forecast

Question: How does MRR change as each start-month group ages, and how far apart do two churn assumptions land after 12 months?

Inputs: Simulated data, seed 17. Each group starts with 10 customers, and each customer brings $100 in MRR. At each month end, each active customer has an 8% chance of leaving, the same for every group. There is no added revenue from upgrades. For the forecast lines, the churn rates (3% and 7%), the $100,000 starting MRR and the $10,000 added each month are inputs, not results.

Method: For each group, count the customers still active at each age and multiply by $100. Then, for each churn case, start at $100,000, apply churn to the opening MRR, and add $10,000 at each month end for 12 months.

import random

SEED = 17
rng = random.Random(SEED)
cohort_sizes = [10, 10, 10]
monthly_churn = 0.08
mrr_per_customer = 100
months = 5

# Each cohort starts with 10 customers. Each active customer faces an
# independent 8% chance of churn at each month end. No expansion is modeled.
cohorts = []
for start_month, size in enumerate(cohort_sizes):
    active = [True] * size
    mrr_by_age = [sum(active) * mrr_per_customer]
    for age in range(1, months - start_month):
        active = [a and rng.random() >= monthly_churn for a in active]
        mrr_by_age.append(sum(active) * mrr_per_customer)
    cohorts.append(mrr_by_age)

print(f"Simulated data, seed {SEED}")
print(f"Inputs: {len(cohorts)} monthly cohorts; "
      f"{cohort_sizes[0]} customers per cohort; "
      f"${mrr_per_customer} starting MRR per customer; "
      f"{monthly_churn:.0%} monthly churn chance; no expansion.")
print("MRR by cohort age:")
for i, row in enumerate(cohorts, start=1):
    cells = " ".join(f"M{age}=${v:,}" for age, v in enumerate(row))
    print(f"Cohort {i}: {cells}")

# Forecast lines: the churn rates and the $10,000 added each month are inputs.
for churn in (0.03, 0.07):
    mrr = 100_000
    for month in range(1, 13):
        mrr = mrr * (1 - churn) + 10_000
    print(f"Forecast with {churn:.0%} churn and $10,000 added at each "
          f"month end: month 12 MRR=${mrr:,.2f}")

Printed output:

Simulated data, seed 17
Inputs: 3 monthly cohorts; 10 customers per cohort; $100 starting MRR per customer; 8% monthly churn chance; no expansion.
MRR by cohort age:
Cohort 1: M0=$1,000 M1=$900 M2=$800 M3=$800 M4=$800
Cohort 2: M0=$1,000 M1=$800 M2=$800 M3=$800
Cohort 3: M0=$1,000 M1=$900 M2=$700
Forecast with 3% churn and $10,000 added at each month end: month 12 MRR=$171,436.78
Forecast with 7% churn and $10,000 added at each month end: month 12 MRR=$124,917.30

Result: The first group has $800 at age 4, the second has $800 at age 3, and the third has $700 at age 2. Every group has the same 8% chance of churn and the same 10 customers, so the differences between the three groups are chance. In the forecast lines, month 12 MRR is $171,436.78 at 3% churn and $124,917.30 at 7%, a gap of $46,519.48 ($171,436.78 minus $124,917.30). Both lines are a formula applied to the inputs, not a prediction.

Limit: These are made-up customer paths from one seed. They do not show what any real firm should expect. A team can compare its own groups at the same age before it changes its churn plan or forecast.

The Building Blocks of Subscription Revenue

Every subscription business's monthly revenue is the sum of four components:

Component Definition Direction
Existing MRR Revenue from customers who were paying last month and are still paying Carried forward
New MRR Revenue from customers who started paying this month Additive
Expansion MRR Additional revenue from existing customers who upgraded or added seats Additive
Churned MRR Revenue lost from customers who cancelled or downgraded Subtractive

This month's MRR = Last month's MRR + New MRR + Expansion MRR - Churned MRR

A revenue forecast for a subscription business is really four separate forecasts combined. Most founders and operators get this wrong by forecasting aggregate MRR as a single time series, which works for short horizons but misses the dynamics that determine long-term trajectory.

Why Churn Is the Dominant Variable

In a subscription business, churn compounds. This is a central concept for revenue forecasting, and spreadsheet forecasts often get it wrong.

Consider two businesses, both with $100K MRR and $10K in new MRR per month:

Start with $100,000 MRR. At each month end, apply churn to opening MRR, then add $10,000 in new MRR. After 12 months, the simulated forecast gives $171,436.78 at 3% monthly churn and $124,917.30 at 7%. The gap is $46,519.48.

Same starting revenue. Same new customer acquisition. Only the churn rate differs, and the gap grows each month because churn acts on the whole opening base.

The implication for forecasting: small errors in your churn estimate create large errors in your revenue forecast. If you're building a 12-month projection, test how much your year-end MRR moves when you change the churn assumption, as the two lines in the example do.

Gross Churn vs. Net Revenue Retention

Gross churn counts only losses, customers who cancelled or downgraded. It tells you how fast your bucket is leaking.

Net Revenue Retention (NRR) accounts for expansion revenue from existing customers. If some customers upgrade while others churn, NRR captures the net effect. NRR above 100% means your existing customer base is growing by itself, expansion outpaces churn. NRR below 100% means you need new customers just to maintain current revenue.

For forecasting, NRR is the more useful metric. It tells you the organic growth rate of your installed base, independent of new acquisition. At an NRR above 100%, revenue from existing customers grows without any new customer. At an NRR below 100%, it shrinks.

Cohort-Based Revenue Analysis

Use the worked example above to compare the MRR of each start-month group as it ages. A cohort is a group of customers who started in the same month. The table uses simulated data.

What Cohort Analysis Shows You

For each monthly cohort, track how much MRR they contribute over time. A healthy pattern looks like this:

An unhealthy pattern: cohorts keep losing customers at a steady rate with no flattening. That can mean customers leave at a steady rate regardless of tenure.

Using Cohorts for Forecasting

Once you have cohort retention curves for 3-6 cohorts, you can build a bottom-up forecast:

  1. For existing customers: Apply the cohort retention curve for each past cohort forward in time. You know how much MRR each cohort started with and what its retention pattern looks like.
  2. For future customers: Estimate new MRR per month (from your acquisition forecast), then apply the average cohort retention curve to project how each future cohort's revenue decays or grows.
  3. Sum all cohorts: The total MRR at any future date is the sum of all active cohorts' projected MRR at that date.

This is more accurate than a single-number forecast because it captures the composition effect. Older cohorts have different retention rates than newer cohorts. A business that's improving its product will see newer cohorts retain better. A business experiencing product decay will see newer cohorts churn faster. Aggregate MRR hides this; cohort analysis reveals it.

Expansion Revenue: The Growth Multiplier

For SaaS businesses with usage-based pricing, seat-based pricing, or multi-tier plans, expansion revenue can be as important as new customer acquisition. Here's how to incorporate it into your trend analysis:

Time Series Forecasting for MRR

You can apply standard time series methods (ARIMA, Prophet) to your aggregate MRR series, with some caveats:

What Works

What Doesn't Work

Building Your Revenue Trend Dashboard

For a subscription business, effective revenue trend analysis tracks these metrics monthly:

Metric What It Tells You Forecasting Use
MRR Total recurring revenue right now The number you're forecasting
Net New MRR New + Expansion - Churned Rate of change (is it accelerating?)
Gross Churn Rate % of MRR lost to cancellations Key input to compounding forecast
Net Revenue Retention Expansion minus churn, as % of starting MRR Organic growth rate of installed base
New Customer MRR MRR from first-time customers Acquisition contribution to growth
Quick Ratio (New + Expansion) / Churned MRR Growth efficiency (higher means growth outpaces churn)

The Right Approach

Use cohort analysis for understanding and long-term forecasting. Use time series forecasting (ARIMA or Prophet on aggregate MRR) for short-term projections. Track NRR as a key indicator of your revenue trajectory. And decompose MRR changes into new, expansion, and churn: the aggregate number alone hides the signals that tell you whether your business is getting healthier or sicker.

Your turn

Bring your own data and the question you actually need answered.

MCP AnalyticsData science by email Send us your data and your question, and we will reply. ds@mcpanalytics.ai

Frequently Asked Questions

What is the difference between MRR and ARR?

MRR (Monthly Recurring Revenue) is the sum of all recurring revenue normalized to a monthly amount. ARR (Annual Recurring Revenue) is MRR multiplied by 12. MRR is the operating metric. It shows month-to-month changes. ARR is the reporting metric. For forecasting, work with MRR and convert to ARR at the end, because MRR catches trends faster.

How does churn affect revenue forecasting?

Churn compounds. If you lose 5% of customers per month, you lose 46% of your revenue in a year, not 60%, because churn acts on a shrinking base. Even a small churn rate increase (3% to 5% monthly) has a dramatic cumulative impact. Small errors in churn assumptions create large errors in revenue projections.

What is net revenue retention and why does it matter for forecasting?

Net Revenue Retention measures how much revenue you keep from existing customers over a period, including expansion and contraction, minus churn. NRR above 100% means existing customers grow faster than they churn. It's an important metric for subscription revenue forecasting because it captures the compounding effect of your installed base.

Can I use time series forecasting for subscription revenue?

Yes, with caveats. ARIMA and Prophet work on aggregate MRR and capture trends and seasonality. But they miss underlying dynamics, new vs. churned vs. expansion. For more accurate forecasts, decompose MRR into components, forecast each separately, and combine. MCP Analytics supports both aggregate trend forecasting and cohort-based retention analysis.

← Revenue Forecasting · Stripe Analytics · CSV Analysis