analytics
Skill2 starsChanged 9 days agoMITView on GitHub
Use when someone asks how a product is doing in numbers - "recheck analytics", "give me an update on the numbers", signups, active users, DAU/WAU, retention, cohorts, activation, feature adoption, funnels, follow or social graph, game, challenge or campaign numbers, "did the holdout / A/B test / experiment work", "how many of X also did Y", "is signup broken or just quiet", a partner's numbers question about their campaign, or a numbers report, weekly update or one-pager to pass on to the team, investors or a partner.
70 other projects use a version of this.
Adopted by
Most recently taken up by
- CyrusNuevoDia/skill-language-servertheir own version, first seen Nov 8, 2026
- tandregbg/core-claude-skillstheir own version, first seen Nov 4, 2026
- grainulation/grainulatortheir own version, first seen Nov 3, 2026
- pixelswithbliss/claude-skillstheir own version, first seen Nov 1, 2026
- epicx-labs/keytomic-claude-plugintheir own version, first seen Nov 1, 2026
- xuweizhengo/skills-hubtheir own version, first seen Nov 1, 2026
Used with
Projects with it also use popups, free-tools and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CesarjoquinSkillpopups
When the user wants to create or optimize popups, modals, overlays, slide-ins, or banners for conversion purposes. Also use when the user mentions "exit intent," "popup conversions," "modal optimization," "lead capture popup," "email popup," "announcement banner," "overlay," "collect emails with a popup," "exit popup," "scroll trigger," "sticky bar," or "notification bar." Use this for any overlay or interrupt-style conversion element. For forms outside of popups, see cro. For general page conversion optimization, see cro.
Also in 23 projects that use this
CesarjoquinSkillfree-tools
When the user wants to plan, evaluate, or build a free tool for marketing purposes — lead generation, SEO value, or brand awareness. Also use when the user mentions "engineering as marketing," "free tool," "marketing tool," "calculator," "generator," "interactive tool," "lead gen tool," "build a tool for leads," "free resource," "ROI calculator," "grader tool," "audit tool," "should I build a free tool," or "tools for lead gen." Use this whenever someone wants to build something useful and give it away to attract leads or earn links. For downloadable content lead magnets (ebooks, checklists, templates), see lead-magnets.
Also in 24 projects that use this
coreyhaines31Skillmarketing-council
When the user wants multiple expert perspectives on a marketing question — a simulated board of advisors staffed by legendary marketers (Seth Godin, David Ogilvy, Eugene Schwartz, April Dunford, Rory Sutherland, Alex Hormozi, Byron Sharp, and more). Also use when the user mentions 'marketing council,' 'board of advisors,' 'advisory board,' 'what would Seth Godin say,' 'what would Ogilvy think,' 'channel Hormozi,' 'get multiple perspectives,' 'debate this,' 'have the council review,' 'marketing mentors,' or asks how a famous marketer would approach their problem. The council gives each advisor's take through their documented frameworks, surfaces where they disagree, and synthesizes a recommendation. For executing the winning direction, hand off to positioning, offers, copywriting, ads, or the relevant skill.
Also in 19 projects that use this
roerohanSkillemails
When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program. Also use when the user mentions "email sequence," "drip campaign," "nurture sequence," "onboarding emails," "welcome sequence," "re-engagement emails," "email automation," "lifecycle emails," "trigger-based emails," "email funnel," "email workflow," "what emails should I send," "welcome series," or "email cadence." Use this for any multi-email automated flow. For cold outreach emails, see cold-email. For in-app onboarding, see onboarding.
Also in 21 projects that use this
ukunal91appSkillcommunity-marketing
Build and leverage online communities to drive product growth and brand loyalty. Use when the user wants to create a community strategy, grow a Discord or Slack community, manage a forum or subreddit, build brand advocates, increase word-of-mouth, drive community-led growth, engage users post-signup, or turn customers into evangelists. Trigger phrases: "build a community," "community strategy," "Discord community," "Slack community," "community-led growth," "brand advocates," "user community," "forum strategy," "community engagement," "grow our community," "ambassador program," "community flywheel.
Also in 26 projects that use this
coreyhaines31Skillmarketing-loops
When the user wants to set up a recurring, self-running marketing workflow — a repeatable loop an AI agent runs on a cadence (weekly, daily, on a trigger) rather than a one-off task. Also use when the user mentions 'marketing loop,' 'recurring marketing workflow,' 'automate my marketing,' 'marketing on autopilot,' 'weekly marketing review,' 'ad fatigue check,' 'weekly ads check,' 'content refresh loop,' 'churn watch,' 'ranking drop alert,' 'run my SEO,' 'SEO operator,' 'daily SEO agent,' 'run my outbound,' 'AI SDR,' 'reply triage,' 'always-on marketing,' 'marketing automation workflow,' or 'run this every week.' Use this to pick, adapt, and schedule an ongoing marketing loop that orchestrates the other marketing skills. For one-off marketing ideas, see marketing-ideas. For the experimentation loop specifically, see ab-testing.
Also in 10 projects that use this
- +6 more from Cesarjoquin
Other versions70 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 70
- coreyhaines31/marketingskills★ 59ksame name
- getsentry/sentry★ 46ksame name
- thewh1teagle/vibe★ 8ksame name
- microsoft/power-platform-skills★ 1.1ksame name
- Nexus-JPF/note-companion★ 874same name
- microsoft/rayfin★ 646same name
- LedgerHQ/ledger-live★ 627same name
- Cesarjoquin/Marketing-Skills★ 190same name
- microsoft/awesome-rayfin★ 108same name
- TheAceTeam/CC-Flight★ 93same name
60 more not listed
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 repository12 other files it gives its agents.
- architectureSkill
- audit-codeSkill
- audit-productSkill
- auditSkill
- cross-examineSkill
- fix-typoSkill
- fun-checkSkill
- roastSkill
- tighten-copySkill
- untangleSkill
- ux-reviewSkill
- visualizeSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 4 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 59 edited versions we read keep these.
4
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 27
If no profile exists, build one from the schema, the code and the docs.
- Distinctive: line 56
Check concentration before reporting a total: If one account makes more than a fifth of it, say so.
- Distinctive: line 60
Keep people out of the output: No names, emails or handles.
- Very specific: line 73
Stay read-only: Use the replica, a read-only session (Postgres: PGOPTIONS='-c default_transaction_read_only=on') and a timeout.
- Distinctive: line 85
Write in the owner's language.
- Very specific: line 89
When the numbers go to anyone besides the owner (the team, investors, a partner), also write a Markdown file at …
- Very specific: line 114
Keep new or fixed queries in .analytics/queries/.
- Distinctive: line 115
Add any new trap or definition to the profile.
“Common” is measured: kept by at least 6 in 10 of the 59 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Analytics: read the product's own numbers
Core principle
A number is an answer only with its definition, its denominator and the last read beside it. Read the system of record first (a read-only replica of the product database), say what changed since the last read, and keep randomized comparisons apart from correlations.
The profile comes first
Each project keeps one profile at .analytics/profile.md in the repo root (template: assets/profile.example.md), with saved queries in .analytics/queries/ and past reads in .analytics/snapshots/. Read the profile before any query. It holds what a cold start has to rediscover:
- Sources and how to reach each one read-only: the connection recipe, never a secret.
- Who is not a user: staff and admin, test, seeded or synthetic, system, bot or spam accounts. Find them in code: search for
superadmin,staff,internal,synthetic,seed,demo,test,system, and the filters the product's own mailers already apply. - Active: the definition, and the table that records it. A per-day activity table beats a
last_seencolumn, which is overwritten and has no history. It also beats consent-gated client analytics, which miss everyone who opted out. - Calendar: the business time zone, the week start, and which columns hold UTC.
- Segments that change the story: market or region, platform, signup source.
- Features, each with the table that proves it was used.
- Experiments and holdouts: how the arms are assigned (a hash with a salt, a column, a flag), the split, the start date and the outcome window.
- The base query (the exclusions plus the segments), and known traps.
If no profile exists, build one from the schema, the code and the docs. Show the owner the exclusions and the definition of "active" in a few lines and get them confirmed once. Ask before committing .analytics/, because snapshots hold business figures.
The standard read
"An update" or "recheck" means every block below. A narrower question still gets its denominator and its comparison. references/recipes.md has SQL for each block.
| Block | What to pull |
| Accounts | Total by segment, new in 7 and 28 days, active in 7 days |
| Signups | Per week (about 10 weeks) and per day (10 to 14 days), by segment, platform and source |
| Activity | Weekly active people split into new and returning, daily active people for the last 10 days |
| Retention | Signup-week cohorts: came back in days 1-7, 8-14 and 22-28 |
| Activation | The key first actions within 7 or 14 days, per cohort |
| Feature use | Of the N people active in 28 days, how many used each feature in 28 and in 7 days |
| Live objects | For each running game, challenge or campaign: members, joined this week, did the core action, still opening the app |
| Social graph | Edges, people with at least one, mutual pairs, new edges per week and the share reciprocated, the out-degree spread |
| Experiments | For each running holdout or A/B test: arms, n, outcome rates, the difference with its interval |
| Lifecycle messages | Mails and pushes sent and delivered per run |
Then answer what the owner asks next before they ask it:
- Who drives the number? Concentration: the top actor's share.
- How many of X also did Y? Overlaps between cohorts, games and campaigns.
- Is it broken or just quiet? See below.
Rules for every number
- Exclude non-users as subjects and as actors. A staff account that follows every newcomer turns "got a follower in week 1" into a count of that account. Use real people in denominators too: "18 of 31 players" when the board shows 32, one of them staff.
- Put the denominator beside every rate: "16 of 17", not "94%". Below about 20, give counts only.
- Check concentration before reporting a total. If one account makes more than a fifth of it, say so.
- Compare like with like. Cohort rates use fully elapsed windows only. Mark the current day and week as partial. Compare equal window lengths and the same weekdays. Convert time zones explicitly.
- Observational is not causal. "People who did X in week 1 stayed" describes who chooses X. Only randomized arms support "X causes". Rebuild arm membership from the assignment rule, never from exposure: "got no mail" picks the unreachable.
- Read experiments whole. Take the eligible period from the code's history: when assignment started and when it was switched off (
git log -S <salt>). Check that the control really went untreated. Measure every outcome in a fixed window per person ("back in days 8-14"), never "active in the last 7 days" counted from today, which mixes people of different ages. Give n per arm, both rates, the difference with a 95% interval, and the smallest effect this sample could detect (node scripts/two-proportions.mjs). A lift that fades in later windows is a finding of its own. One significant read is not a stopping rule. - Keep people out of the output. No names, emails or handles. Use a short id prefix when one account must be singled out. A group figure needs at least 5 people, or the project's own floor.
- Explain jumps. More than twice the last snapshot needs a cause (a campaign, a launch, a bug, a changed definition) before it is reported as growth.
Before calling something broken
For zero signups or a sudden drop, check these before reporting an outage:
- the auth and signup endpoints in the logs: errors, or requests that never came;
- the traffic and its referrers in web analytics: did visitors arrive and stop at the first screen;
- the window itself: a partial day, a quiet weekday, a holiday.
Safety
- Stay read-only. Use the replica, a read-only session (Postgres:
PGOPTIONS='-c default_transaction_read_only=on') and a timeout. - Inject secrets through the project's secret runner and never print them.
- Close only the tunnels you opened.
- Never write, backfill or "fix" data while reading it.
Report shape (to the owner)
- Headline: 2 to 4 sentences on what changed since the last read and what it means.
- The blocks in the standard order. Each is a short table or 2 to 4 bullets, with the previous read in brackets.
- Each experiment with a verdict: lift, no detectable lift, or too small to tell.
- Caveats: exclusions, partial periods, what could not be measured and why.
Write in the owner's language. When a partner asked, add a ready-to-forward line in their language.
Shareable report (for other people)
When the numbers go to anyone besides the owner (the team, investors, a partner), also write a Markdown file at .analytics/reports/YYYY-MM-DD-<audience>.md, built from assets/report.example.md. It is a document a reader outside the codebase understands on its own, in these parts:
- Title: the product or campaign, the period covered, and the date, time and time zone of the read.
- In short: 2 to 4 sentences, each a takeaway with its number.
- One section per topic this reader cares about. Each is a table with this period and the previous period side by side, or 2 to 4 bullets. Every figure says in plain words what it counts ("people who opened the app at least once that week").
- Tests: one line each, the result and the verdict in plain words ("the tour group came back more often, but the groups are too small to be sure").
- How to read these numbers: who is counted, what active means, the calendar and time zone, which period is incomplete, and the smallest group shown.
The period is the last complete week or month, with absolute dates. The words are the reader's: features by the names the product shows, and no table or column names, query text, account ids or internal code names. Staff and test accounts appear only as "left out".
Pick the content by reader:
| Reader | Contents |
| Team | The standard read, condensed, with the owner's next questions answered |
| Investors | Growth, activity, retention and the strongest proof points. A test result appears only with its verdict. |
| Partner | Their campaign: participants, activity, completion, reach, and their own participants' history in the product (how many are new, how many took part in an earlier campaign, by its public name). Anything the product already shows publicly, such as a leaderboard, appears as shown there. Platform-wide figures only when the owner agrees. Never another partner's own figures. |
Write it in the reader's language and in the product's own voice, with one form of address throughout. Read it once as that reader before showing it: every date matches its weekday, every number matches the read, and every question the reader already asked is answered. Show the owner the file before it goes anywhere: the owner sends it. Where pages can be published, offer the file as a page as well.
PDF. When the report will be printed, attached or forwarded as a file, print it with node scripts/report-to-pdf.mjs <report.md>: A4 on white paper, hairline tables, page numbers. --css <brand.css> sets the project's fonts and accent. Then read every page of the PDF before showing it: the name leads page 1, no page is mostly empty, and no table is cut. Fix the Markdown, not the PDF, and print again.
After the read
- Save
.analytics/snapshots/YYYY-MM-DD.md: the headline numbers, compact, which the next read compares against. A shareable report is written for people. The snapshot is for the next read, and stays separate. - Keep new or fixed queries in
.analytics/queries/. - Add any new trap or definition to the profile.
Common mistakes
| Mistake | Fix |
| Retention from client analytics events | Use the server's per-day activity table. Client analytics only covers people who consented. |
Retention from a last_seen column | Overwritten, no history. Use per-day rows. |
| Arm = "did not get the treatment" | Recompute the assignment hash with its salt. |
| Rates for the current, unfinished week | Mark it partial, or gate on elapsed windows. |
| A staff account in a player count or a social metric | Exclude it as subject and as actor. |
| "94% retained" from 17 people | "16 of 17". |
A query dies on returning, day, user or order as an alias | Quote reserved words: "returning". |
| Rediscovering the connection, exclusions and segments every time | Write them to the profile the first time. |
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.

