# DAU, WAU, MAU and stickiness

> Count active users at the rhythm people actually use the product.

- Course: [Product Analytics: From Data to Decisions](https://productovi.com/courses/product-analytics.md)
- Module: Which numbers should we steer by?
- Lesson 7/32, ~31 min
- Source: https://productovi.com/courses/product-analytics/active-users

## Is 17% bad?

**Alex Tutor:** A worried message reaches you on the Halves product team, from Theo this time.

**Theo:** An investor sent us a benchmark: good consumer apps have DAU/MAU around 50%. Ours for June is **17%**. Are we a failing app?

**Alex Tutor:** Let's unpack it. **DAU, WAU, MAU** are distinct users who did the qualifying action in a day, a week and a month. For Halves that action is opening the app.

**Alex Tutor:** **Stickiness** is DAU divided by MAU: the share of the month's users who show up on a typical day. It only makes sense at the product's **natural usage rhythm**. You need a messenger every day. Nobody splits a dinner bill every day.

![A slow metronome stands beside a shared grocery basket; a fast one ticks beside a phone full of chat bubbles.](https://productovi.com/courses/product-analytics/inline/active-users-illustration-2.webp)

*Each product has its own beat; measure activity at that beat.*

**Sofia:** So what is our rhythm?

**Alex Tutor:** Let the data say. Here's June, 1 to 28: four whole weeks, which we'll treat as the month. One row per user with the days they opened the app in each week, plus DAU for each day.

**Dataset (CSV):** [Halves users and their active days, 1–28 June 2026](https://productovi.com/datasets/product-analytics/active-users/halves-active-days-june.csv)

Everyone with any event in June, 140 rows. Staff accounts already removed.

- `user_id`: User id
- `group_type`: Type of the user's main group: couple, flat, trip or other
- `days_w1`: Days with `app_opened` in week 1 (1–7 June)
- `days_w2`: Same for week 2 (8–14 June)
- `days_w3`: Same for week 3 (15–21 June)
- `days_w4`: Same for week 4 (22–28 June)
- `server_only`: true if the user's only June events were recurring bills created by the server

**Dataset (CSV):** [Halves daily active users, 1–28 June 2026](https://productovi.com/datasets/product-analytics/active-users/halves-dau-june.csv)

Distinct users with `app_opened` each day (UTC), same users as above.

- `date`: Day (UTC)
- `weekday`: Day of the week
- `week`: Week number, 1–4
- `dau`: Daily active users

**Sofia:** MAU first, then. That's just the number of rows?

**Alex Tutor:** Look at the last column before you answer.

> **Exercise:** Using the user file, what is Halves **MAU** for 1–28 June: distinct users who opened the app at least once?

## Average DAU and stickiness

**Alex Tutor:** DAU moves around: 40 on Monday 1 June, when flats log the rent, and 13 on Sunday the 28th. So stickiness uses the **average** DAU over the month.

**Halves DAU, 1–28 June 2026**

| Day of June | Daily active users |
| --- | --- |
| 1 | 40 |
| 2 | 24 |
| 3 | 24 |
| 4 | 18 |
| 5 | 25 |
| 6 | 25 |
| 7 | 17 |
| 8 | 25 |
| 9 | 18 |
| 10 | 21 |
| 11 | 23 |
| 12 | 24 |
| 13 | 23 |
| 14 | 23 |
| 15 | 22 |
| 16 | 23 |
| 17 | 20 |
| 18 | 19 |
| 19 | 16 |
| 20 | 21 |
| 21 | 20 |
| 22 | 20 |
| 23 | 23 |
| 24 | 20 |
| 25 | 17 |
| 26 | 20 |
| 27 | 27 |
| 28 | 13 |

*Rent day on Monday 1 June stands out; the rest of the month is flat.*

**Sofia:** Average of the `dau` column. Or total active days in the user file divided by 28, which should be the same thing.

**Alex Tutor:** Exactly the same: every active user-day is one unit of some day's DAU. Two routes to one number is a free check on your arithmetic.

**Theo:** I copied that 17% straight from the dashboard. Let's see if it survives a recount.

> **Exercise:** Compute June's **DAU/MAU** stickiness: average DAU over the 28 days divided by MAU (128 users opened the app in June). Give it in %, one decimal.

**Alex Tutor:** Before the weekly view, make sure the 17% itself is read correctly. Theo already wrote a sentence about it.

> **Exercise:** Theo's draft says: “DAU/MAU of 17% means 17% of our users open Halves every day.” **True or false:** that reading is correct.

## The same month, counted by weeks

**Alex Tutor:** Now the weekly view. WAU for a week is the users with at least one day in that week's column. Average the four weeks and divide by MAU.

**Theo:** And that's the ratio I send back to the investor?

**Alex Tutor:** For our rhythm, yes, with its name on it. A daily benchmark from messengers and games doesn't compare with a weekly product.

> **Exercise:** Use the June user file and the weekly rhythm. Count WAU for each of the four weeks (users with at least one day in that week), average them and divide by MAU (128). What is **WAU/MAU**, in %, one decimal?

**Alex Tutor:** An average can hide who is behind it. Count the regulars too: people with at least one day in three or more of the four weeks.

> **Exercise:** Using the user file, what share of MAU (128) was active in **at least 3 of the 4 weeks** of June? Give it in %, one decimal.

**Alex Tutor:** 62% of the month's users are there in a typical week. And 71 of the 128, 55.5%, show up in at least three of the four weeks. That's a habit, just not a daily one.

## Different groups, different rhythms

**Alex Tutor:** Split WAU/MAU by group type and the rhythms show: couples 87.5%, flats 74%, trips 30%.

**Maya:** Trips at 30%? That sounds like a problem.

**Alex Tutor:** It's the design. A trip is one intense week, then maybe a settle-up day. A trip user active one week in four is doing exactly what the product is for. Judge trips per trip, not per week.

![A couple at home with a few receipts, flatmates in a kitchen with a weekly bundle, and travellers with suitcases amid a burst of receipts.](https://productovi.com/courses/product-analytics/inline/active-users-illustration-3.webp)

*Couples, flats and trips use Halves at different rhythms.*

**Sofia:** So one ratio for everyone mixes three rhythms. That's the mix problem again.

**Alex Tutor:** Maya still has to say something about trips at the planning meeting. Two proposals came in.

> **Exercise:** Trip users show a WAU/MAU of 30%. Which proposal reads the number correctly?

> **Exercise:** Match each product to the activity measure that fits its natural usage rhythm.

## What counts as active

**Alex Tutor:** One more trap sits in the definition. Suppose a dashboard takes MAU from **any event** but WAU from app opens. The 12 server-only users join MAU, although they never opened the app in June.

**Theo:** A bigger MAU would look better in the deck, though.

**Alex Tutor:** It would, until someone divides by it. Work out the WAU/MAU that dashboard would show.

> **Exercise:** A dashboard counts MAU from **any event**, so the 12 server-only users are included, but counts WAU from `app_opened`. June's average WAU is 79.5, and MAU from `app_opened` is 128. What WAU/MAU does the dashboard show for June?

## The reply to the investor

**Maya:** So what do we send back? I don't want to sound like we're hiding a bad number.

**Alex Tutor:** Don't hide it. Show DAU/MAU, say why it's the wrong rhythm for bill splitting, and give the weekly ratio with its definition next to it.

![Someone measures a long dining table with a tiny ruler while a ruler of the right length lies unused beside them.](https://productovi.com/courses/product-analytics/inline/active-users-illustration-4.webp)

*A daily benchmark is the wrong ruler for a weekly product.*

**Sofia:** So the reply has three parts: the 17% itself, why it's the wrong ruler for us, and the weekly number with its definition.

> **Exercise:** Write the 3–5 sentence reply to the investor who asked why Halves's DAU/MAU is only 17% against a 50% benchmark. Use June's numbers: MAU 128 (app opens), average DAU 21.8, average WAU 79.5, and 71 of the 128 users active in at least 3 of the 4 weeks.

> **Key ideas**
>
> - **DAU, WAU, MAU**: distinct users with the qualifying action (for Halves, `app_opened`) in a day, week or month. Rows in an export aren't MAU.
> - **Stickiness** = average DAU ÷ MAU (or average WAU ÷ MAU). Average DAU = total active user-days ÷ days in the month.
> - Read it at the **natural usage rhythm**. June: DAU/MAU 17.0%, WAU/MAU 62.1%, and 55.5% of MAU active in at least 3 of 4 weeks.
> - Daily benchmarks from messengers don't apply to a weekly product. Always name the ratio you quote.
> - Different segments have different rhythms (couples 87.5%, flats 74%, trips 30% WAU/MAU). Trips are judged per trip.
> - Counting server-only events as “active” inflates MAU and deflates every ratio built on it.

**Alex Tutor:** 17% was never a failing grade. It was a daily ruler held against a weekly product.

- Previous lesson: [Volume, quality and Simpson's paradox](https://productovi.com/courses/product-analytics/volume-vs-quality-metrics.md)
- Next lesson: [Case: a north star for Halves](https://productovi.com/courses/product-analytics/choosing-a-north-star.md)

---
Productovi Learning. Free, no sign-up needed to read.
