ARPDAU, ARPPU, and ARPU for games: how to calculate them
By Mike Dalton ·
ARPDAU, ARPPU, and ARPU all divide a game's revenue by a number of players. ARPDAU divides it by the players who played that day, ARPPU by the players who paid, and ARPU by all players. The revenue is the same in all three; only the denominator changes, and that is why the three numbers are so different.
ARPDAU, ARPPU, and ARPU at a glance
| Metric | Formula | What it tells you | Usual period |
|---|---|---|---|
| ARPDAU (average revenue per daily active user) | Revenue on a day / players active that day | How much the game earns from a typical day of play | One day, or an average of days |
| ARPPU (average revenue per paying user) | Revenue / players who paid | How much a paying player spends | One day or one month |
| ARPU (average revenue per user) | Revenue / all players | How much an average player is worth | A month, or a cohort's first N days |
| Payer conversion | Players who paid / active players | What share of players pay | One day or one month |
A worked example
On one day, 1,000 players play your game and 25 of them buy something, for a total of $150:
- ARPDAU is $150 / 1,000 = $0.15.
- Payer conversion is 25 / 1,000 = 2.5%.
- ARPPU is $150 / 25 = $6.00.
ARPDAU is always payer conversion multiplied by ARPPU: 2.5% × $6.00 = $0.15. So when ARPDAU changes, you can tell whether more players paid or the players who paid spent more.
ARPU over a month is not the average of the daily ARPDAU values. A player who plays on 10 days of the month counts 10 times in the daily denominators but once in the monthly one, so monthly ARPU is much higher than ARPDAU. In the example game below, ARPDAU over the last 30 days was $0.17, while revenue divided by everyone who played in those 30 days, the monthly ARPU, was $0.47. Payer conversion moves the same way: about 3% of players paid on a typical day, but 7.5% of the month's players paid at least once.
Details that change the number
Two teams can calculate ARPPU from the same purchases and get different results. These are the usual reasons:
- Ad revenue. If the game shows ads, decide whether ARPDAU and ARPU include ad revenue. ARPPU usually counts purchases only, because a player who only watches ads is not a payer. Neither choice is wrong, but say which one you use.
- Refunds. Subtract refunds on the day they happen. Otherwise revenue and every metric built on it stay too high.
- The period. ARPPU and payer conversion depend on whether you count payers per day or per month. A player who pays on three days of a month is three payers in the daily numbers and one in the monthly number. As devtodev points out, monthly ARPPU is not the sum or the average of the daily values.
- Gross or net. App stores keep a share of each purchase, commonly 15% or 30%. Revenue before that share gives higher numbers than the money you receive.
- Currency. Convert every purchase to one currency before you add amounts together.
ARPU by day 7 and 30: the measured part of LTV
Lifetime value (LTV) is the revenue a player brings over their whole time in the game. For players who are still playing, it is a prediction. Cumulative ARPU by day N is the part you can measure today: the revenue from a cohort of new players from their first day through day N, divided by the number of players in the cohort.
If 200 players start on the same day and spend $90 in total by their seventh day, ARPU by day 7 is $0.45. Like retention, it is only final once day N has ended. Compare ARPU by day 7 and 30 with what a new player costs to acquire; the mobile game KPIs guide covers cost per install and LTV.
SQL query for ARPDAU, payer conversion, and ARPPU
If your sessions and purchases are already in a database, this PostgreSQL query calculates the daily values for every finished day. It expects a sessions table with player_id and started_at, the same table as in the retention and DAU/MAU queries, and a purchases table with player_id, amount_usd, and purchased_at, where refunds are negative amounts:
WITH active_days AS (
SELECT DISTINCT player_id, (started_at AT TIME ZONE 'UTC')::date AS active_on
FROM sessions
UNION
SELECT DISTINCT player_id, (purchased_at AT TIME ZONE 'UTC')::date
FROM purchases
),
revenue_by_player_day AS (
SELECT player_id, (purchased_at AT TIME ZONE 'UTC')::date AS active_on, SUM(amount_usd) AS revenue
FROM purchases
GROUP BY 1, 2
)
SELECT
active_days.active_on AS day,
COUNT(*) AS dau,
COALESCE(SUM(revenue), 0) AS revenue,
COUNT(*) FILTER (WHERE revenue > 0) AS paying_players,
ROUND(COALESCE(SUM(revenue), 0) / COUNT(*), 3) AS arpdau,
ROUND(100.0 * COUNT(*) FILTER (WHERE revenue > 0) / COUNT(*), 2) AS payer_conversion_percent,
ROUND(COALESCE(SUM(revenue), 0) / NULLIF(COUNT(*) FILTER (WHERE revenue > 0), 0), 2) AS arppu
FROM active_days
LEFT JOIN revenue_by_player_day USING (player_id, active_on)
WHERE active_days.active_on < (now() AT TIME ZONE 'UTC')::date
GROUP BY active_days.active_on
ORDER BY day DESC;
The query counts a player as active on any day they played or bought something, adds up each player's purchases per day, and counts a player as paying on a day when their purchases that day add up to more than zero. ARPPU is empty on a day without payers. It leaves out today, because today's numbers are not final until the day ends. Days are calendar days in UTC; to use a local time zone instead, replace the four 'UTC' values with a zone name such as 'America/New_York'.
What is a good ARPDAU or ARPPU?
There is no reliable public benchmark. ARPDAU depends on the genre, the platform, the countries your players come from, and whether the game earns from ads or purchases, and the published figures we found either name no dataset or are several years old. Compare each version of your game with the versions before it, and compare ARPU by day 30 with your cost per install.
Revenue metrics in Game Stats AI
To show what that looks like, we used the example competitive game from the retention guide. New players joined every day for eight weeks, and we added generated purchase events for about 3% of the days players were active, with a few refunds as negative amounts. In a game, each purchase is an event with an amount_usd attribute, sent to the events endpoint.
A revenue report adds up one or more revenue sources. Each source is an event and the attribute that holds its amount in US dollars, such as purchases, subscriptions, or ad revenue. The report counts a player as active on any day they play a match, send an event, unlock an achievement, or record a progression event, and it subtracts negative amounts as refunds. Every source counts toward daily revenue, ARPDAU, and ARPU, while payer conversion and ARPPU only count the sources that players pay directly, so a player who only watches ads is not a payer. The example game has one source, its purchases:


The report calculates ARPDAU, payer conversion, and ARPPU per day, and its averages weight each day by its players, so they match the daily definitions above rather than the monthly ones. Below the averages is one row per cohort with ARPU by day 1, 7, and 30, which stays empty until that day has ended:


We ran the SQL query above on the same matches and purchases, and it returned the same revenue, paying players, ARPDAU, payer conversion, and ARPPU for every day. The values are also available from the revenue report endpoint, and you can ask Claude about them through MCP, for example Did ARPPU change after the last update?
Frequently asked questions
What is the difference between ARPU and ARPPU?
ARPU divides revenue by all players, and ARPPU divides it by the players who paid. Because most players in a free-to-play game never pay, ARPPU is usually many times higher than ARPU.
What does ARPDAU stand for?
Average revenue per daily active user: the revenue on a day divided by the number of players who played that day.
Is a higher ARPU always better?
Not on its own. ARPU rises if players who rarely pay stop playing, because the denominator shrinks. Read it together with the number of active players and retention.
Does ARPPU include ad revenue?
Usually not, because ARPPU is about players who pay. If you include ad revenue, a player who only watches ads becomes a payer and ARPPU stops measuring purchases. Whichever you choose, use the same definition every time.