Saas usage dashboard
@usagemetrics/saas-usage-dashboard
Turn a product events CSV (timestamp, account_id, user_id, event) into one self-contained HTML dashboard: DAU, WAU, MAU, stickiness, active accounts, top features, activation rate, weekly retention, and accounts trending down. No external scripts; open it in any browser or attach it to an email.
- Activity
- New: be the first to try it
- Installs
- 0 installs
- Likes
- 0 likes
- Clones
- 0 clones
What it makes
Real output from this kit
Preview with scripts turned off. Download it to see it run.
- Sample file5 KB, download to openUsage dashboardFrom the kit's tests
Preview with scripts turned off. Download it to see it run.
How this works
- It is a skill: written instructions Claude reads when your request matches what the skill is for. You do not call it by name; just ask for the task.
- While it works, it reads and changes files in the places it lists, nowhere else.
- It runs these commands on your computer: node scripts/usage-dashboard.mjs.
- Nothing runs until you choose to use it, and you can remove it any time.
SKILL.md
SaaS usage dashboard
One command, one HTML file. The file has no external scripts or fonts, so it opens anywhere, works offline, and can be attached to an email or dropped in a shared drive. The numbers come from a script, so they are the same every time.
Inputs
An events CSV in data/ with these columns (extra columns are ignored):
timestamp,account_id,user_id,event
2026-10-30T09:12:00Z,acme-co,acme-u1,created_reporttimestamp: ISO date or datetime, or unix seconds. Times are read as UTC.account_id: the customer (company or workspace).user_id: the person.event: the action name. Use the product's own names; snake_case reads best.
Where to get it: a warehouse query (select occurred_at as timestamp, account_id, user_id, event_name as event from events where occurred_at >= now() - interval '120 days'), an analytics tool's raw export, or the app's own event log. 90 to 120 days of history gives every chart enough data.
Ask the user:
- What is "activated"? The one action that means a new user got value (for example
shared_dashboard). If they do not know, use the default: active on 3 or more distinct days in the first 14 days. - Which events are noise? Logins and page views are ignored for features by default (
login,logout,session_start,page_view,signup,signed_up). Add others with--ignore. - A title for the page (company or product name).
Steps
- Check the file: row count, date range, distinct accounts and users, and the 15 most common events. Point out obvious issues (test accounts, internal users, bots) and offer to filter them into a new file
data/events-clean.csvbefore building. Run:
node scripts/usage-dashboard.mjs data/events.csv --activation-event shared_dashboard --title "Acme usage" --out out/usage-dashboard.htmlOther options:
--as-of 2026-10-30(defaults to the last day in the data; pick a weekday or a full day if the export ends mid-day),--activation-days 14,--ignore login,page_view,heartbeat.- Tell the user where the file is (
out/usage-dashboard.html) and give a five-line read-out fromout/usage-dashboard.json: MAU and its change, stickiness, activation rate, the top feature, and the accounts trending down. - Offer next steps that fit what you saw: the
retention-cohortskit for monthly or account-level retention,activation-funnelto see where new users drop, orcustomer-health-scorefor the accounts trending down.
How to read it (include when sharing)
- Stickiness = average DAU over the last 30 days / MAU. Under 15% is light use, 20 to 30% is healthy for most B2B tools, over 40% is a daily habit.
- Activation only counts users first seen at least
--activation-daysago, so new users are not counted as failures. - Weekly retention is per first-seen week: the share of that cohort active in each later week. The current, partial week is blank.
- Trending down: accounts with at least 20 events in the prior 28 days whose events or active users fell 30% or more in the last 28 days, or with no events for 14 days.
Output template (chat read-out)
Dashboard: out/usage-dashboard.html (as of 2026-10-30)
- MAU 42 (-2% vs prior 30 days), WAU 32, DAU 14. Stickiness 25%.
- Activation 59% (did shared_dashboard within 14 days).
- Top feature: created_report, used by 98% of MAU.
- Trending down: bluebird-labs (quiet 21 days), harbor-retail (-64% events), juniper-bank (-43%).Guardrails
- Events often carry user emails or names in IDs. Do not paste raw rows into chat; the dashboard shows IDs only in the accounts table.
- Do not upload the events file or the dashboard anywhere. The user shares the HTML file.
- If more than 1% of rows are skipped (bad timestamp, missing user), stop and show examples before trusting the numbers.
README.md
SaaS usage dashboard
Turns a raw product events export into one HTML dashboard you can open anywhere: DAU, WAU, MAU, stickiness, active accounts, top features, activation, weekly retention, and the accounts whose usage is dropping. No external scripts, no tracking, nothing to host.
Who it is for: founders, product managers, and customer success leads at B2B SaaS companies who want a usage view without setting up an analytics tool.
Example
Input (examples/events.csv, about 3,000 events from 12 accounts over four months):
timestamp,account_id,user_id,event
2026-10-30T09:12:00Z,acme-co,acm-u1,created_reportRun with --activation-event shared_dashboard. Output: out/usage-dashboard.html with KPI tiles, a 90-day DAU line, weekly active users and accounts, top features, a retention heatmap, activation by week, and this table:
| Account | Events (prior 28d to last 28d) | Change | Signal |
|---|---|---|---|
| bluebird-labs | 63 to 20 | -68% | quiet 21 days |
| harbor-retail | 181 to 66 | -64% | usage down |
Plus out/usage-dashboard.json with every number.
What it can access
- Runs
node scripts/usage-dashboard.mjs(Node built-ins only). - Reads your export from
data/. Writesout/usage-dashboard.htmland.json. - No network. The HTML loads nothing from the internet.
Setup
None. Export events with the four columns to data/events.csv and ask Claude for a usage dashboard.
Files
- README.md
- SKILL.md
- examples/events.csv
- kit.json
- scripts/html.mjs
- scripts/lib.mjs
- scripts/usage-dashboard.mjs
Did it work?
0worked for them0did not work
Sign in to say whether it worked for you.
Nobody has said yet. Tried it? Tell the next person.
