Lifetime Value Cohort Analyzer

Retention and contribution from a pasted cohort table, with how many cohorts each averaged period came from and the projection kept separate from what happened.

Live output

Enable JavaScript to customise; default output below.

One cohort a line: a label, then the counts, starting with the cohort's size. Pipes, commas, tabs or a spreadsheet paste all work, and a label containing a year is read as a label.

Lifetime value on revenue rather than contribution is the other common way it gets overstated.

Live preview cohort-ltv.txt
Cohorts                                                    6
Widest window, in months                                   6

Retention by period, and how many cohorts each average is
  month 0                                                  100% from 6 cohorts
  month 1                                                  45.1% from 6 cohorts
  month 2                                                  34.4% from 5 cohorts
  month 3                                                  30.1% from 4 cohorts
  month 4                                                  28.1% from 3 cohorts
  month 5                                                  27% from 2 cohorts  ← thin
  month 6                                                  25.8% from 1 cohort  ← thin

Per cohort
  Jan 2026                                                 1,200 to start, 25.8% after 6 months
  Feb 2026                                                 1,100 to start, 27.3% after 5 months
  Mar 2026                                                 1,400 to start, 28.2% after 4 months
  Apr 2026                                                 1,250 to start, 30.4% after 3 months
  May 2026                                                 1,310 to start, 34.7% after 2 months
  Jun 2026                                                 1,180 to start, 44.1% after 1 month

What the table actually shows
  revenue a customer, so far                               $122.04
  contribution, at the margin                              $87.87
  over                                                     7 months of data
  which is                                                 an observation rather than a lifetime: nobody in the table has finished being a customer

Against acquisition cost
  cost a customer                                          $95.00
  paid back                                                not yet: $87.87 of contribution against $95.00 after 7 months
  ratio so far                                             0.92× on contribution
  reading                                                  below 3× on the data so far, which is the figure the projection below is usually used to rescue

If the recent decline continues to 24 months
  method                                                   the last three periods decline at 4.1% a month, continued for 17 more
  extra revenue                                            $128.95
  extra contribution                                       $92.84
  total contribution                                       $180.71
  ratio to acquisition cost                                1.90×
  and the caveat                                           this is a projection of a curve that has three points, from a table whose far end is thin. It is the number to argue about rather than the number to plan on.

The table shows $87.87 of contribution a customer over 7 months. That is
what happened. A lifetime value is a prediction about people who have
not left yet, and the difference between the two is where most LTV
figures go wrong.

The last period averages 1 cohort, which is 17% of them. A column with
one cohort in it is that cohort's number rather than an average, and it
moves a lot when the next month arrives.

Retention curves flatten. The steep part is the first two or three
periods, after which the survivors are the people who were always going
to stay, and projecting the early slope forward is the single commonest
way an LTV is overstated. The projection here uses the most recent slope
instead, which is conservative.

Contribution rather than revenue. Multiplying retention by revenue gives
a number that ignores the cost of serving those customers, and the ratio
against acquisition cost only means something on contribution.

Payback is the figure a finance conversation actually wants. Lifetime
value tells you whether the business works eventually; payback tells you
how much cash is needed in the meantime, which is what decides whether
you get to find out.

The cohort that looks worst is often the most recent one, because it has
had the least time and because acquisition changed. Read a column down
rather than a row across before concluding that quality is falling.

None of this is a model. It is arithmetic on the table you pasted, which
is the honest version: a fitted curve looks more authoritative and is
only better if the fit is checked against held-back periods.

Output is valid and updates as you type.

Most lifetime value figures are a division: revenue a customer divided by a churn rate. That gives one number from two averages, and it hides the thing a cohort table shows plainly, which is that retention is not a constant. It falls steeply and then flattens, and which part of the curve you extrapolate decides the answer.

This takes the table instead. Paste the cohorts, one a line, and it reports retention by period with the number of cohorts behind each average, what the table actually earned, and, separately, what the recent slope implies if it continues.

The separation is the point. The observed figure is arithmetic on rows you can check. The projection is a guess with a named method, and the two are never added into one number.

How to use

  1. Paste the table: a label, then the cohort’s starting size, then how many remained in each later period. Pipes, commas, tabs or a straight spreadsheet paste all work.
  2. Set what a column is worth: revenue a retained customer a period, and the gross margin.
  3. Add the acquisition cost to see whether the cohorts have paid it back yet.
  4. Set the horizon, or zero to see only what happened.

Rows do not have to be the same length. A cohort three months old has three numbers, and the tool averages each period over the cohorts that actually reached it.

Example

Six monthly cohorts, $42 a month at a 72 percent margin, $95 to acquire:

