Glossary/Metrics and growth
Retention rate
Definition
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.
The definition above is where the agreement ends. "Active after seven days" can mean active on day seven exactly, active at any point during the first week, or active on day seven or later — three different questions that produce three different numbers from identical data, all commonly labelled D7. Most retention arguments are definition mismatches wearing a data disguise.
Three definitions, one cohort
Take 1,000 users who installed on the same day. Every number below comes from that identical group; only the question changes.
| Definition | Question it answers | Users counted | D7 result |
|---|---|---|---|
| Classic | Active on day 7 exactly? | 84 | 8.4% |
| Range (bracket) | Active anywhere in days 1–7? | 310 | 31.0% |
| Rolling | Active on day 7 or any day after? | 196 | 19.6% |
| All three | — | Same 1,000 installs | Same data |
Classic is always the lowest and rolling is always at least as high as classic, because every user counted by classic is also counted by rolling. Range sits above classic too, and can exceed rolling for short windows. A team quoting 31% and a team quoting 8.4% for the same app are both right and are not disagreeing about anything factual.
Analytics tools disagree by default, silently
Different products ship different defaults for the same D7 label, and some let each report pick its own without surfacing the choice. Before comparing your retention to a benchmark, a competitor, or last year's deck, establish which definition each side used. If nobody can say, the comparison is not salvageable.
Which to use for what
| Definition | Best for | Weakness |
|---|---|---|
| Classic | Comparing cohorts, detecting release regressions | Jagged; punishes weekly-use apps |
| Range | Apps with irregular natural frequency | Windows overlap, so curves are not comparable across widths |
| Rolling | Churn and lifetime estimates | Recent cohorts cannot be measured yet |
| N-day | The umbrella label used in reporting | Ambiguous unless the definition is stated |
The jaggedness of classic retention is not noise to be smoothed. A weekly-habit app shows peaks on days 7, 14 and 21 and troughs between them, and that pattern is the product working as designed. Choosing range retention to make the chart smooth throws away the signal that told you the habit exists.
Rolling retention has the opposite constraint: it can only be computed once enough time has passed that "or later" means something. A cohort installed nine days ago has no trustworthy rolling D7, and reporting one anyway is the most common way retention dashboards fabricate an upward trend at the right-hand edge.
The query, with the definition made explicit
The three definitions differ by one predicate. Writing all three in a single query is the cheapest way to make the choice visible to whoever reads the output.
-- One cohort table, three definitions, no ambiguity about which is which.
WITH cohort AS (
SELECT user_id, DATE(installed_at) AS cohort_date
FROM installs
),
activity AS (
SELECT
c.user_id,
c.cohort_date,
DATE_DIFF(DATE(s.started_at), c.cohort_date, DAY) AS day_n
FROM cohort c
JOIN sessions s USING (user_id)
)
SELECT
cohort_date,
COUNT(DISTINCT user_id) AS cohort_size,
-- Classic: active on day 7 exactly.
ROUND(100.0 * COUNT(DISTINCT IF(day_n = 7, user_id, NULL))
/ COUNT(DISTINCT user_id), 1) AS classic_d7,
-- Range: active anywhere in days 1-7.
ROUND(100.0 * COUNT(DISTINCT IF(day_n BETWEEN 1 AND 7, user_id, NULL))
/ COUNT(DISTINCT user_id), 1) AS range_d1_d7,
-- Rolling: active on day 7 or later.
ROUND(100.0 * COUNT(DISTINCT IF(day_n >= 7, user_id, NULL))
/ COUNT(DISTINCT user_id), 1) AS rolling_d7
FROM activity
-- Only cohorts old enough for all three to be defined.
WHERE cohort_date <= CURRENT_DATE() - 8
GROUP BY cohort_date
ORDER BY cohort_date DESC;The WHERE clause at the bottom is the part most implementations omit. Without a maturity filter, the newest cohorts appear in the output with partial data, and every retention chart slopes reassuringly upward at the edge where it has the least information.
Retention is where attribution stops being an accounting exercise
Retention split by acquisition source is the single most useful cross-section in growth analytics, because it is where install fraud and low-quality traffic become undeniable. A source whose installs retain at a fraction of every other channel is not a source with unlucky users.
- Retention indistinguishable from organic, at implausible volume. Consistent with click spamming reassigning organic installs.
- Near-zero D1 across a whole source. Often incentivised or emulated installs rather than a product problem.
- A single sub-publisher dragging a channel's curve down. Split before you judge the channel.
- A cohort-wide cliff on one date. A release regression, not a marketing problem — check the build.
One caution on comparing sources: deferred deep linking changes retention on its own, because users who land on the content they were promised behave differently from users dropped on a home screen. When comparing channels, hold the post-install destination constant, or you are measuring routing quality and calling it traffic quality.
Whatever you choose, write the definition into the report's own title. D7 (classic, cohort ≥ 8 days old) is a number someone else can reproduce; D7: 8.4% is a number someone else will contradict.
Free developer tools
Retention split by source is only trustworthy when the source labels are consistent and the post-install destination is held constant. Our free tools cover the link layer that produces both — campaign tagging, deep link routing and verification — so the cohorts you compare differ by traffic rather than by plumbing.
Open the free developer tools →Frequently asked questions
- What is retention rate?
- It is the percentage of a cohort of users still active after a defined period, measured from a fixed starting event such as install. The apparently simple definition hides three incompatible measurement rules — classic, range and rolling — which produce different numbers from identical data and are all commonly reported under labels like D1, D7 and D30.
- What is the difference between classic, range and rolling retention?
- Classic counts users active on day N exactly. Range counts users active at any point between day one and day N. Rolling counts users active on day N or any day after it. Classic always gives the lowest figure, rolling is always at least as high, and range sits above classic while behaving differently as the window widens.
- What is a good D1 or D7 retention rate?
- Published benchmarks vary widely by category, region and definition, and most do not state which definition they used, which makes them close to unusable as targets. The reliable comparison is your own app over time, holding the definition and the cohort maturity filter constant, and segmented by acquisition source rather than blended.
- Why do two analytics tools report different retention for the same app?
- Almost always because they default to different definitions of the same label, or apply different rules for what counts as active and when a cohort is mature enough to report. Before investigating a data pipeline, confirm which definition each tool used, whether a session or an event counts as activity, and whether partial cohorts are included.
- Why does my retention chart improve at the most recent dates?
- Because those cohorts have not had time to complete the measurement window and are being reported anyway. A cohort installed three days ago cannot have a D7 number, but a query without a maturity filter will compute one from partial data. Exclude any cohort younger than the window you are reporting.
Related terms
- 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.
- Classic retention — 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.
- 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.