Retention Curves 101: How to Measure and Improve Cohort Retention

What retention curves are, how to read them, and how to build cohort retention analysis from raw event data.

JR3 min read

Ask a room of founders what their signup numbers are and everyone can answer. Ask what percentage of last month's signups are still active and the room goes quiet. Retention is the metric that separates products people want from products people merely try - and the retention curve is the clearest way to see it.

What a retention curve actually shows#

A retention curve answers one question: of the users who started in a given period, what fraction are still around N days or weeks later?

The group of users who started together is called a cohort. Instead of averaging everyone together (which hides everything), you track each cohort separately:

Cohort Week 0 Week 1 Week 2 Week 3
Jan 6 100% 42% 31% 27%
Jan 13 100% 45% 34% 30%
Jan 20 100% 48% 37% -

Every cohort starts at 100% by definition. What happens next is the story.

How to read one#

Three things to look for:

  1. Does the curve flatten? A curve that flattens at 25% means a quarter of each cohort formed a habit - you have a base to build on. A curve that slides to zero means you have a leaky bucket, and more marketing will just leak faster.
  2. Is each new cohort above the last? In the table above, the Jan 20 cohort beats Jan 6 at every point. Whatever you changed - onboarding, activation, the product itself - it's working. This is how you separate real progress from noise.
  3. How big is the week-1 drop? Most products lose the majority of users immediately. The week-1 number is mostly about activation; the long tail is about habit. They need different fixes.

What you need to compute it#

Less than you'd think. Retention analysis needs exactly two things per event: who did it and when. If you're logging events with a user id and a timestamp, you have everything.

The logic: each user's cohort is the week of their first event. A user "retained in week N" if they have any event N weeks after their cohort week. ClickHouse, the database GraphJSON is built on, even ships a dedicated retention() function for exactly this computation.

The important prerequisite is logging meaningful activity events - not just signups. "User was active" should map to something valuable in your product: created a project, ran a report, sent a message. Retention measured on the wrong event is worse than no retention data at all.

The lazy way#

If you'd rather not write cohort SQL yourself: GraphJSON builds retention curves from your event data with a few clicks. Log events with a user id, open the retention visualization, and you get the cohort table and the curve - no SQL required (though our SQL notebooks are there when you want to slice it differently). The full walkthrough is in our retention curves guide.

JR

Written by JR

Founder and builder of GraphJSON.