Skip to main content
Retention tells you how many of your installs keep coming back to your app. Linkrunner reports it three ways: cumulative, classic, and rolling. In the dashboard these appear as the Cumulative Retention, Classic Retention, and Rolling Retention columns. This page explains all three and how the numbers are calculated.

The basics

Every retention number is built from three things:
  • Cohort: a group of installs, grouped by their install day. The install day is Day 0.
  • A return: any time a user opens the app after installing. Opening the app several times on the same day counts once.
  • Day N: how many days after install you are measuring (Day 1, Day 7, and so on).
Retention is always a percentage of the cohort:
Day N retention = (installs from the cohort that count as retained on Day N) / (cohort size) × 100
The only thing that changes between the three methods is which installs “count as retained” on Day N.

The three methods

MethodAn install counts on Day N if it opened the app…
Cumulativeon any day from Day 1 through Day N
Classicon exactly Day N
Rollingon Day N or any day after
Each method answers a different question:
  • Cumulative Day 7: “What share of the cohort came back at all during the first 7 days?”
  • Classic Day 7: “What share of the cohort opened the app on day 7 specifically?”
  • Rolling Day 7: “What share of the cohort was still active on day 7 or later?”
Both cumulative and rolling are always equal to or higher than classic for the same day, because each one includes “exactly Day N” plus more. Cumulative and rolling count different groups, so either one can be higher than the other depending on your users.

A simple example

Five users install your app on the same day (Day 0). Here are the days each of them opened the app afterwards:
UserDays the app was opened after install
A1, 2, 3, 5, 7, 9
B1, 4, 10
C1, 2
D3
E(never opened again)
The cohort size is 5.

Day 1

  • Cumulative D1 = opened on any day from 1 to 1 → A, B, C = 3 of 5 = 60%
  • Classic D1 = opened on exactly day 1 → A, B, C = 3 of 5 = 60%
  • Rolling D1 = opened on day 1 or later → A, B, C, D = 4 of 5 = 80%
At Day 1, cumulative and classic are identical, because “between day 1 and day 1” is just day 1. D only opened on day 3, so it misses both, but rolling Day 1 counts it because it returned after day 1. E never came back, so no number counts E.

Day 7

  • Cumulative D7 = opened on any day from 1 to 7 → A, B, C, D = 4 of 5 = 80%
  • Classic D7 = opened on exactly day 7 → A = 1 of 5 = 20%
  • Rolling D7 = opened on day 7 or later → A (days 7 and 9) and B (day 10) = 2 of 5 = 40%
Same cohort, three different numbers. Cumulative is high because A, B, C, and D all came back at some point in the first week. Classic is low because only A happened to open on day 7 itself. Rolling sits in between: it counts A and B, who were still active on or after day 7, but not C or D, whose last visit was before day 7.

What a date filter does

A date filter selects cohorts by their install date, not by the day users came back. Picking January 1 to January 31 measures the installs that happened in January and how many of them returned, no matter which day they returned on.
  • The numerator and the denominator both use the install date, so they always describe the same group of installs.
  • Installs still need a fair chance to reach Day N. If your range ends today, the most recent installs in it have not reached Day 7 or Day 30 yet, so they drop out of those longer windows. To read a complete Day 30 number, pick a range that ended at least 30 days ago.

Which should you use?

All three measure retention with different rules, so they answer different questions.
  • Cumulative counts an install if it returned at all within the first N days. It is the best measure of early engagement: how many of your installs you managed to bring back at least once. It is bounded to the first N days, so once a cohort matures it stops changing.
  • Classic measures activity on one specific day. Use it for reports and for comparing against industry Day 1 / Day 7 benchmarks, which are usually defined this way. It is also fixed once a cohort matures.
  • Rolling counts an install if it was still active on Day N or later. Use it to gauge long-term stickiness, since it captures users who stayed around even if they skipped the exact day.
Rolling retention keeps changing over time. Because it counts a return on Day N or any later day, a cohort’s rolling Day N value keeps rising as users come back weeks or months later.
  • Older time periods almost always show higher rolling retention than recent ones, because older cohorts have had more time for late returns to add up. A recent period can look worse than an old one purely for this reason, not because retention actually dropped.
  • A rolling number you record today can go stale. If you export it or write it into a report, it will keep climbing afterwards, so refresh it regularly or it will understate the final value.
Cumulative and classic retention do not have this problem. Both are bounded (cumulative to the first N days, classic to a single day), so once a cohort matures their values are final.

Available windows

  • Cumulative retention: Day 1, Day 7, Day 14, Day 30
  • Classic retention: Day 1, Day 7, Day 14, Day 30
  • Rolling retention: Day 1, Day 7
In the Campaign Reporting API, cumulative retention is returned as retention (d1, d7, d14, d30), rolling retention as rolling_retention (d1, d7), and classic retention as classic_retention (d1, d7, d14, d30).

Details that affect the numbers

Days are calendar days in your project’s timezone. Day N is a calendar-day difference, not a rolling 24-hour period. A user who installs at 11:55 PM and opens the app at 12:05 AM the next day is counted on Day 1. Retention is counted per install. Each install is counted once per day, no matter how many times the app is opened. Installs reported by an ad network that never produced a tracked app open are not part of the retention cohort.

How the cohort size is counted

The denominator is the same for all three methods: the cohort size, or the number of installs being measured. It is not a separate “total installs” figure pulled from somewhere else. It is the installs in view that have had a fair chance to reach Day N. That “fair chance” is the key rule. An install is only counted in the Day N cohort once it has existed for at least N full days, so each window has its own denominator:
  • The Day 1 cohort = installs that happened at least 1 day ago.
  • The Day 7 cohort = installs that happened at least 7 days ago.
  • The Day 30 cohort = installs that happened at least 30 days ago.
An install from 3 days ago is in the Day 1 cohort (it has had more than a day) but not yet in the Day 7 cohort (it has not reached its 7th day), so it is left out of the Day 7 number entirely, on both sides of the formula. Because this rule is applied to the numerator and the denominator together, an install can only be counted as retained if it is also in the cohort. That is why a retention percentage never goes above 100%.

Troubleshooting

The Cumulative, Classic, and Rolling Retention columns show different numbers. This is expected. Cumulative counts installs that returned at any point in the first N days, classic counts only installs that returned on day N exactly, and rolling counts installs that returned on day N or later. Each answers a different question, so the numbers rarely match. Day 14 or Day 30 retention looks empty or low. Your recent cohorts have not matured yet. Widen the date range to include older installs that have had a full 14 or 30 days to return. Rolling retention keeps going up for the same period. This is expected. Rolling counts Day N and every day after, so late returns keep adding to it. Use cumulative or classic retention if you need a number that stays fixed once a cohort matures. Retention is lower than your total install count suggests. Retention only counts installs that opened the app and were tracked by the Linkrunner SDK. Installs reported by an ad network without a tracked app open are excluded from the cohort. Need help? Contact support@linkrunner.io