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.

SaaS Cohort Retention Analysis

By MCP Analytics Team | Published , updated

"Are newer cohorts stickier?" is one of the most important questions a SaaS founder can ask, and one of the hardest to answer from a standard dashboard. Your overall churn rate blends brand-new signups with long-tenured customers, hiding whether your product is getting better or worse at keeping people. Cohort retention analysis groups customers by when they signed up and tracks what percentage remain active over time, revealing patterns that aggregate metrics bury.

Worked Example (Simulated): Did the Later Signup Group Stay Active as Long?

Question: Did the April signup group stay active as long as the January group?

Inputs: Simulated data, seed 42. Each cohort starts with 20 customers. The monthly stay chances are set in the script: January 0.80, 0.75 and 0.70 for months 1 to 3, April 0.70, 0.65 and 0.60.

Method: For each month, the script draws a random stay-or-leave result for each active customer. A customer who leaves stays inactive in later months. The table shows active customers and their share of the starting group at the same age.

import random

seed = 42
random.seed(seed)
# Monthly chance to stay active, set by hand for each cohort (Apr is lower).
cohorts = {
    "Jan": [0.80, 0.75, 0.70],
    "Apr": [0.70, 0.65, 0.60],
}
customers_per_cohort = 20

print(f"Simulated data, seed {seed}")
print("Input: 20 customers in each signup cohort; "
      "monthly chance to stay active is set for this example.")
print("Method: draw each customer's monthly status; "
      "a customer who leaves stays inactive in later months.")
print("Cohort | Month 0 | Month 1 | Month 2 | Month 3")
for cohort, stay_rates in cohorts.items():
    counts = [customers_per_cohort]
    active = customers_per_cohort
    for rate in stay_rates:
        active = sum(1 for _ in range(active) if random.random() < rate)
        counts.append(active)
    cells = [f"{c}/{customers_per_cohort} ({c / customers_per_cohort:.0%})"
             for c in counts]
    print(f"{cohort:6} | " + " | ".join(cells))

Printed output:

Simulated data, seed 42
Input: 20 customers in each signup cohort; monthly chance to stay active is set for this example.
Method: draw each customer's monthly status; a customer who leaves stays inactive in later months.
Cohort | Month 0 | Month 1 | Month 2 | Month 3
Jan    | 20/20 (100%) | 18/20 (90%) | 12/20 (60%) | 10/20 (50%)
Apr    | 20/20 (100%) | 15/20 (75%) | 10/20 (50%) | 7/20 (35%)

Result: At month 3, 10 of 20 January customers were active (50%) and 7 of 20 April customers (35%). April also had a lower active share at months 1 and 2. April is built with lower stay chances, so the lower active share is expected. With 20 customers per group this shows the method, not a finding.

Limit: These are simulated records with set stay chances. They do not show why a real cohort changed or predict what will happen to customers.

Why Your Overall Churn Rate Is Misleading

If you are growing fast, new signups mask the churn of older customers. Your overall active user count goes up even as individual cohorts deteriorate. This is the classic "leaky bucket" problem, you keep pouring water in faster than it leaks out, so the bucket looks full, but the leak is getting worse. Cohort analysis measures the leak directly.

To see how many of your own customers come back, cohort by cohort, try the free cohort retention tool.

See the simulated cohort example above. It compares groups at the same age, but does not test a pricing change.

Aggregate retention numbers do not tell you whether your retention is getting better or worse across cohorts. Cohort analysis shows whether retention is changing across signup groups.

Product analytics tools like Amplitude, Mixpanel, and Heap have cohort features, but they track product usage events (logins, feature clicks), not billing activity. This analysis works from a billing CSV export to answer the question that matters most: are customers still paying?

What the Report Shows You

Retention heatmap

The signature visualization of cohort analysis. A grid where each row is a cohort (grouped by signup month) and each column is a lifecycle period (month 1, month 2, month 3, and so on). Each cell shows the percentage of the cohort still active. Colors range from dark (high retention) to light (low retention).

