Alp SuleimanGrowth Partner

Cohort Matrix Calculator

A blended retention number hides different stories inside one average. A cohort matrix gives each signup period its own row: in which period do users drop off, does the loss slow down somewhere, are newer cohorts better than older ones? Paste your own matrix and the tool computes the pooled curve, the plateau point and LTV. The numbers you see on load are sample data, not real.

Tool 3 / 15

Cohort Matrix Calculator

Inputs

Cohort matrix

Each row: label, M0 (cohort size), M1, … Use tabs, semicolons, commas or spaces as separators. For multi-word labels use tabs or semicolons. If the first row is not numeric it is treated as a header. At most 24 cohorts and 24 periods.

Value type

Period unit

Segment comparison
Compare with a segment (optional)

Paste a second matrix (e.g. another channel or plan) and the two segments appear on the same chart and in a difference table. Leave it empty and the tool works with one matrix.

Same format, value type and period unit as the first matrix. The ARPU, margin, horizon and threshold above apply to both segments.

Unit economics

Currency

$

Sample value, not real; replace it with your own.

%

Sample value, not real; replace it with your own.

$

Leave at 0 and LTV/CAC and payback are not computed.

Projection and scenario

Projection horizon (periods)

Plateau threshold (conditional retention)

Start month (retention and CAC)

No plateau was seen in the observation window, so there is no automatic start. You can pick a month manually.

With M0 selected, results are unchanged. With the other options the tool adds a table computed from the chosen month onward; it does not filter out or estimate which users are tourists. If you switched the period unit to days or weeks, read "month" as that unit.

pts

0–20 points. Tries how much higher the share remaining after the first period would be.

The matrix you paste (including the second segment) is written into the address-bar link; if you share or reopen it, the numbers go with the address.

Result

LTV per user: $38.8

LTV per user

$38.8

Observed $21.5 + projection $17.3.

This result is computed from sample data and sample values; it is not real.

45% of the LTV rests on unobserved periods

The projection carries the loss rate of the latest periods out to the horizon. The larger the share, the more of the figure is assumption.

No plateau in the observation window

Conditional retention did not clear the 95% threshold for two periods in a row. Loss did not slow within this window.

69% of the total loss happens in M1: look at the first moment of value first. The newest three cohorts' M1 retention is 6.3 points higher than the earlier ones on average. A hint, not a diagnosis.

A segment difference (channel, plan, country) does not show in a single matrix. Paste a second matrix into the "Compare with a segment" section in the inputs.

M1 retention

49.3%

Share remaining after the first period on the pooled curve.

Tail rate (q_tail)

92.4%

Geometric mean of the last 3 observed conditional rates.

Cohort retention heatmap (retention percentage computed from active counts). The pooled curve of all cohorts is on top.
CohortM0M1M2M3M4M5M6
Pooled curveall cohorts100.049.339.133.830.428.426.7
C1n = 800100.045.035.030.026.925.023.5
C2n = 750100.046.036.030.927.726.0not yet observed
C3n = 900100.047.037.032.029.0not yet observednot yet observed
C4n = 850100.050.040.035.1not yet observednot yet observednot yet observed
C5n = 920100.052.042.0not yet observednot yet observednot yet observednot yet observed
C6n = 880100.055.0not yet observednot yet observednot yet observednot yet observednot yet observed

Retention curve

0%25%50%75%100%M0M5M10M15M24
Pooled curveProjectionNewest: C6Weakest C1

LTV: observed and projected

  • Observed periods$21.5
  • Resting on unobserved periods$17.3

    Horizon: 24 periods.

LTV per user by cohort: its own observation, then the pooled tail
CohortSizeLastObservedLTV (24)
C1800M6: 23.5%$20$35.2
C2750M5: 26%$18.7$35.9
C3900M4: 29%$17.2$36.8
C4850M3: 35.1%$15.8$40
C5920M2: 42%$13.6$43.1
C6880M1: 55%$10.9$50.2

Scenario: M1 retention +5 points

M1 retention (scenario)

54.3%

Current 49.3%.

Scenario LTV

$42.1

24 periods, same assumptions.

LTV difference

+$3.2

+8.3%

This is a sensitivity calculation, not a forecast; only running the experiment will show whether +5 points happens.

Share this result

Results are estimates based on the values you enter, not investment or financial advice. The calculation runs in your browser and no separate request is made to send your numbers. The values you enter are written into the link in the address bar.

