analytics-review
Skill0 starsChanged 7 months agoMITView on GitHub
Pull PostHog funnel metrics and Supabase/Postgres usage data, compare against previous baselines, and surface actionable insights. Use when the user asks to check analytics, review funnel, compare metrics, or see how users are doing.
- Reads credentials
4 other projects use a version of this.
Adopted by
Most recently taken up by
- lohi-ai/babysittheir own version, first seen Nov 8, 2026
- henrique-simoes/Istaratheir own version, first seen Sep 27, 2026
- ApurvaMisra/claude-code-assistanttheir own version, first seen Jul 5, 2026
- m-binimran/creator-packtheir own version, first seen Jun 14, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- henrique-simoes/Istara★ 15same name
- ApurvaMisra/claude-code-assistant★ 8same name
- m-binimran/creator-pack★ 3same name
- lohi-ai/babysit★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository5 other files it gives its agents.
- deep-researchSkill
- linkedin-from-meetingsSkill
- opportunity-analysisSkill
- seo-geoSkill
- storyline-synthesisSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
19 rules. About 0 are common, 10 are distinctive, and 9 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
9
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
No arguments: full review (PostHog funnel + database usage + comparison)
- Distinctive: line 21
Look for credentials in this order:
- Very specific: line 25
Check project .envrc files
- Distinctive: line 26
Check memory files for PostHog project ID and API key
- Very specific: line 32
Check server/.env or .env.local for DATABASE_DSN, DATABASE_URL, POSTGRES_URL, or SUPABASE_URL
- Very specific: line 34
Use the project's Python environment (uv run python3) with asyncpg to query
- Distinctive: line 36
If credentials are missing, ask the user.
- Very specific: line 40
Check the project's PostHog events doc (usually POSTHOG_EVENTS.md) or memory for the event architecture.
- Distinctive: line 44
Use the HogQL query endpoint (legacy insight endpoints may be blocked):
- Very specific: line 117
Run git log --oneline --since="<BASELINE_DATE>" --merges (or without --merges if no merge commits) to see what shipped since the last …
- Distinctive: line 130
When comparing metrics, correlate timing: if a metric spiked on Mar 30 and PR #11 merged Mar 31, note the connection.
- Very specific: line 134
Check memory for previous analytics snapshots (files matching *analytics* or *baseline*).
- Distinctive: line 142
If no baseline exists, this IS the baseline — note that in the output.
- Distinctive: line 146
Always structure output as:
- Very specific: line 171
If the user passes save argument, or if no baseline exists in memory:
- Very specific: line 173
Write a memory file (<project>_analytics_<date>.md) with:
- Distinctive: line 181
Keep baselines concise — just the numbers needed for future comparison, not the full analysis.
- Distinctive: line 185
Always calculate daily rates (events / days in period) for fair comparison across unequal periods
- Very specific: line 189
If the project has a POSTHOG_EVENTS.md, read it first to understand the event architecture
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Analytics Review
Pull live data from PostHog and the project's database, compare against saved baselines in memory, and surface actionable insights.
Arguments
- No arguments: full review (PostHog funnel + database usage + comparison)
funnel: PostHog funnel metrics onlyusage: Database message/usage volume onlyusers: Per-user activity breakdownsave: Save current snapshot as a new baseline to memory
Step 1/8: Find credentials
Look for credentials in this order:
PostHog
- Check environment:
env | grep POSTHOG - Check project
.envrcfiles - Check memory files for PostHog project ID and API key
- The PostHog API key starts with
phx_(personal API key, not the project keyphc_)
PostHog API base: https://us.i.posthog.com (US) or https://eu.i.posthog.com (EU)
Database
- Check
server/.envor.env.localforDATABASE_DSN,DATABASE_URL,POSTGRES_URL, orSUPABASE_URL - For Supabase projects, the DSN format is:
postgresql://postgres:<password>@db.<project-ref>.supabase.co:5432/postgres - Use the project's Python environment (
uv run python3) withasyncpgto query
If credentials are missing, ask the user.
Step 2/8: Read event architecture
Check the project's PostHog events doc (usually POSTHOG_EVENTS.md) or memory for the event architecture. This tells you which events exist, what properties they carry, and what funnels they power.
Step 3/8: Pull PostHog data
Use the HogQL query endpoint (legacy insight endpoints may be blocked):
curl -s 'https://us.i.posthog.com/api/projects/<PROJECT_ID>/query/' \
-H "Authorization: Bearer <POSTHOG_API_KEY>" \
-H 'Content-Type: application/json' \
-d '{"query": {"kind": "HogQLQuery", "query": "<HOGQL>"}}'Queries to run
1. Event counts by period — Compare current period vs previous baseline:
SELECT event, count() as cnt, count(DISTINCT person_id) as users,
multiIf(
toDate(timestamp) < toDate('SPLIT_DATE_1'), 'period_1',
toDate(timestamp) < toDate('SPLIT_DATE_2'), 'period_2',
'period_3'
) as period
FROM events
WHERE timestamp >= toDateTime('START_DATE')
AND event IN ('$pageview', 'cta_click', ... )
GROUP BY event, period
ORDER BY event, period2. Pageview breakdown by path:
SELECT properties.$pathname as path, count() as cnt, count(DISTINCT person_id) as users
FROM events
WHERE timestamp >= toDateTime('START_DATE') AND event = '$pageview'
GROUP BY path ORDER BY cnt DESC LIMIT 253. All custom events (to check what's firing):
SELECT event, count() as cnt
FROM events
WHERE timestamp >= toDateTime('START_DATE')
AND event NOT IN ('$pageview', '$pageleave', '$autocapture', '$feature_flag_called', '$web_vitals', '$identify', '$rageclick')
GROUP BY event ORDER BY cnt DESC LIMIT 30Step 4/8: Pull database usage data
Query the project's database for:
- Message/usage volume by period (daily, weekly)
- Per-user activity (messages, actions, last active date)
- New signups/subscriptions in the current period
- Active vs churned users
Adapt queries to the project's schema. Common patterns:
-- Daily volume
SELECT DATE(created_at) as day, COUNT(*) as total, COUNT(DISTINCT user_id) as users
FROM <activity_table>
WHERE created_at >= '<START_DATE>'
GROUP BY DATE(created_at) ORDER BY day
-- Per-user breakdown
SELECT u.email, u.plan, u.status,
COUNT(*) FILTER (WHERE a.created_at < '<SPLIT>') as before,
COUNT(*) FILTER (WHERE a.created_at >= '<SPLIT>') as after,
MAX(a.created_at) as last_active
FROM <users_table> u
JOIN <activity_table> a ON a.user_id = u.id
GROUP BY u.email, u.plan, u.status
ORDER BY after DESCStep 5/8: Pull recent PRs and deploys
Run git log --oneline --since="<BASELINE_DATE>" --merges (or without --merges if no merge commits) to see what shipped since the last baseline. For each PR/commit that touched user-facing code:
- Note the merge date
- Summarize what changed (from commit message or PR title)
- Categorize: bug fix, new feature, SEO/content, UI change, pricing change, infrastructure
This becomes the "what changed" context for interpreting metric movements. Structure as:
### Changes since last baseline
| Date | PR/Commit | Category | Summary |When comparing metrics, correlate timing: if a metric spiked on Mar 30 and PR #11 merged Mar 31, note the connection. Metric changes without a corresponding code change suggest external factors (marketing, organic growth, seasonality).
Step 6/8: Compare against baseline
Check memory for previous analytics snapshots (files matching *analytics* or *baseline*). If a baseline exists:
- Calculate daily rates for each metric in both periods
- Show percentage change and absolute change
- Flag metrics that moved significantly (>2x or <0.5x)
- Flag users who went silent (active before, zero activity now)
- Flag users who are ramping up (increasing activity)
If no baseline exists, this IS the baseline — note that in the output.
Step 7/8: Surface insights
Always structure output as:
Funnel Metrics (table)
- Period comparison with daily rates and trend multipliers
Usage Analytics (table)
- Volume, active users, per-user breakdown
PR Impact (table)
- Which PRs shipped since last baseline, what category, what metric moved
Actionable Insights (numbered list)
Focus on:
- Conversion changes — Did any funnel step improve or degrade?
- Activation signals — Are new users actually using the product?
- Churn signals — Who went silent? How long ago?
- Power users — Who's approaching plan limits?
- New behavior — Events firing for the first time?
- Anomalies — Unexpected spikes, drops, or patterns?
Recommendations (numbered list)
Specific actions the user can take based on the data.
Step 8/8: Save baseline (if requested or if none exists)
If the user passes save argument, or if no baseline exists in memory:
- Write a memory file (
<project>_analytics_<date>.md) with:- Snapshot date
- Changes since last baseline (PRs merged, deploys)
- Key metrics (user count, daily volume, conversion rates)
- Per-user status summary
- Top-line comparison vs previous baseline
- Update MEMORY.md index
Keep baselines concise — just the numbers needed for future comparison, not the full analysis.
Notes
- Always calculate daily rates (events / days in period) for fair comparison across unequal periods
- PostHog
count(DISTINCT person_id)gives unique users,count()gives total events - For Supabase/Postgres: use
uv run python3withasyncpgin the server directory - Exclude internal/test accounts from user-facing metrics
- If the project has a
POSTHOG_EVENTS.md, read it first to understand the event architecture
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