Read the heatmap two ways. Horizontally across a row: how does a single cohort age? Retention typically drops quickly in the first period and then levels off. Vertically down a column: is retention at a given lifecycle stage improving or worsening across cohorts? A column that gets lighter as you move down means newer cohorts retain worse at that stage. A column that gets darker means observed retention is higher there; that may reflect product or onboarding improvements, though changes in acquisition mix can also explain it.

The first column after 100% is the most actionable. If first-period retention is dropping across recent cohorts, something about the initial experience is degrading, possibly acquisition channel quality, onboarding flow, or mismatched expectations. First-period churn is also the easiest to fix because customers are still fresh enough to respond to intervention.

Retention curves

Multiple cohorts overlaid on a single line chart so you can compare trajectories directly. Lines that drop faster indicate worse-retaining cohorts. Lines that flatten at a higher level indicate cohorts with a larger base of loyal customers. Look for convergence or divergence: if all curves converge to roughly the same level after 6 months, your differences are in early retention. Focus on onboarding. If curves diverge permanently, different cohorts have fundamentally different customer quality. Focus on acquisition channel analysis.

Survival analysis

Kaplan-Meier estimation of the probability a customer remains active at each point in time. This produces a smooth survival curve with confidence intervals and handles censoring, the fact that recent cohorts have not been observed long enough to know their full retention profile. The median survival time (where the curve crosses 50%) tells you how long a typical customer stays active. Set a median survival goal that fits your business and customer group.

Churn analysis

Flips the perspective from retention to churn, showing when customers leave and how quickly. The share of churn in the first period depends on the business and how the period is defined. As an example number, if your first-period churn were 40%, four out of ten new customers would never come back after their initial month. The churn analysis also shows whether the rate of loss is accelerating, decelerating, or stable across cohorts.

Revenue cohort analysis

If you include a revenue column, this section weights retention by revenue instead of headcount. Revenue-weighted retention often tells a different story. You might lose 50% of customers by month 6, but if the retained half accounts for 80% of revenue, your revenue retention is much healthier than the headcount suggests. This section shows cumulative revenue per cohort and revenue concentration.

Three Reasons SaaS Founders Run Cohort Analysis

Preparing a board deck or investor pitch. "Our retention is improving" is a claim. A retention heatmap showing darker colors in recent cohorts is proof. Investors look for improving cohort curves as a signal of product-market fit strengthening over time. If your cohort retention is getting worse, you need to know that before your investors do.

Measuring the impact of a change. You shipped new onboarding, changed pricing, or switched acquisition channels. Aggregate churn will not show the impact for months because it blends old and new cohorts. Cohort analysis isolates the post-change cohort and compares it directly against pre-change cohorts at the same lifecycle stage. The effect is often visible early, in the first few periods.

Diagnosing where customers drop off. Is the problem early churn (month 1-2) or long-term retention (month 6+)? If most churn happens in the first 90 days, invest in activation and onboarding. If retention is fine early but collapses at month 6, the product may deliver initial value but fail to grow with the customer. The churn cliff analysis shows exactly where the drop-off happens.

What Data Do You Need?

A CSV with customer activity records. Each row is a transaction or activity event: one customer will have multiple rows if they have been active in multiple periods.

Required columns

Optional columns

You need enough history to form cohorts, and larger cohorts give steadier retention rates. Smaller cohorts produce noisy percentages, 5 customers means one churn swings retention by 20 points. The tool auto-detects whether to form monthly or quarterly cohorts based on data volume.

Data sources: Stripe payments export, billing system transaction log, subscription renewal records, or app event logs with user IDs and timestamps. For billing-based retention (are customers still paying?), use payment dates. For engagement-based retention (are customers still using the product?), use login or session dates.

What to Do With the Results

Immediate actions

Strategic actions

When to Use Something Else

References

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