Retentie in games: D1, D7 en D30 meten
Door Mike Dalton ·
Retentie in een game is het aandeel nieuwe spelers dat een bepaald aantal dagen na hun eerste dag opnieuw speelt. De drie standaardmaten zijn D1-, D7- en D30-retentie: het aandeel nieuwe spelers dat 1, 7 en 30 dagen na hun eerste dag opnieuw speelt. Deze gids legt uit hoe de getallen worden berekend, welke details ze veranderen, een SQL-query die ze berekent en wat als een goed resultaat geldt.
Wat zijn D1-, D7- en D30-retentie?
Retentie wordt per cohort gemeten. Een cohort is de groep spelers van wie de eerste speeldag dezelfde dag was, en die eerste dag is dag 0.
- D1-retentie is het aandeel van een cohort dat op dag 1 speelde, de dag na hun eerste dag.
- D7-retentie is het aandeel dat op dag 7 speelde.
- D30-retentie is het aandeel dat op dag 30 speelde.
Als bijvoorbeeld 200 spelers op een maandag voor het eerst spelen en 80 van hen op dinsdag opnieuw spelen, is de D1-retentie van het maandagcohort 80 / 200 = 40%. Als 24 van diezelfde 200 spelers de maandag erna spelen, is de D7-retentie 12%.
Klassieke en doorlopende retentie
Er zijn twee gangbare definities, en die geven voor dezelfde spelers verschillende getallen:
- Klassieke retentie (ook N-dagen- of strikte retentie genoemd) telt een speler alleen als die precies op dag N speelde. Een speler die dag 7 overslaat en op dag 8 speelt, telt niet mee voor D7.
- Doorlopende retentie (in het Engels rolling of unbounded) telt een speler als die op dag N of op een latere dag speelde. Die is altijd minstens zo hoog als klassieke retentie, en kan in de loop van de tijd stijgen.
Niet alle tools gebruiken dezelfde. GameAnalytics en Unity Analytics rapporteren klassieke retentie. De standaardinstelling van Mixpanel is On or After
, wat doorlopende retentie is, en Amplitude biedt beide. Controleer welke definitie elke bron gebruikt voordat je je getallen vergelijkt met een benchmark of met een andere tool. Game Stats AI rapporteert klassieke retentie.
Details die het getal veranderen
Twee teams kunnen met dezelfde data de D1-retentie berekenen en toch verschillende uitkomsten krijgen. Dit zijn de gebruikelijke oorzaken:
- Wat als actief telt. Elke sessie, een voltooide match of elke gebeurtenis. Een strengere definitie geeft een lagere retentie.
- Grenzen van een dag. Kalenderdagen in UTC, kalenderdagen in een lokale tijdzone, of vensters van 24 uur die beginnen bij de eerste sessie van de speler. GameAnalytics en Unity gebruiken kalenderdagen in UTC; Amplitude en Mixpanel gebruiken standaard vensters van 24 uur. Een speler die voor het eerst om 23:00 speelt en de volgende ochtend om 09:00 opnieuw speelt, kwam met kalenderdagen terug op dag 1, maar met vensters van 24 uur op dag 0.
- Dagen die nog niet voorbij zijn. De D7-retentie van een cohort is pas bekend als dag 7 van dat cohort voorbij is. Laat de waarde leeg in plaats van 0%, anders trekken recente cohorten het gemiddelde omlaag.
- Speeltijd of importtijd. Gebruik het moment waarop de speler echt speelde, niet het moment waarop je server de data ontving. Anders komen data die je later verstuurt of achteraf aanvult op de verkeerde dag terecht.
- Kleine cohorten. In een cohort van 10 spelers verandert één speler de D1-retentie met 10 procentpunten. Neem het gemiddelde over cohorten gewogen naar de grootte van elk cohort. Dat is hetzelfde als eerst de terugkerende spelers en de nieuwe spelers van alle cohorten optellen en daarna delen. Het deel over steekproefgrootte in de gids over balans laat zien hoeveel een percentage bij een bepaalde steekproefgrootte door toeval kan schommelen.
Retentie berekenen met SQL
Als je sessies al in een database staan, berekent deze PostgreSQL-query de klassieke D1-, D7- en D30-retentie per cohort. Hij verwacht een tabel sessions met een kolom player_id en een kolom started_at van het type timestamptz:
WITH active_days AS (
SELECT DISTINCT player_id, (started_at AT TIME ZONE 'UTC')::date AS active_on
FROM sessions
),
first_days AS (
SELECT player_id, MIN(active_on) AS first_day
FROM active_days
GROUP BY player_id
),
today AS (
SELECT (now() AT TIME ZONE 'UTC')::date AS day
)
SELECT
first_day,
COUNT(*) FILTER (WHERE active_on = first_day) AS new_players,
CASE WHEN first_day + 1 < today.day THEN
ROUND(100.0 * COUNT(*) FILTER (WHERE active_on = first_day + 1) / COUNT(*) FILTER (WHERE active_on = first_day), 1)
END AS d1_percent,
CASE WHEN first_day + 7 < today.day THEN
ROUND(100.0 * COUNT(*) FILTER (WHERE active_on = first_day + 7) / COUNT(*) FILTER (WHERE active_on = first_day), 1)
END AS d7_percent,
CASE WHEN first_day + 30 < today.day THEN
ROUND(100.0 * COUNT(*) FILTER (WHERE active_on = first_day + 30) / COUNT(*) FILTER (WHERE active_on = first_day), 1)
END AS d30_percent
FROM first_days
JOIN active_days USING (player_id)
CROSS JOIN today
GROUP BY first_day, today.day
ORDER BY first_day DESC;
De query brengt de sessies terug tot één rij per speler per dag, zoekt de eerste dag van elke speler en telt hoeveel spelers van elk cohort actief waren op dag 1, 7 en 30. Een retentiewaarde blijft NULL tot die dag voorbij is. Dagen zijn kalenderdagen in UTC; vervang beide waarden 'UTC' door de naam van een tijdzone, zoals 'Europe/Amsterdam', om een lokale tijdzone te gebruiken.
Wat is een goede D1-, D7- en D30-retentie?
De grootste openbare benchmark is de GameAnalytics 2026 Mobile and PC Gaming Benchmarks, met meer dan 16.000 mobiele games en 3.582 pc-games in 2025. GameAnalytics gebruikt klassieke retentie.
| Mobiele games | D1 | D7 | D30 |
|---|---|---|---|
| Mediaan | ongeveer 22% | net onder 4% | 0,7% tot 0,8% |
| Beste 25% | net boven 30% | 6% tot 7% | 1,6% tot 1,8% |
| Beste 10% | ongeveer 40% | 11% tot 12% | niet gepubliceerd |
| Pc-games | D1 | D7 | D30 |
|---|---|---|---|
| Mediaan | ongeveer 7% | 1,1% tot 1,3% | 0,2% tot 0,25% |
| Beste 25% | 12% tot 13% | 2,7% tot 3,2% | 0,7% tot 0,9% |
| Beste 10% | 21% tot 23% | 5,8% tot 6,9% | ongeveer 2% |
Je komt ook de 40/20/10-regel tegen: 40% D1, 20% D7 en 10% D30. GameAnalytics beschrijft die als een nuttig uitgangspunt dat niet voor elke game geldt. Vergeleken met de tabellen hierboven is het een doel voor sterke mobiele games, geen gemiddelde.
Benchmarks combineren veel genres. Gebruik ze om te controleren of je getallen binnen een redelijk bereik liggen. Meer zegt de vergelijking van je game met zichzelf: elk nieuw cohort tegenover de cohorten ervoor, en elke versie tegenover de vorige.
Retentie meten in Game Stats AI
Om te laten zien hoe dat eruitziet, hebben we een voorbeeld van een competitieve game opgezet. Acht weken lang kwamen er elke dag tussen de 10 en 16 nieuwe spelers bij, en elke match werd naar het endpoint voor matches gestuurd. De spelers zijn gegenereerd om een gebruikelijke retentiecurve te volgen, dus de getallen laten zien hoe je het rapport leest en zijn geen benchmark.
Je hebt geen aparte retentiegebeurtenis nodig. Een retentierapport telt een speler als actief op elke dag waarop die een match speelt, een gebeurtenis verstuurt, een prestatie ontgrendelt of een voortgangsgebeurtenis registreert, met de tijd uit je eigen data. Ga naar Rapporten, klik op Nieuw rapport en kies Retentierapport om er een te maken.
Het rapport toont de dagelijks, wekelijks en maandelijks actieve spelers in de gekozen periode, met de gemiddelde D1-, D7- en D30-retentie van alle cohorten, gewogen naar de grootte van elk cohort. Het toont ook de gemiddelden voor dagelijks, wekelijks en maandelijks actieve spelers en voor betrokkenheid, die in DAU/MAU-verhouding voor games wordt uitgelegd:


