← Back to Insights
Lester Leong

Lester Leong

·9 min read

DAU/MAU Ratio: What Your Stickiness Metric Actually Tells You (And What It Hides)

The Simplest Metric with the Most Misreadings

DAU/MAU is the ratio of daily active users to monthly active users. It answers one question: on any given day, what fraction of your monthly user base shows up?

A ratio of 50% means half your monthly users are active on any given day. A ratio of 10% means your product is something people check a few times a month, not daily. The formula is straightforward:

``` Stickiness = DAU / MAU ```

The interpretation is where teams get into trouble. I have seen this metric misread in almost every context I have worked in. As a consultant, I have helped 20+ SMBs and startups build their analytics foundations through Gradient Growth, and DAU/MAU comes up in nearly every engagement. At a financial social media startup I worked at before its acquisition, stickiness was the metric we lived and died by because social products without daily habit formation do not survive. Now, working on a GenAI squad at a major finance technology company, I see DAU/MAU at a scale where small movements represent millions of users and enormous revenue implications.

The metric is real. It matters. But it hides as much as it reveals, and most teams are not accounting for what it conceals.

What the Ratio Actually Measures

Mathematically, DAU/MAU equals the expected number of days per month a randomly selected monthly active user visits your product, divided by the number of days in the month. If your DAU/MAU is 33%, the average MAU visits about 10 days per month.

This reframing is useful because it converts an abstract ratio into something concrete: days of usage per month. A 20% stickiness ratio means your average user visits roughly 6 days out of 30. A 50% ratio means 15 days. That gives product teams an intuitive anchor for whether their product is a daily tool, a weekly check-in, or a monthly utility.

The key equation:

``` Expected active days per month = DAU/MAU * days_in_month ```

At the startup, our stickiness ratio went through three distinct phases. In the early days (pre-product-market fit), we sat around 8 to 10%. Users were signing up, checking portfolios, and disappearing. After we shipped social features (portfolio sharing, discussion threads, and follow graphs), stickiness climbed to 18 to 22%. That was the inflection that told us we had shifted from a utility to a social product. By the time we entered acquisition conversations, we had pushed stickiness to 26% on our core cohort (users who followed at least five other users). That number, contextualized against social platform benchmarks, was part of the acquisition narrative.

Benchmarks by Category

Benchmarks matter because a 20% stickiness ratio means completely different things for a messaging app versus a B2B SaaS tool. Here is what I have observed across my consulting work and the publicly available data:

Messaging and communication (50%+). WhatsApp, Slack for active teams, and iMessage-class products. These products are woven into daily communication. Anything below 50% for a messaging product signals a retention problem.

Social platforms (20 to 30%). Facebook historically sat around 50 to 60% (an outlier). Instagram and Twitter have been in the 25 to 35% range. Most social products should target 20%+ as a sign of healthy daily engagement. At the startup, hitting 22% on the blended user base put us in the competitive range for financial social, which skews lower than general social because people do not check their portfolios as compulsively as their social feeds (weekends and market holidays create natural gaps).

Fintech (15 to 25%). Banking apps, investment platforms, and personal finance tools. Usage patterns are tied to financial events (payday, market hours, bill due dates), so daily engagement is structurally lower. At the finance technology company where I work now, the products that track markets have meaningfully higher stickiness on weekdays than weekends for obvious reasons, and the blended number reflects that asymmetry.

B2B SaaS (10 to 20%). Most B2B tools are not daily products. Project management, analytics, and CRM tools are used a few times per week. A 15% stickiness ratio for a B2B SaaS product is healthy, not alarming. The mistake I see consultants make is applying consumer benchmarks to B2B products and creating false urgency.

AI products (highly variable, 5 to 40%). This is the category I watch most closely right now. AI products have wildly inconsistent stickiness because the use case determines the frequency. AI coding assistants can hit 40%+ among developers who use them as a daily tool. AI content generators might sit at 10% because users batch their content creation weekly. There is no stable benchmark yet, and anyone claiming one is extrapolating from insufficient data.

Why DAU/MAU Hides More Than It Shows

The fundamental problem with DAU/MAU is that it is an average, and averages compress the distribution. A product with 20% stickiness could have two very different user bases:

Scenario A: Every user visits about 6 days per month. The distribution is tight. Users have a consistent weekly habit.

