Metric

What is active member rate?

What does an active member rate chart look like in Metabase?

Plot the rate as a monthly line with the definition — posts, replies, and reactions — printed right in the card title, so nobody mistakes it for a different active count. The steady climb means engagement is deepening as the community grows, while December's dip is the quiet holiday stretch that touches every activity metric and recovers on its own.

Active member rate in Metabase: a line chart of the share of members active each month.
Active member rate as a Metabase card, built from exported community and event data. Figures are illustrative.

Definition

Active member rate is the share of members who were active in a window — the DAU/MAU idea applied to a community. Everything hinges on the written definition of 'active': posts, replies, and reactions are visible everywhere, but read-only activity is not — Discourse logs reads per member, while chat platforms like Slack and Discord mostly do not expose them — so lurkers are counted or invisible depending on the platform, not on your intent. Pick the qualifying signals, pick the window (30 or 90 days), and print both on the dashboard.

Formula: Active member rate = members with a qualifying action in the window / total members × 100

What data do you need?

  • Activity events — posts, replies, reactions — with member IDs and timestamps
  • A membership table with join dates and deletion flags, for an honest denominator
  • A written definition of 'active': the qualifying signals and the window
  • Read or login events where the platform exposes them, kept as a separate signal
  • A staff flag, so team activity does not pad the rate

SQL pattern

Monthly active member rate with a stated definition (PostgreSQL) PostgreSQL
WITH months AS (
  SELECT generate_series(
    date_trunc('month', CURRENT_DATE - INTERVAL '12 months'),
    date_trunc('month', CURRENT_DATE - INTERVAL '1 month'),
    INTERVAL '1 month'
  )::date AS month
), members AS (
  -- Denominator: members who had joined before the month ended and
  -- were not deleted before it started.
  SELECT
    m.month,
    COUNT(*) AS total_members
  FROM months m
  JOIN community_members cm
    ON cm.joined_at < m.month + INTERVAL '1 month'
   AND (cm.deleted_at IS NULL OR cm.deleted_at >= m.month)
  GROUP BY m.month
), active AS (
  -- Active = posted, replied, or reacted in the month. That is the
  -- definition this card uses; state it in the card title, because
  -- adding logins or reads produces a different (larger) number.
  SELECT
    date_trunc('month', e.occurred_at)::date AS month,
    COUNT(DISTINCT e.member_id) AS active_members
  FROM community_activity_events e
  WHERE e.event_type IN ('post', 'reply', 'reaction')
  GROUP BY 1
)
SELECT
  m.month,
  mem.total_members,
  COALESCE(a.active_members, 0) AS active_members,
  ROUND(
    100.0 * COALESCE(a.active_members, 0)
    / NULLIF(mem.total_members, 0), 2
  ) AS active_member_rate_pct
FROM months m
JOIN members mem USING (month)
LEFT JOIN active a USING (month)
ORDER BY m.month;

Common pitfalls

Leaving 'active' undefined and letting each chart pick its own signals. → Write the definition once — which events qualify, over which window — and put it in the card title. A 30-day posts-only rate and a 90-day any-signal rate are different metrics that happen to share a name.
Comparing active member rates across platforms with different read visibility. → A Discourse forum that logs reads will always out-count a Slack workspace that cannot see them. Label every rate with its signal source, and only compare rates built from the same signals.
Counting logins or presence as activity on always-on chat platforms. → Desktop clients auto-connect at startup, so 'online' is not participation. Keep presence-based counts as a separate labeled card if you keep them at all.
Mixing windows between the numerator and the trend. → A 7-day-active count charted monthly whipsaws with holidays. Match the window to the reporting grain — and if you want the short and long windows together, make it a stickiness ratio deliberately rather than by accident.

Where does this metric apply?

This metric commonly uses data from Discourse, Circle, Discord, Slack, Bettermode, plus any warehouse models built on exported community and event records at the same grain.

Dashboards

Integrations

Metrics

Analytics

FAQ

How is active member rate different from member growth rate?
Member growth rate measures how the community's size is changing over time; active member rate measures how deep engagement runs right now. They move independently — a community can grow fast while its active rate collapses, which usually means acquisition is outrunning onboarding. Read them as a pair.
What is a community stickiness ratio?
It is the 7-day-active count divided by the 30-day-active count — the community version of DAU/MAU. A ratio near 1 means the people who show up in a month show up most weeks; a low ratio means engagement is occasional even among your actives. It uses the same activity definition as the rate, so build it from the same events model with two windows.