Daaronder staat de cohorttabel, met één rij per eerste dag, de nieuwste bovenaan. Donkerdere cellen betekenen een hogere retentie, en een cel blijft leeg tot de dag voorbij is, dus de nieuwste cohorten tonen alleen D1:


Dagen zijn kalenderdagen in UTC, en het rapport toont de cohorten van de laatste 90 dagen, tenzij je een andere periode kiest. Dezelfde getallen zijn beschikbaar via het endpoint voor retentierapporten, en je kunt Claude er via MCP vragen over stellen, bijvoorbeeld Wat was onze D7-retentie voor spelers die vorige week begonnen?
Vind waar nieuwe spelers stoppen
Een lage D1-retentie wijst meestal op de eerste sessie: de tutorial, de eerste levels of de eerste match. Meet de voltooiingspercentages van je eerste levels om de precieze stap te vinden waar nieuwe spelers stoppen, zoals uitgelegd in hoe je vindt bij welke levels spelers vastlopen.
Veelgestelde vragen
Wat is D1-retentie?
D1-retentie is het aandeel nieuwe spelers dat op de dag na hun eerste dag opnieuw speelt. Als 100 spelers op maandag beginnen en 35 op dinsdag spelen, is de D1-retentie 35%.
Telt dag 0 als dag 1?
Nee. Dag 0 is de eerste dag van de speler, waarop alle spelers in het cohort per definitie actief zijn. Dag 1 is de dag daarna.
Wat is het verschil tussen retentie en churn?
Retentie meet het aandeel spelers dat terugkomt. Churn meet het aandeel dat stopt met spelen. Met klassieke retentie is 100% min de D30-retentie niet hetzelfde als churn, omdat een speler die op dag 30 niet speelde op dag 31 nog kan spelen.
Wat is een goede D1-retentie voor een mobiele game?
In de benchmarks van GameAnalytics voor 2025 had de mediane mobiele game ongeveer 22% D1-retentie, de beste 25% net boven 30% en de beste 10% ongeveer 40%.