Formula

  • Retention rate

    r[c,t] = a[c,t] ÷ a[c,0]

    a[c,t]: active count of cohort c in period t; a[c,0] is the cohort size.

  • Pooled curve

    q[t] = Σ a[c,t] ÷ Σ a[c,t−1]; S[0] = 1, S[t] = S[t−1] × q[t]

    Only cohorts that have observed period t are summed; rows can have different lengths.

  • Plateau

    First t where q[t] ≥ θ and q[t+1] ≥ θ

    θ defaults to 95%; it is a setting of this tool, not a universal benchmark. If only the last period clears it, the result is marked "possible".

  • Tail

    q_tail = geometric mean of the last 3 observed q, capped at 0.98

    Only periods whose denominator is at least 30 people count (the tool's rule). The 0.98 cap is a cautious ceiling, not a measured value.

  • LTV (per user)

    Σ S[t] × ARPU × margin, t = 0 … horizon

    For t > T, S[t] = S[t−1] × q_tail. The first period (M0) is included.

  • Unobserved share

    (projected LTV − observed LTV) ÷ projected LTV

    Shows how much of the LTV rests on periods you have not seen yet.

  • Scenario

    S'[1] = min(1, S[1] + X ÷ 100); for t ≥ 1, S'[t] = S[t] × S'[1] ÷ S[1]

    A sensitivity calculation: assumes the lift in M1 carries through later periods at the same ratio.

  • Start month k: share remaining

    S[k]

    Share still active at month k (pooled curve). With k = 0, S[0] = 1 and results equal the current calculation.

  • CAC per remaining customer

    CAC ÷ S[k]

    A rebasing: all acquisition spend is attributed to those still active at month k. It is a recomputation under that assumption.

  • Conditional LTV (from k)

    Σ S[t] ÷ S[k] × ARPU × margin, t = k … horizon

    Contribution of a user active at month k over the periods from k onward, k included; same tail and horizon as LTV. With k = 0 it is the LTV itself.

  • Conditional LTV / CAC

    conditional LTV ÷ (CAC ÷ S[k])

    Read next to the M0-based LTV/CAC; for k > 0 it is lower because revenue before k is not counted; with k = 0 the two are identical.

How to read the result

Read the heatmap column by column. Each row is a signup period, and users get older as you move right. The drop in the first column is usually the steepest, so check it first in your own matrix; the real question is whether the curve flattens after it. Every cell carries its number, and colour only guides the eye.

The pooled curve combines cohorts of different sizes into one line. Because each period only counts cohorts that have observed it, new and still-short rows do not distort the curve. A plateau says the loss slowed within this window; it does not say a lasting loyal base exists. Only a longer observation can show that.

Pattern hints are not diagnoses. Loss concentrated in the first period may point at onboarding and the first moment of value; mid-period erosion with no plateau makes you ask whether the product builds a habit; fluctuation can also signal a definition or data problem. The cohort-over-cohort comparison assumes rows run oldest to newest. A segment difference does not show in a single matrix: paste a second matrix by channel or plan and compare them on the same chart. The hint thresholds are this tool's rules, not benchmarks (for example, the newest three cohorts' M1 average differing from earlier ones by at least 5 points).

Read the unobserved share of LTV separately. If the matrix shows only a few periods and the horizon reaches well past them, a large part of the result may be an assumption about periods you have not seen. The share depends on how fast loss continues: small if loss keeps running fast, large if the curve has flattened. Above 50% (the tool's threshold) the box switches to a warning tone; observing the curve a while longer before committing budget to that number is reasonable.

The scenario block shows what lifting M1 retention by a few points does to LTV. The result can be smaller than intuition suggests: cohort size does not change, only the share remaining after the first period grows. This is a sensitivity calculation; only an experiment shows whether the improvement will happen.

The start month option starts retention and CAC from a later month instead of M0. a16z's "Retention Is All You Need" (2025) recommends starting this calculation at M3 for AI products; it writes that the "tourists" who sign up and leave within a couple of months have mostly gone by M3, and that curves most often begin to flatten around M3. The piece rests on a dataset of dozens of AI companies with more than $1M in ARR that the authors have seen. The authors also say that, as long as the curve eventually flattens, the exact timing matters less for long-term dollar retention. M3 is the month a16z recommends; this tool does not treat it as a fixed threshold: you can take the month from your matrix's plateau point or choose it manually. The tool does not filter out or estimate who is a tourist; it only computes from the chosen month onward. CAC per remaining customer, CAC ÷ S[k], is a rebasing and assumes all acquisition spend is attributed to those still active in that month; it is not a measured CAC. Conditional LTV/CAC leaves out revenue before k while keeping the full CAC, so for k > 0 it is lower than the M0-based ratio; read the two as answers to different questions.

Frequently asked questions

What data should I paste into the cohort matrix?

One row per cohort: a label, the cohort size (M0), then the number of users still active in each period. Tabs, semicolons, commas or spaces all work; copying from Excel is enough. Rows can have different lengths: a newer cohort shows fewer periods. If you only have retention percentages, switch the value type to percent; M0 stays a head count.

How does my definition of active affect the result?

A lot. Loosen the definition and the matrix looks better while nothing has really changed. Before you run the tool, ask: does your active definition count the action where users get value, or only that they opened the app?

What does the plateau point mean?

Conditional retention stayed at or above the threshold (default 95%) for two periods in a row: within that window, loss slowed down. Nothing more. With few cohorts, or last periods resting on few people, a plateau can be chance; the tool flags periods with a denominator under 30 as "small sample".

Why does LTV show an "unobserved share"?

The projection carries the loss rate of your last observed periods forward. When you observe few periods relative to the horizon, part of the number rests on periods that have not happened yet; how much depends on the shape of the curve. When this share is high, read the LTV as an assumption rather than a measurement.

Is the "M1 +5 points" scenario a forecast?

No. It is a sensitivity calculation: if the first-period rate were 5 points higher and later periods carried that through at the same ratio, what would LTV be? Only an experiment shows whether such an improvement will happen. The calculation helps you weigh whether it is worth the engineering time to try.

Do my numbers get sent anywhere?

The calculation runs in your browser and makes no separate request to send your numbers. However, the matrix you paste (and the second segment's matrix, if any) is written into the link in the address bar. If you reload or share that link, the numbers travel with the address, and the address also reaches the server that serves the page. If the matrix is long, it is not written to the link at all. If the data is sensitive, anonymise the labels.

Let's read the story behind the numbers together.

Let's pin down which metric is really limiting your growth and which lever to pull first.

↑ All calculators