Scenario B: 30% of users visit daily (30 days/month) and 70% of users visit once or twice. The average works out to roughly 20%, but the product does not have moderate engagement. It has a small core of power users and a large base of casual visitors who are one step from churning.

These two scenarios require completely different product strategies, but DAU/MAU gives you the same number for both.

At the startup, we learned this the hard way. Our blended stickiness looked healthy at 20%, but when we decomposed by engagement tier, we found that our top 15% of users (the ones creating content and sharing portfolios) had 55%+ stickiness, while the remaining 85% (lurkers and occasional browsers) sat below 10%. The blended number was masking a bimodal distribution. The "average user" that DAU/MAU described did not actually exist.

This is why stickiness is the cousin of [retention curve analysis](/insights/retention-curve-analysis-guide). Retention curves show you the shape of user decay over time. Stickiness tells you about current engagement intensity. You need both, and you need to decompose both by segment before making product decisions.

L7/L28: A Better Version of the Same Idea

If DAU/MAU is the blunt instrument, L7/L28 is the slightly sharper one. L7 counts the number of days a user was active in the past 7 days. L28 counts the number of days active in the past 28 days (using 28 instead of 30 to normalize for month length and align with weekly cycles).

The ratio L7/L28 smooths out daily volatility. DAU can swing by 10 to 15% based on day of week, holidays, or a push notification campaign. L7 already incorporates a week of behavior, so it is less noisy.

More importantly, you can compute L7 and L28 per user, which means you can build distributions, segment users, and identify the bimodal pattern that DAU/MAU hides. When I set up engagement tracking for consulting clients, I almost always recommend L7/L28 over raw DAU/MAU for exactly this reason.

The tradeoff is that L7/L28 is harder to communicate to stakeholders. "Our DAU/MAU is 25%" is a sentence anyone can understand. "The median L7 for our active user base is 3.2 days, and L28 is 11.4, giving an L7/L28 of 0.28" requires more context. For board decks and investor updates, DAU/MAU works. For product decisions, use L7/L28.

Decomposing Stickiness by Segment

The actionable version of stickiness analysis requires segmentation. Here are the decompositions that have produced the most insight in my work:

By acquisition channel. Users from organic search, paid ads, referrals, and app store browse have structurally different engagement patterns. At one consulting client (a fintech startup), organic users had 2x the stickiness of paid users. The paid campaigns were driving volume but not habit formation. That finding changed their budget allocation within a month.

By activation status. Users who completed a key onboarding action versus those who did not. This is almost always the highest-leverage segmentation. The stickiness gap between activated and non-activated users is typically 3 to 5x in my experience.

By tenure. New users (first 30 days) versus established users (90+ days). New user stickiness is lower by definition because many of them are still deciding whether to adopt. Established user stickiness is your true engagement signal. If established user stickiness is declining, you have a product problem, not an acquisition problem.

By feature usage. Which features correlate with higher stickiness? At the startup, users who used the social feed daily had 3x the stickiness of users who only checked portfolio performance. That told us exactly where to invest engineering time.

Python: Calculating DAU/MAU with Rolling Windows

Here is a practical implementation for computing DAU/MAU and L7/L28 from raw event data. This uses rolling windows to produce a daily time series of stickiness rather than a single snapshot.