Cohorts                                                    6
Widest window, in months                                   6

Retention by period, and how many cohorts each average is
  month 0                                                  100% from 6 cohorts
  month 1                                                  45.1% from 6 cohorts
  month 2                                                  34.4% from 5 cohorts
  month 3                                                  30.1% from 4 cohorts
  month 4                                                  28.1% from 3 cohorts
  month 5                                                  27% from 2 cohorts  ← thin
  month 6                                                  25.8% from 1 cohort  ← thin

What the table actually shows
  revenue a customer, so far                               $122.04
  contribution, at the margin                              $87.87
  over                                                     7 months of data
  which is                                                 an observation rather than a lifetime

Against acquisition cost
  cost a customer                                          $95.00
  paid back                                                not yet: $87.87 against $95.00 after 7 months
  ratio so far                                             0.92× on contribution

If the recent decline continues to 24 months
  method                                                   the last three periods decline at 4.1% a month
  extra contribution                                       $92.84
  total contribution                                       $180.71
  ratio to acquisition cost                                1.90×

Two numbers, and the honest one is the smaller. $87.87 happened. $180.71 is what happens if a curve with three points keeps bending the way it has been.

Pitfalls

Each period is averaged over different cohorts. Month 1 here is six cohorts; month 6 is one. The far right of any cohort table is the oldest cohorts only, which is survivorship: the ones that reached month 6 are by definition the ones that lasted. Those columns are marked thin, and they move a lot when the next month arrives.

Extrapolating the early slope is the standard mistake. Retention falls fastest at the start and then flattens, because the survivors are the people who were always going to stay. Taking month 1 to month 2 as the ongoing rate overstates the answer badly. The projection here uses the most recent three periods, which is the conservative end.

Lifetime value on revenue is not lifetime value. Serving a customer costs something, and the ratio against acquisition cost only means anything on contribution. Set the margin honestly, including support and hosting, not just cost of goods.

Payback is the number that decides whether you survive to collect the lifetime value. A 4× LTV to CAC ratio with a 19-month payback needs a lot of cash in the meantime. The ratio is about whether the business works; payback is about whether you get to find out.

The newest cohort usually looks worst, because it has had the least time and because acquisition changed. Read a column down before concluding quality is falling.

A cohort of nobody breaks the averaging. A row starting at zero contributes nothing and is reported as zero retention rather than being silently dropped, which is worth noticing if a paste went wrong.

Counts, not percentages. Paste the number of customers remaining. A table of percentages will be read as counts and the first column will be treated as the cohort size, which makes everything relative to 100.

Three points do not make a curve. With four or five periods of data any projection is arithmetic dressed as a forecast. It is there to bound the argument, not to settle it.

Compatibility

Runs in the browser: the table is parsed and averaged locally, nothing is uploaded, and nothing is stored.

The parser accepts pipes, commas, semicolons, tabs and runs of spaces, strips thousands separators, and treats any part containing a letter as a label. That last rule exists because a cohort called “Jan 2026” was being read as a count of 2026, which shifted every period by one and made retention look better than it was. The test suite asserts it directly.

Rows of different lengths are expected rather than tolerated. Each period’s average divides by the number of cohorts that reached it, and that count is printed next to every figure so the averages are never mistaken for a like-for-like comparison.

The projection is a separate section with its method stated: the mean decline across the last three observed periods, applied forward, never allowed to rise above 1. Setting the horizon to zero removes it entirely and the observed figures stay.

Frequently asked questions

How many periods of data do I need?
Enough to see the flattening, which usually means at least four or five. Below that, the observed contribution is still useful and the projection is not.
Should I use monthly or weekly cohorts?
Match your billing. Monthly for a monthly subscription, weekly only for something with a genuinely weekly rhythm; weekly cohorts of a monthly product show a sawtooth that means nothing.
Why is the projected figure so much larger than the observed one?
Because it adds 17 more months of a flat tail. That is exactly the part of the number nobody has observed, which is why it is printed separately with the method next to it.
What LTV to CAC ratio should I aim for?
Three is the figure usually quoted, and it is a convention rather than a law. It matters less than payback: a ratio of 3 with a 24-month payback and a ratio of 2 with a 6-month payback are different businesses.
Does this handle expansion revenue?
Not directly. Revenue a retained customer is one number here, so growing revenue per customer has to go in as an average or the analysis has to be run per segment. Expansion large enough to matter usually deserves its own net revenue retention figure rather than being folded into this.
Weekly drops

New tools, when there are new tools

One email when something worth using ships. No schedule to fill, so no filler.

Your address goes nowhere else, and one click unsubscribes.