Monthly Active Users (MAU)
Number of unique users who engage with your product within a 30-day period
Overview
Monthly Active Users (MAU) measures the number of unique users who engage with your product or platform within a 30-day period. This fundamental product metric reflects user engagement depth and is crucial for understanding product adoption, retention, and overall health.
MAU provides insights into user behavior patterns, product stickiness, and growth sustainability. It's a key metric for product-led growth companies and essential for understanding the relationship between user acquisition and engagement.
MAU = Count of Unique Users Active in Past 30 Days
Power Users
Daily usage, multiple features
Regular Users
Weekly usage, core features
Casual Users
Monthly usage, basic features
At-Risk Users
Declining engagement
Activity Definition
Define "active" based on meaningful product interactions - logins alone aren't sufficient. Consider actions like creating content, completing tasks, or engaging with core features.
Why It Matters
- Product Health: Indicates overall product adoption and user satisfaction
- Growth Tracking: Shows trajectory of user base expansion over time
- Engagement Depth: Reveals how well users are adopting your product
- Retention Insights: Helps identify user behavior patterns and drop-off points
- Product Investment: Guides feature development and resource allocation
- Business Value: Correlates with revenue potential and customer lifetime value
How to Measure It
Calculate MAU by counting unique users who performed meaningful activities within the last 30 days, with segmentation by user type, feature usage, and engagement level.
Basic MAU Calculation
-- Calculate Monthly Active Users with engagement breakdown
WITH user_activity AS (
SELECT
user_id,
DATE_TRUNC('month', event_date) as activity_month,
COUNT(DISTINCT DATE(event_date)) as active_days,
COUNT(*) as total_events,
COUNT(DISTINCT event_type) as unique_event_types,
MAX(event_date) as last_activity_date,
MIN(event_date) as first_activity_month
FROM user_events
WHERE event_date >= CURRENT_DATE - INTERVAL '90 days'
AND event_type IN ('login', 'create', 'edit', 'share', 'collaborate') -- Define meaningful actions
GROUP BY 1, 2
),
monthly_mau AS (
SELECT
activity_month,
COUNT(DISTINCT user_id) as total_mau,
COUNT(DISTINCT CASE WHEN active_days >= 20 THEN user_id END) as power_users,
COUNT(DISTINCT CASE WHEN active_days BETWEEN 10 AND 19 THEN user_id END) as regular_users,
COUNT(DISTINCT CASE WHEN active_days BETWEEN 5 AND 9 THEN user_id END) as casual_users,
COUNT(DISTINCT CASE WHEN active_days < 5 THEN user_id END) as light_users,
ROUND(AVG(active_days), 1) as avg_active_days,
ROUND(AVG(total_events), 1) as avg_events_per_user,
ROUND(AVG(unique_event_types), 1) as avg_feature_usage
FROM user_activity
GROUP BY 1
)
SELECT
activity_month,
total_mau,
power_users,
regular_users,
casual_users,
light_users,
ROUND(100.0 * power_users / total_mau, 1) as power_user_percentage,
ROUND(100.0 * (power_users + regular_users) / total_mau, 1) as engaged_user_percentage,
avg_active_days,
avg_events_per_user,
LAG(total_mau) OVER (ORDER BY activity_month) as prev_month_mau,
ROUND(100.0 * (total_mau - LAG(total_mau) OVER (ORDER BY activity_month)) /
NULLIF(LAG(total_mau) OVER (ORDER BY activity_month), 0), 1) as month_over_month_growth
FROM monthly_mau
ORDER BY activity_month DESC;
MAU Cohort Analysis
-- Analyze MAU by user cohorts and retention
WITH user_cohorts AS (
SELECT
user_id,
DATE_TRUNC('month', registration_date) as cohort_month,
registration_date
FROM users
WHERE registration_date >= '2023-01-01'
),
cohort_activity AS (
SELECT
uc.cohort_month,
uc.user_id,
DATE_TRUNC('month', ue.event_date) as activity_month,
EXTRACT(month FROM AGE(ue.event_date, uc.registration_date)) as months_since_registration
FROM user_cohorts uc
JOIN user_events ue ON uc.user_id = ue.user_id
WHERE ue.event_date >= uc.registration_date
AND ue.event_type IN ('login', 'create', 'edit', 'share', 'collaborate')
),
cohort_mau AS (
SELECT
cohort_month,
activity_month,
months_since_registration,
COUNT(DISTINCT user_id) as active_users
FROM cohort_activity
GROUP BY 1, 2, 3
),
cohort_sizes AS (
SELECT
cohort_month,
COUNT(DISTINCT user_id) as cohort_size
FROM user_cohorts
GROUP BY 1
)
SELECT
cm.cohort_month,
cs.cohort_size,
cm.activity_month,
cm.months_since_registration,
cm.active_users,
ROUND(100.0 * cm.active_users / cs.cohort_size, 1) as retention_rate,
SUM(cm.active_users) OVER (
PARTITION BY cm.activity_month
ORDER BY cm.cohort_month
) as cumulative_mau_from_cohorts
FROM cohort_mau cm
JOIN cohort_sizes cs ON cm.cohort_month = cs.cohort_month
WHERE cm.months_since_registration <= 12 -- First year retention
ORDER BY cm.activity_month DESC, cm.cohort_month DESC;
Feature-Based MAU Analysis
-- Analyze MAU by feature usage and engagement depth
WITH feature_usage AS (
SELECT
user_id,
DATE_TRUNC('month', event_date) as activity_month,
event_type as feature,
COUNT(*) as usage_count,
COUNT(DISTINCT DATE(event_date)) as days_used_feature
FROM user_events
WHERE event_date >= CURRENT_DATE - INTERVAL '90 days'
GROUP BY 1, 2, 3
),
user_feature_profiles AS (
SELECT
activity_month,
user_id,
COUNT(DISTINCT feature) as features_used,
SUM(usage_count) as total_events,
MAX(days_used_feature) as max_days_used_any_feature,
STRING_AGG(DISTINCT feature, ', ' ORDER BY usage_count DESC) as top_features
FROM feature_usage
GROUP BY 1, 2
),
feature_mau_analysis AS (
SELECT
activity_month,
COUNT(DISTINCT user_id) as total_mau,
COUNT(DISTINCT CASE WHEN features_used >= 5 THEN user_id END) as multi_feature_users,
COUNT(DISTINCT CASE WHEN features_used = 1 THEN user_id END) as single_feature_users,
ROUND(AVG(features_used), 1) as avg_features_per_user,
ROUND(AVG(total_events), 1) as avg_events_per_user,
ROUND(AVG(max_days_used_any_feature), 1) as avg_engagement_days
FROM user_feature_profiles
GROUP BY 1
),
feature_popularity AS (
SELECT
fu.activity_month,
fu.feature,
COUNT(DISTINCT fu.user_id) as feature_mau,
ROUND(AVG(fu.usage_count), 1) as avg_usage_per_user,
ROUND(AVG(fu.days_used_feature), 1) as avg_days_used
FROM feature_usage fu
GROUP BY 1, 2
)
SELECT
fma.activity_month,
fma.total_mau,
fma.multi_feature_users,
fma.single_feature_users,
ROUND(100.0 * fma.multi_feature_users / fma.total_mau, 1) as multi_feature_percentage,
fma.avg_features_per_user,
fma.avg_events_per_user,
fma.avg_engagement_days
FROM feature_mau_analysis fma
ORDER BY fma.activity_month DESC;
Measurement Best Practices
Use rolling 30-day windows, define clear activity thresholds, exclude bot traffic, and segment by user characteristics for actionable insights.
Best Practices
1. Activity Definition
- Define meaningful actions beyond simple logins
- Focus on core value-driving behaviors
- Exclude passive or automated activities
- Regularly review and update activity criteria
2. Segmentation Analysis
- Track MAU by user acquisition source
- Analyze by user type and subscription tier
- Monitor geographic and demographic variations
- Segment by feature usage and engagement level
3. Engagement Optimization
- Onboarding Improvement: Reduce time to first value
- Feature Discovery: Help users find relevant features
- Habit Formation: Create regular use case triggers
- Re-engagement Campaigns: Win back inactive users
4. Retention Connection
- Correlate MAU trends with retention rates
- Identify leading indicators of churn
- Track cohort-based MAU evolution
- Monitor seasonal and cyclical patterns
5. Quality Focus
- Balance growth with engagement quality
- Monitor depth of feature adoption
- Track progression to power user status
- Measure correlation with business outcomes