Sign in

Blog · Board and management reporting

How to read a cohort retention table: the diagonal, the column, and the cohort that broke the pattern

A reading guide for a cohort retention table, rows by signing period and columns by months since signing: why the columns are read before the rows, the diagonal as the most recent data and the least settled, the cohort whose row falls faster than its neighbours, the too-young cohorts to leave alone, the difference between the gross and net versions of the same table, and the row to open, the one that broke the pattern in a column where its neighbours held.

The short answerA cohort retention table has rows for each signing period and columns for months since signing, and it is read down the columns before along the rows: the month-six column shows every cohort at the same age, and a cohort whose value in that column is well below its neighbours has broken the pattern at that age. The diagonal is the most recent data for every cohort and the least settled; the bottom rows are too young to read past their first columns. The gross version, capped at 100, shows leakage; the net version, with expansion, shows growth from the base. The row to open is the cohort below its neighbours in a column where they held.

A cohort retention table looks like a triangle of percentages, and most readers scan the rows. The reading is down the columns: every cohort at the same age, and the one that broke the pattern. This guide is the reading order, the diagonal, the too-young rows, gross against net, and the row to open.

The shape

Rows: cohorts by signing quarter. Columns: months since signing. Cells: retention at that age. The bottom-right is empty because young cohorts have not reached those ages; the diagonal is each cohort's latest.

The reading order

  1. A middle column, say month 12. Every cohort that has reached a year, at a year. The one well below its neighbours has broken the pattern.
  2. The column where it broke. Move left to find the age at which that cohort diverged.
  3. The diagonal. The freshest cell for each cohort; read as provisional.
  4. The too-young rows. Leave alone past their first two or three columns.
  5. Net beside gross for the broken cohort: leaking, or leaking and growing.

A worked read, gross retention

Cohort M3 M6 M9 M12 M18 M24
2024 Q1 97% 93% 90% 87% 83% 80%
2024 Q3 96% 92% 89% 86% 82%
2025 Q1 95% 84% 76% 72%
2025 Q3 96% 91% 88%
2026 Q1 97% 92%
2026 Q3 98%

Month 12 column: 87, 86, 72. The 2025 Q1 cohort is fifteen points below its neighbours at a year.

Where it broke: month 6. At month 3 it was in line; by month 6 it was eight points behind. Something in that cohort's second quarter.

Diagonal: 2026 Q3's 98 percent is one cell and settles nothing.

Too young: 2026 Q1 and Q3 are read only to month 6.

Net beside gross, 2025 Q1

M12 gross M12 net
2025 Q1 72% 74%
Neighbours 86% 108%

Leaking and not growing. The neighbours leak less and expand past their start. The cohort broke on both.

The row to open

2025 Q1. The question is what happened to those customers between month three and month six: the onboarding that quarter, the product version, the sales motion that sold them. The cohort table cannot say; it can say when.

Where it goes wrong

Rows read first. Every cohort declines; nothing looks unusual.

Diagonal read as settled. A young cohort's first cell taken as its fate.

Gross only. The growing cohort and the flat one look alike.

Too-young rows read too far. A cohort with one cell declared broken.

Every quarter, columns first

Covirage lays out the cohort table with the column comparison highlighted and the too-young cells greyed. The net revenue retention guide covers how the table is built, and the purchase cohort guide covers the same reading for non-subscription revenue.

Questions people ask

Why columns before rows?

Because a column compares cohorts at the same age, which is the fair comparison. Reading along a row shows one cohort ageing, which every cohort does. The finding is a cohort that aged worse than the others at the same point, and that is a column read.

What is the diagonal?

The most recent period's value for each cohort: the oldest cohort's latest column and the youngest cohort's first. It is the freshest data and the most likely to move, and a movement on the diagonal is read with that in mind.

Gross or net?

Both, on the same rows. Gross retention says how much of the starting revenue is still there, capped at 100; net adds expansion and can exceed it. A cohort at 80 gross and 115 net is leaking and growing; one at 80 gross and 82 net is leaking and not. The two tables together are the reading.