Total posts is a vanity number. Total members is a vanity number. “Healthy DAU/MAU is 0.2” is a blog sentence someone invented. The only honest comparison is this week against the last four weeks on the same definition. This article is the metric set and how to read that baseline. It is not how to grow DAU — that piece already defined stickiness, the four conversion doors, and the “do not celebrate” list. Read it. Then use this as the instrument panel.
It is also not the GA4 + Search Console integration (one Measurement ID, a sitemap, a product link). Traffic is a cousin. Health is “did a person come back, speak, get answered, and did staff drown.”
XenForo community notebooks we queried did not ship lurker ratios or reply-latency formulas. Discourse official material names Data Explorer and Solved; it does not publish a universal healthy solved rate. Where a number is not in those sources, this article will not invent it. It will tell you what to count, where the count usually lives, and what a move means on your sheet.
The panel (seven instruments)
Hang these on a staff page. One line each. Same window every week.
| Instrument | Question it answers | Honest proxy | Fake cousin |
|---|---|---|---|
| New → first post | Of people who confirmed this week, who spoke? | Confirmed accounts with ≥1 public post inside 7 days | Registrations |
| Time to first human reply | Did the room notice? | Median hours from a new member’s first public post to the first non-auto human reply | First like, auto-welcome |
| Topics with a reply | Is the room a conversation or a graveyard? | Share of topics started this week that have ≥1 reply by someone other than the author | Total replies (one argument can dominate) |
| DAU / MAU (or WAU / MAU) | Of people who still have an account, who used it? | Platform stickiness, or your own session-active definition | Guest page views |
| Lurker ratio | Readers versus writers | Session-active accounts with 0 public posts this window ÷ session-active | “Everyone who never posted since 2019” |
| Mod load | Can staff still think? | Flags / reports / queue items per staff-hour, or per 100 public posts | Total warnings issued (includes one busy week of spam) |
| Solved rate | Did questions close? | Solved topics ÷ topics where Solved (or XenForo question+solution) is on | All topics, including memes |
You may drop Solved if you do not run a support room. You may not drop time-to-first-reply. That one is the product.
Write definitions next to the table. Platforms disagree about “active,” “post,” and “solved.” The rest of this article is those definitions, then how to read a move.
Build a baseline before you change the product
Week zero is measurement. Do not ship a ritual, a contest, a new category, or a trust-level tweak the same week you start counting. You will not know what moved. The growth article already said four weeks. Here is the sheet.
Columns (one row per week).
- Week start date.
- Confirmed new accounts.
- Of (2), first public post inside 7 days (count, not percent — percents hide small N).
- Median hours to first human reply on those first posts (sample if you must: last 20).
- Topics started this week.
- Of (5), topics with a non-author reply.
- Session-active DAU average, WAU, MAU — one source, labelled.
- Session-active lurkers this week (0 public posts).
- Queue items opened / staff-hours (or a cruder “hours we spent in the queue”).
- Solved (or question-solution) count and eligible topic count.
- Annotations: patch day, AMA, outage, holiday, spam wave, staff vacation.
Rules for the sheet.
- Same source all month. If you switch from XenForo last-activity to GA4 sessions, you started a new baseline. Say so.
- Staff split. If you do not exclude staff (and obvious alts), you will congratulate yourselves for answering your own threads.
- Mark rented spikes. Contests, AMAs, launch mails. The events article already told you to count those separately.
- No industry column. Do not add “benchmark” from a vendor deck. You do not have their definition.
If two sources disagree, believe the smaller number until you find the bug. Usual bugs: crawlers in GA4, RSS/API pings, a mobile keep-alive, deleted posts you still count, guests in DAU.
Four weeks is a shape. Twelve is better if you have a season. One week is a mood.
Instrument 1 — New → first post
Definition. Denominator: accounts that became able to post this week (XenForo: confirmed / left Unconfirmed. Discourse: finished signup, including Discourse ID). Numerator: those accounts with at least one public post that is not a deleted draft, not a PM, not a chat line unless you have decided chat is first-class (usually you have not).
How to get it.
- XenForo: user list or a CSV: register date, last activity, message count. Official user Counters (messages, trophy points, reaction score) are editable on the profile; do not treat an edited counter as a first post. Custom member statistics blocks under Users can show top X for a search — they are not this funnel. The REST API exposes
/api/statsfor site-level stats; it will not replace a weekly cohort export. The official notebook we queried did not print a full “ACP Statistics” dashboard tour. XenForo does log daily counts (registrations, messages, attachments) in the ACP statistics/logs area — use those as totals, not as this cohort. - Discourse: Data Explorer (below) or a CSV of users by
created_atandpost_count. Admin dashboard totals are not a cohort. - Spreadsheet: twenty minutes every Monday. A spreadsheet you fill beats a dashboard you do not trust.
How to read a move (your baseline, not a target).
| Move | Often means | Usually is not |
|---|---|---|
| Registrations up, first posts flat | Arrival works; first screen or permission puzzle | “We need more ads” |
| Both up after a contest | Rented entries | A new habit |
| First posts up, second sessions (from the growth article) flat | They spoke into a void or a one-shot prompt | A trophy problem |
| First posts down after you tightened links | Established / TL0 gate is the lurker tax | “Quality improved” until you check Support |
Pair this with onboarding methods. If the door is Permitted (sandbox, Established), fix the prompt or the gate. If the door is Oriented, fix start-here.
Instrument 2 — Time to first human reply
Definition. For first public posts by accounts younger than 14 days (or your own window), hours until the first reply by a human who is not an auto-welcome and not the author. Likes do not count. Discourse Chat lines do not count unless you declared Chat the support desk — declare it or do not.
Community sources did not prescribe a minute target. Do not invent “healthy is under two hours.” Pull last month’s twenty first-posts. Write the hours. That distribution is the product.
How to get it.
- Manual sample: twenty threads, a column of hours. Honest and cheap.
- Discourse Data Explorer: official plugin for read-only SQL on the live database. Hosted listing: Business and Enterprise. Enable in site settings, then Admin → plugins → Data Explorer. Notebook use-cases that are in sources: time to first response, activity in hidden categories, retention-style reports, anonymous vs logged-in API requests, progress toward TL3 requirements, cohorts for bulk badge award (run query → CSV of emails → Bulk Award). Seeded queries exist; you may write your own. This article will not invent a SQL schema. Copy a query from Meta’s “cool queries” topic only after you read it against your version.
- XenForo: no official “time to first reply” report in the materials we used. Sample, or an add-on / warehouse you name and own. Do not pretend GA4 Enhanced measurement is a reply clock. It is not.
How to read the distribution.
- Staff answer in hours, regulars never: you have a helpdesk. Fine if you staff holidays. Fragile if you do not.
- Regulars answer, staff only appear for fights: you have a community. Protect those regulars. They are DAU you cannot buy.
- Nobody answers: you do not have a notification problem. You have an empty room. More pings will not fill it.
- Median fine, tail of 10-day holes: the holes are the ones new people remember.
Cap the staff reply budget in writing. A median you cannot staff is a lie you tell on the sheet.
Instrument 3 — Topics with a reply
Definition. Topics (threads) created in the window, minus staff-only / private if you cannot see them as a member. Success: at least one reply by someone other than the author. A 40-reply argument in one thread is one success, not forty.
This is the “is anyone home” instrument the last-post column used to answer by eye. Discourse’s infinite Latest hides emptiness differently than a XenForo tree; the share still tells you.
How to read it.
- Share drops after you added nodes: you split the room. XenForo community practice: deep trees look empty. Prefixes, not new forums.
- Share drops after a launch dump of seed threads: those threads are decoration. Seed less, or staff them.
- Share high, new→first post low: regulars are talking to each other. The onboarding catalog is the door, not another regulars-only ritual.
Do not average this with “total replies.” One drama thread will flatter you.
Instrument 4 — DAU / MAU (stickiness)
The growth article already defined this. Short version so the panel is complete.
Session-active is the headline: a logged-in page view (or a Discourse request that is not a bot) on that calendar day / rolling month. Poster-active is the quality check: at least one public post. Discourse’s admin dashboard exposes stickiness as DAU/MAU or WAU/MAU — a definition, not a target. XenForo notable-members and “users online” are not a DAU report.
GA4 answers “what did they do after they arrived,” including guests and crawlers if you are sloppy. Use it for trend across a redesign, not as DAU unless you can filter to logged-in. Search Console is discovery, not health.
How to read a move.
| Pattern | Read it as |
|---|---|
| MAU up, DAU/MAU down | Registrations without return. Launch week does this on purpose |
| DAU up, poster-active flat | Readers, or a notice that got clicks. Magazine, not community — allowed if intentional |
| Both down after you split to Discord | You moved the living room. See forum vs Discord |
| Spike on one annotated day | Reach. Keep the annotation |
Do not set a target copied from a SaaS community whitepaper. Their MAU includes people who opened an app to dismiss a push.
Instrument 5 — Lurker ratio
Definition. Among session-active accounts in the window, the share with zero public posts in that same window. Not “registered three years ago and never posted.” Those are ghosts, not lurkers. Ghosts belong in a hygiene report (still in MAU? purge? fine).
A lurker is not a failure. Most rooms have more readers than writers. The failure is a lurker who wanted to post, could not see where, and left. You cannot see intent in the database. You can see first-post reply time and whether the first screen looks empty.
How to read it.
- Lurker ratio up, time-to-reply worse: they learned the room is a museum.
- Lurker ratio up, first screen is a 40-node tree: they never found the live room.
- Lurker ratio down only because DAU collapsed: you did not convert lurkers. You lost readers. Do not celebrate a “more engaged” remnant.
Segment: accounts created in the last 14 days versus everyone else. New lurkers are an onboarding problem. Old lurkers who still visit are often the healthy majority.
Instrument 6 — Mod load
Definition. Work that staff must clear for the room to stay usable, divided by the time you actually have.
Pick one numerator and keep it:
- XenForo: items in the approval / report queues, plus the silent work (moves, merges) if you log it.
- Discourse: review-queue items (flags). Diverse TL3 flags on TL0 can auto-silence — those still appear as work. Watched-word hits if you treat them as queue.
- Hours in the queue if your team already timesheets. Headcount of “we stayed late” if you do not.
Denominator: staff-hours you scheduled, not “we are always here.”
How to read it.
- Load up, public posts flat: spam wave, or you turned TL0 / confirmation off. Trust levels exist so this number does not become the whole job.
- Load up, public posts up by the same factor: the room grew. Hire or shrink the surface (fewer rooms, stricter first-post links).
- Load down because nobody flags: either healthy or nobody with flag permission is around (TL0 cannot flag). Check which.
This is not a toxicity playbook. It is whether the people who keep the room habitable still have a Tuesday.
Instrument 7 — Solved rate (when you run questions)
Discourse Solved (official discourse-solved): users mark a reply as the solution; check on the topic list; solution under the first post. Enable per category or globally (allow solved on all topics). Category setting: “Allow topic owner and staff to mark a reply as the solution.” Default accept group includes TL1. Filter: append ?solved=yes to a category or /latest. Hosted: Pro, Business, Enterprise. The docs-and-support article already used Solved as ROI language: accepted answers are questions that did not become tickets. That is a use, not a benchmark.
XenForo question threads: the question stays on every page; a solution can be marked; dedicated question forums get Unsolved / Your questions / Your answers. If you cannot staff solutions, do not enable the type.
Definition. Eligible topics (Solved-on category, or question type) created in the window, share marked solved by the end of the window or a 14-day lag you write down. Do not include hangout topics.
How to read it.
- Rate down, time-to-reply up: nobody is closing loops. Assign (Discourse) or a staff watch on Unsolved.
- Rate down, time-to-reply fine: people answer and nobody clicks Solved. That is a habit, not a crisis — unless you report ROI upstairs.
- Rate up because staff mark “I agree” as the solution: you broke the instrument.
There is no official healthy percentage in the notebooks. Your last four weeks are the number.
Where the numbers live (jobs, not tours)
XenForo
| Source | Use it for | Do not use it for |
|---|---|---|
| ACP daily statistics / logs (registrations, messages, attachments) | Totals and “did cron die” | Cohorts, reply time |
| User last activity + message count (list, batch, CSV) | New→first post, lurkers, poster-active | Guest health |
| Counters on the profile | Debugging a trophy, not analytics | Truth after a manual edit |
| Custom member statistics blocks | Top X leaderboards | Health |
/api/stats |
External warehouse | A complete panel |
| GA4 Measurement ID | Sessions, first screen after a redesign | Reply time, solved |
| What’s New / New posts as a human | Emptiness you will not see in totals | A metric |
Promotions, notices, and trophies share criteria. That is targeting, not reporting.
Discourse
| Source | Use it for | Do not use it for |
|---|---|---|
| Admin dashboard stickiness | DAU/MAU or WAU/MAU direction | A target |
| Review queue volume | Mod load | Toxicity quality |
Solved + ?solved=yes |
Instrument 7 | Hangout health |
| Data Explorer (Business+ hosted, or the plugin self-hosted) | Reply time, hidden categories, retention-style SQL, TL3 progress, badge cohorts | Writes (it is read-only) |
| Trust-level admin | Who is sandboxed | “Engagement score” |
| GA4 / your own warehouse | Same as XenForo | Replacing Data Explorer with guesses |
If you are on hosted Free or Pro, you may not have Data Explorer. Then the panel is dashboard + CSV + a 20-thread sample. That is enough. Do not invent SQL you cannot run.
Everyone
A staff spreadsheet is a valid production system. Date it. Put it next to the annotations. The week you stop filling it, you are back to “feels quiet.”
How to read a week without fooling yourself
Walk the panel in this order. Stop at the first broken instrument.
- New → first post down? Orientation or permission. Onboarding catalog, test account, TL0/Established honesty.
- Time to first reply worse? Staff budget or empty room. Do not buy a widget.
- Topics with a reply down? IA. Too many rooms, or seed threads nobody owns. Prefixes, not nodes.
- DAU/MAU down with (1)–(3) fine? Return hook: first screen, watches, ritual. Growth article.
- Lurker ratio up with (2) worse? They are learning silence. Public replies, not more PMs.
- Mod load up? Sandbox, confirmation, watched words — not a growth campaign this week.
- Solved down in a support room? Close loops or stop advertising support.
If all seven move the “wrong” way in a week you annotated as an AMA plus a Discord mirror plus a new category, you did not learn anything. Undo one change at a time.
If all seven look fine and people still say the board is dead, you are measuring the wrong rooms. Exclude Archive, Off-topic, and staff. Measure the room a stranger lands in.
What not to put on the panel
- Lifetime post count / lifetime members. Always up. Always useless.
- Users online right now. A mood. Hide the widget if the number embarrasses you; do not manage to it.
- Trophy points, reaction score, Discord online. Recognition and another product. Rewards are not health.
- GA4 bounce rate on a thread page. Forum pages are not landing pages. You will “fix” a number that is doing its job.
- A single “health score” you averaged. Instruments disagree on purpose. An average hides the broken door.
- Vendor benchmarks. Different definition, different season, different staff. Omit.
Worked read (fictional shape, not a benchmark)
You do not need these numbers to be yours. You need the sentences.
Week 1–4 baseline: first-post count stable, median reply 6 hours, most new topics get a non-author reply, stickiness flat, lurkers a majority of session-active (expected), queue quiet, Support solved when you remember to click it.
Week 5 you run a screenshot contest and open Holiday / Events. Registrations and posts spike. Annotation: contest. New→first post among non-entries is unchanged. Time-to-reply worse (staff were judging). Topics-with-reply down (empty event node). DAU up. Lurkers up (spectators). Mod load flat. Solved ignored.
Week 6 the contest ends. DAU returns to week 4. The event node is empty. If you congratulate week 5, you will schedule week 7 the same way. If you read the panel, you delete or merge the node, keep the Contest prefix in the live room, and put staff hours back on first replies. That is a health decision. It is not a vibe.
A checklist you can paste into a staff forum
- Seven instruments defined in one paragraph each, including who is excluded (staff, guests, private).
- One source per instrument, named.
- Four weeks of rows before the next product change.
- Annotations for events, patches, holidays, spam, vacations.
- Monday ritual: fill the row, walk the seven questions in order, write one action or “hold.”
- Data Explorer (if you have it) or a 20-thread sample for reply time — not a guess.
- Solved only counted in rooms where the tool is on.
- No benchmark column. No health-score average.
FAQ
Can we use Google Analytics as the whole panel?
No. GA4 does not know a reply happened unless you later build a custom tag this site has already refused to invent as core. Use GA4 for arrival and first-screen trend. Use the platform for speech and queue.
We are too small for Data Explorer / APIs.
Twenty threads and a spreadsheet is the correct stack. Add SQL when a human can no longer sample.
Should we publish the panel?
Publish qualitative (“we answer first posts on weekdays”). Keep the sheet staff-only. Public dashboards become scoreboards and then become gamed.
What if our season is the whole product?
Annotate the season. Compare this season’s weeks to the same weeks last season, still on your definitions. That is still your baseline, just a longer one. Post-hype habits are what you do when the season column goes quiet.
Takeaways
- Seven instruments: new→first post, time to first human reply, topics with a reply, DAU/MAU, lurker ratio, mod load, solved. Definitions on the same page.
- Your last four weeks are the only benchmark this article will allow.
- XenForo: daily logs, last activity, message count, optional
/api/stats. Discourse: dashboard stickiness, review queue, Solved, Data Explorer by name (Business+ hosted). - Walk the panel in order. Stop at the first broken door. Do not average a “health score.”
- Annotate rented spikes. Measure the room a stranger sees.
Fill the sheet for a month before you buy a dashboard. The sheet will tell you which article to open next — onboarding, events, Discord split, or the quiet-season habits.

