Daily Active Users (DAU)
Number of unique users who engage with your product within a 24-hour period
Overview
Daily Active Users (DAU) measures the number of unique users who actively engage with your product or service within a 24-hour period. It's a critical metric for understanding user engagement, product stickiness, and overall product health.
DAU provides insights into how frequently users return to your product and the level of engagement you're achieving. When combined with MAU, it forms the foundation for calculating user stickiness and understanding long-term user behavior patterns.
DAU = Count of Unique Users Who Performed Activity on a Given Day
Daily Active Users
Unique users active in a single day
Monthly Active Users
Unique users active in a 30-day period
Stickiness Ratio
DAU/MAU ratio showing engagement frequency
Engagement Benchmarks
Social Media: 20-25% stickiness ratio
SaaS Products: 10-15% stickiness ratio
Mobile Games: 15-30% stickiness ratio
Why It Matters
- Product Health: Indicates overall product engagement and user satisfaction
- User Retention: Shows how frequently users return to your product
- Feature Impact: Measures impact of new features on daily engagement
- Revenue Correlation: Often correlates with revenue for usage-based products
- Growth Tracking: Key metric for tracking sustainable growth
- Investor Interest: Critical metric for fundraising and valuation
How to Measure It
Track DAU by counting unique users who perform qualifying activities each day, with proper handling of time zones and activity definitions.
Basic DAU Calculation
-- Calculate Daily Active Users
WITH daily_activity AS (
SELECT
DATE_TRUNC('day', event_timestamp) as activity_date,
user_id,
COUNT(*) as events,
COUNT(DISTINCT session_id) as sessions
FROM user_events
WHERE event_timestamp >= CURRENT_DATE - INTERVAL '30 days'
AND event_name IN ('page_view', 'feature_used', 'action_taken') -- Define qualifying activities
GROUP BY 1, 2
)
SELECT
activity_date,
COUNT(DISTINCT user_id) as daily_active_users,
SUM(events) as total_events,
SUM(sessions) as total_sessions,
ROUND(SUM(events)::FLOAT / COUNT(DISTINCT user_id), 2) as avg_events_per_user,
ROUND(SUM(sessions)::FLOAT / COUNT(DISTINCT user_id), 2) as avg_sessions_per_user
FROM daily_activity
GROUP BY 1
ORDER BY activity_date DESC;
DAU vs MAU Stickiness Analysis
-- Calculate stickiness ratio (DAU/MAU)
WITH daily_users AS (
SELECT
DATE_TRUNC('day', event_timestamp) as date,
COUNT(DISTINCT user_id) as dau
FROM user_events
WHERE event_timestamp >= CURRENT_DATE - INTERVAL '60 days'
GROUP BY 1
),
monthly_users AS (
SELECT
date,
COUNT(DISTINCT user_id) OVER (
ORDER BY date
ROWS BETWEEN 29 PRECEDING AND CURRENT ROW
) as mau_30_day
FROM (
SELECT DISTINCT
DATE_TRUNC('day', event_timestamp) as date,
user_id
FROM user_events
WHERE event_timestamp >= CURRENT_DATE - INTERVAL '60 days'
) unique_daily_users
)
SELECT
d.date,
d.dau,
m.mau_30_day as mau,
ROUND(100.0 * d.dau / NULLIF(m.mau_30_day, 0), 2) as stickiness_ratio,
ROUND(d.dau - LAG(d.dau) OVER (ORDER BY d.date), 2) as dau_change,
ROUND(100.0 * (d.dau - LAG(d.dau) OVER (ORDER BY d.date)) / NULLIF(LAG(d.dau) OVER (ORDER BY d.date), 0), 2) as dau_growth_rate
FROM daily_users d
JOIN monthly_users m ON d.date = m.date
WHERE d.date >= CURRENT_DATE - INTERVAL '30 days'
ORDER BY d.date DESC;
Cohort-Based DAU Analysis
-- Analyze DAU by user acquisition cohort
WITH user_cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', MIN(event_timestamp)) as cohort_month
FROM user_events
GROUP BY 1
),
daily_cohort_activity AS (
SELECT
DATE_TRUNC('day', e.event_timestamp) as activity_date,
c.cohort_month,
COUNT(DISTINCT e.user_id) as active_users,
COUNT(DISTINCT c.user_id) as cohort_size
FROM user_events e
JOIN user_cohorts c ON e.user_id = c.user_id
WHERE e.event_timestamp >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY 1, 2
)
SELECT
activity_date,
cohort_month,
active_users,
cohort_size,
ROUND(100.0 * active_users / cohort_size, 2) as cohort_activity_rate,
EXTRACT(days FROM AGE(activity_date, cohort_month)) as days_since_acquisition
FROM daily_cohort_activity
WHERE cohort_month >= CURRENT_DATE - INTERVAL '12 months'
ORDER BY activity_date DESC, cohort_month;
Activity Definition
Define "active" based on meaningful engagement: login + action for SaaS, content interaction for media, or core feature usage for apps.
Best Practices
1. Defining Active Users
- Use meaningful actions beyond just logins
- Align with core product value delivery
- Exclude automated/bot activity
- Consider different definitions for different user types
2. Time Zone Considerations
- Use consistent timezone for DAU calculations
- Consider business timezone vs. user timezone
- Account for global user base distribution
- Track local DAU for regional analysis
3. Segmentation Strategies
- By user acquisition channel
- By user role or subscription tier
- By geographic region
- By device type (web, mobile, desktop)
4. Growth Strategies
- Onboarding: Drive users to first value quickly
- Habit Formation: Create daily use cases and triggers
- Feature Development: Build features that encourage daily usage
- Notifications: Use thoughtful push/email to drive re-engagement
5. Monitoring and Alerts
- Set up alerts for significant DAU drops
- Monitor weekend vs. weekday patterns
- Track seasonal trends and adjust expectations
- Correlate DAU changes with product releases