```python import pandas as pd import numpy as np

def compute_stickiness( events: pd.DataFrame, user_col: str = "user_id", date_col: str = "event_date", ) -> pd.DataFrame: """ Compute daily DAU/MAU and L7/L28 stickiness from raw event data.

Parameters ---------- events : DataFrame with at least user_id and event_date columns. user_col : Name of the user identifier column. date_col : Name of the date column (will be coerced to datetime).

Returns ------- DataFrame indexed by date with columns: dau, mau, dau_mau_ratio, l7_median, l28_median, l7_l28_ratio """ events = events.copy() events[date_col] = pd.to_datetime(events[date_col])

# deduplicate: one row per user per day daily_active = ( events[[user_col, date_col]] .drop_duplicates() .assign(active=1) )

date_range = pd.date_range( daily_active[date_col].min(), daily_active[date_col].max(), )

records = [] for current_date in date_range: window_28 = current_date - pd.Timedelta(days=27) window_7 = current_date - pd.Timedelta(days=6)

mask_day = daily_active[date_col] == current_date mask_28 = ( (daily_active[date_col] >= window_28) & (daily_active[date_col] <= current_date) ) mask_7 = ( (daily_active[date_col] >= window_7) & (daily_active[date_col] <= current_date) )

dau = daily_active.loc[mask_day, user_col].nunique() mau = daily_active.loc[mask_28, user_col].nunique()

# per-user L7 and L28 for users active in the 28-day window user_days_28 = ( daily_active.loc[mask_28] .groupby(user_col)[date_col] .nunique() ) user_days_7 = ( daily_active.loc[mask_7] .groupby(user_col)[date_col] .nunique() )

records.append({ "date": current_date, "dau": dau, "mau": mau, "dau_mau_ratio": dau / mau if mau > 0 else 0, "l7_median": user_days_7.median() if len(user_days_7) > 0 else 0, "l28_median": user_days_28.median() if len(user_days_28) > 0 else 0, })

result = pd.DataFrame(records).set_index("date") result["l7_l28_ratio"] = np.where( result["l28_median"] > 0, result["l7_median"] / result["l28_median"], 0, ) return result ```

This gives you a daily time series you can plot, alert on, and decompose. Add a segment column to the events DataFrame and call the function per segment to get the decomposed view.

When Stickiness Works as a North Star (and When It Does Not)

Some teams use stickiness as their [North Star metric](/insights/north-star-metric-framework), which works for social products but fails for others.

Stickiness works as a North Star when daily engagement is structurally tied to the product's value proposition. Social networks, messaging apps, and news products deliver value through frequent, habitual use. For these products, higher stickiness directly predicts retention, monetization, and network effects. At the startup, stickiness was our North Star because a financial social network that people do not visit daily is just a brokerage comparison tool.

Stickiness fails as a North Star when the product's value is delivered in infrequent, high-impact interactions. Tax software, insurance platforms, and quarterly reporting tools are valuable precisely because they solve a problem thoroughly, not because users return daily. A tax product with 5% DAU/MAU is not broken. It is working as designed. Forcing stickiness higher in this context leads to engagement theater: push notifications, gamification, and content feeds that exist to inflate the number rather than to deliver value.

The test: ask "would our users be better off if they used this product more frequently?" If the answer is genuinely yes, stickiness is a valid North Star. If the answer is "only if we manufactured a reason for them to come back," it is not.

Common Traps

Comparing raw DAU/MAU across products with different use frequencies. A 15% stickiness ratio for a banking app and a 15% ratio for a social app represent very different levels of health. Always benchmark within category.

Using DAU/MAU to measure the impact of a feature launch. DAU/MAU is a lagging indicator with a 28-day lookback. A feature launched today will take weeks to fully register in the MAU denominator. Use shorter-window metrics (L3, L7) for feature impact measurement.

Optimizing for DAU without watching MAU quality. It is possible to increase DAU/MAU by pushing notifications that bring back low-quality users for a single session. DAU spikes, MAU stays flat, and the ratio improves. But the returning users are not forming habits. They clicked a notification, spent 30 seconds, and left. Watch session depth alongside stickiness.

Ignoring day-of-week effects. Products with weekday-heavy usage (finance, B2B) will have DAU/MAU ratios that swing by 5 to 10 percentage points between Monday and Saturday. Report the 7-day rolling average, not the raw daily number.

Moving Beyond Stickiness

DAU/MAU is a starting point. It tells you "how often do people come back" but not "why do they come back," "what do they do when they are here," or "are they getting value." The teams that build durable products treat stickiness as one input into a broader measurement system that includes retention curves, activation rates, and feature-level engagement.

The progression I recommend to clients: start with DAU/MAU because it is simple and communicable. Decompose by segment to find the distribution underneath. Transition to L7/L28 for product decisions. And connect stickiness to the outcomes that matter (retention, expansion, revenue) so you can distinguish between engagement that predicts value and engagement that is noise.

I help teams move beyond vanity engagement metrics to measurement systems that predict retention and revenue. [lester@gradientgrowth.com](mailto:lester@gradientgrowth.com)

Want frameworks like this for your company?

I work with 3 to 4 AI-era companies at a time, building the analytics systems that turn data into decisions. If that sounds like what you need, let’s talk.

Get Your Free Diagnosis

Keep Reading