Glossary/Metrics and growth
Classic retention
Definition
Classic retention is the percentage of a cohort that is active on day N exactly, counting only activity on that specific day and ignoring activity on any other day.
Also called day-N retention or bracket-free retention, it is the strictest of the three common definitions and the lowest number any of them will produce. Its strictness is the point: because each day is measured independently, the resulting curve carries information about usage rhythm that smoothed definitions deliberately average away.
One day, counted alone
A user counts toward classic D7 only if they were active on day 7. Being active on days 1 through 6 and on day 8 does not help. This makes classic retention a snapshot rather than a cumulative measure, and it is why the number is so much lower than teams expect the first time they compute it.
| User | Active on days | Classic D7 | Range D1–7 | Rolling D7 |
|---|---|---|---|---|
| A | 0, 1, 2, 7 | Counted | Counted | Counted |
| B | 0, 1, 2, 3, 4, 5, 6 | Not counted | Counted | Not counted |
| C | 0, 12, 13 | Not counted | Not counted | Counted |
| D | 0 only | Not counted | Not counted | Not counted |
User B is the case that provokes the most objection: six consecutive active days and classic D7 records nothing. That is correct behaviour for the metric, not a flaw. Classic asks whether the cohort is present on a given day, which is the question you need when comparing one day against the same day for another cohort — and B's absence on day 7 is real information.
User C shows the complementary case, where classic misses a returning user that rolling retention catches. Which of those blind spots you can tolerate is the actual basis for choosing between them.
The jagged curve is the signal
Plot classic retention day by day for almost any consumer app and the line has teeth. Days 7, 14, 21 and 28 sit above their neighbours; weekend days sit above or below depending on the category. This is usage rhythm, and it is one of the few metrics that shows habit formation directly.
| Day | Classic retention | Note |
|---|---|---|
| D1 | 26.0% | The first-session cliff |
| D3 | 14.1% | Steep decay continues |
| D6 | 7.9% | Trough before the weekly peak |
| D7 | 10.4% | Weekly habit visible |
| D13 | 5.8% | Trough |
| D14 | 8.1% | Second weekly peak, decayed but present |
| D30 | 4.6% | Approaching the plateau |
A peak at D7 that survives to D14 and D21 means a genuine weekly loop exists. A D7 peak that vanishes by D14 usually means a scheduled notification produced a one-off return rather than a habit — a distinction worth knowing before crediting the lifecycle campaign that produced it.
Do not smooth the curve to make it presentable
Switching to a range definition or a seven-day moving average makes the chart tidier and deletes the rhythm. If a smoothed line is needed for an executive summary, keep the raw classic curve as the working chart, since it is the one that tells you whether a release broke the weekly loop.
Computing it
-- Active on day N exactly. No BETWEEN, no >=.
WITH cohort AS (
SELECT user_id, DATE(installed_at) AS cohort_date
FROM installs
),
day_index AS (
SELECT DISTINCT
c.cohort_date,
c.user_id,
DATE_DIFF(DATE(s.started_at), c.cohort_date, DAY) AS day_n
FROM cohort c
JOIN sessions s USING (user_id)
WHERE s.is_foreground
),
sizes AS (
SELECT cohort_date, COUNT(*) AS cohort_size FROM cohort GROUP BY cohort_date
)
SELECT
d.day_n,
ROUND(100.0 * COUNT(DISTINCT d.user_id) / SUM(z.cohort_size), 2) AS classic_retention_pct
FROM day_index d
JOIN sizes z USING (cohort_date)
WHERE d.day_n BETWEEN 1 AND 30
-- A cohort counts toward day N only after N full days have elapsed.
AND d.cohort_date <= CURRENT_DATE() - d.day_n - 1
GROUP BY d.day_n
ORDER BY d.day_n;The equality on day_n is the entire difference between this and the other definitions. Change it to BETWEEN 1 AND 7 and you have range retention; change it to >= 7 and you have rolling. Keeping the three in one file, with the predicate as the only difference, is the most effective documentation available.
One practical note: because classic counts a single day, small cohorts produce noisy numbers. A cohort of 200 installs at 6% D7 is twelve users, and a swing of three users moves the figure by more than a point. Aggregate cohorts by week before drawing conclusions at low volume, and never compare single-day cohorts across a holiday.
When classic is the right choice
- Comparing cohorts. Same-day-index comparisons are exactly what classic is built for.
- Detecting release regressions. A cohort-wide drop at a specific day index localises the change.
- Diagnosing habit loops. The peaks and troughs are the diagnostic.
- Comparing acquisition sources. Strictness makes low-quality traffic obvious sooner.
It is the wrong choice for apps with a naturally irregular cadence — a travel booking app, a tax tool, a delivery service used fortnightly. There, a user active on day 6 and day 8 but not day 7 is a perfectly healthy user that classic scores as churned. Range or rolling retention describes those products better, and the retention rate overview compares all three on one cohort.
Free developer tools
Classic retention compared across acquisition sources only means something when each cohort lands in the same place after install. Our free tools cover the link layer that decides that — campaign tagging, deep link routing and verification — so a cohort's curve reflects the traffic rather than a broken destination.
Open the free developer tools →Frequently asked questions
- What is classic retention?
- It is the percentage of a cohort active on day N exactly, ignoring activity on every other day. A user active on days one through six but absent on day seven does not count toward classic D7. It is the strictest of the common retention definitions and always produces the lowest number for a given cohort and day.
- What is the difference between classic and rolling retention?
- Classic counts only activity on day N itself, while rolling counts activity on day N or any day after it. Rolling is therefore always greater than or equal to classic for the same cohort. Classic is better for comparing cohorts and spotting release regressions; rolling is better for churn and lifetime estimates.
- Why is my classic retention curve jagged?
- Because usage has rhythm and classic retention does not smooth it. Peaks on days 7, 14, 21 and 28 indicate a weekly habit, and weekend effects show up as regular bumps or dips depending on the category. The jaggedness is a signal about the product, so smoothing it away removes the most useful thing the chart contains.
- Is classic retention the same as day-N retention?
- In most usage, yes — day-N retention normally means classic retention. The ambiguity is that N-day retention is also used as an umbrella label for the whole D1, D7 and D30 family, under which the actual measurement rule may be classic, range or rolling. Stating the rule explicitly resolves it in six words.
- When should I not use classic retention?
- When the product has a naturally irregular usage cadence, such as travel booking, tax filing or fortnightly delivery. A user active on days six and eight but not seven is healthy, and classic records them as absent at D7. For those products, a range or rolling definition describes real behaviour more faithfully.
Related terms
- Retention rate — Retention rate is the percentage of a cohort of users who are still active after a defined period, measured from a fixed starting event such as install.
- N-day retention — N-day retention is the percentage of a cohort that is active on the Nth day after their starting event, where day zero is the day of the starting event itself.
- Rolling retention — Rolling retention is the percentage of a cohort that is active on day N or on any day after it, treating a user as retained if they ever returned at or beyond that point.
- Cohort analysis — Cohort analysis groups users by a shared starting event, usually their install date, and measures each group separately over time so that changes in behaviour can be separated from changes in acquisition mix.