Churn cohort retention

Paste signup and activity data, group users into cohorts, and see retention or period-over-period churn by month, week, or day. The tool builds the grid, weighted average row, and text curve locally in your browser.

Try:
Cohort table

About this tool

Cohort analysis answers a different question from a single churn percentage: users who joined in January may behave differently from users who joined in March. This tool starts from raw activity rows, assigns each user to a signup cohort, and builds a cohort-by-period grid so you can compare retention or churn at the same age across cohorts.

Paste an activity table with a user id and activity date. If you also paste a signup/users table, cohorts come from the signup date; otherwise each user's first activity becomes their cohort date. Choose monthly, weekly, or daily buckets, how many follow-up periods to display, whether cells show percentages, counts, or both, and whether to output a readable table, CSV, or JSON. Cells that a cohort has not aged into yet are shown as - rather than a misleading zero.

Worked example

Activity events:

user,date
u1,2024-01-05
u1,2024-02-03
u1,2024-03-01
u2,2024-01-20
u2,2024-03-02
u3,2024-02-10
u3,2024-03-11

With Cohort period set to monthly, Follow-up periods set to 3, and Cell values set to counts and percent, the January cohort starts at P0 with two users, P1 shows the users active one month later, and the weighted average row combines every cohort old enough to observe each period. Switch Metric to churn to see period-over-period losses instead of retained users.

Limits and edge cases

FAQ

Do I need a separate signup table?

No. If Signup/users CSV is blank, each user's first activity date defines the cohort. Paste a signup table when you want users with no activity to count in the denominator, or when signup and first activity are different events.

What is P0?

P0 is the signup period itself: the month, week, or day containing the signup date. P1 is one full period later, P2 is two periods later, and so on. Comparing P1 across cohorts is usually more useful than comparing calendar months directly.

How is churn calculated?

Churn is period-over-period loss: users active in the previous observable period minus users active in the current period, divided by the previous period's active users. If users come back after being inactive, churn can be negative for that step.

Why are some cells a dash?

A dash means the cohort is not old enough to observe that period as of the analysis date. For example, a March cohort cannot have P3 retention in April. Set Analysis date to reproduce a specific reporting cut; otherwise the latest date in the input is used.

Is my user data uploaded?

No. The parser and retention calculations run in WebAssembly inside the browser. For the CLI, the same deterministic Rust core runs locally. No account, warehouse connection, or remote service is used.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool churn-cohort-retention "user,date
u1,2024-01-05
u1,2024-02-03
u2,2024-01-20
u2,2024-03-02
u3,2024-02-10"

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/churn-cohort-retention/?data=user%2Cdate%0Au1%2C2024-01-05%0Au1%2C2024-02-03%0Au2%2C2024-01-20%0Au2%2C2024-03-02%0Au3%2C2024-02-10&signups=user%2Csignup_date%0Au1%2C2024-01-01%0Au2%2C2024-01-15%0Au3%2C2024-02-01&user=user&date=date&signup_date=signup_date&granularity=month&periods=6&metric=retention&values=percent&as_of=2024-06-30&header=true&delimiter=comma&format=table

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.