Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Design and analyze activation funnels (AARRR / AAARRR Pirate Metrics) with conversion + drop-off math, bottleneck detection, and Mermaid funnel diagrams. Includes a stdlib Python tool that emits all 6 shared PM output formats.
.claude/skills/borghei-activation-funnel/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 153% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-21 | ✗→✓ | ▲ Improved | 86% | 0% |
A funnel is the single most useful diagnostic tool a growth or onboarding PM owns. It turns a fuzzy product story ("users drop off somewhere") into a numbered, actionable picture ("76% land, 41% start setup, 9% finish setup, 4% take the activation action -- the biggest drop is between start and finish setup at 32 percentage points").
This skill specifies funnel structures using Dave McClure's AARRR (Acquisition, Activation, Retention, Revenue, Referral) and its broader cousin AAARRR (which adds Awareness on the front), and analyzes them with a stdlib Python tool (funnel_analyzer.py). The tool ingests a JSON funnel definition (stages with counts) and outputs stage-by-stage conversion and drop-off, a Mermaid flowchart, and a bottleneck call-out — in all six SHARED_OUTPUT_SCHEMA formats so the analysis travels into Jira, Linear, Confluence, Notion, or a PR.
The activation step is the centerpiece. Sean Ellis defined the "activated user" as one who has done the thing that statistically predicts retention (Slack's 2000 messages, Facebook's "7 friends in 10 days", Dropbox's "1 file in 1 folder on 1 device"). Pin the activation event before you optimize the funnel that leads to it.
When NOT to use: pre-PMF discovery (use discovery/); top-of-funnel channel attribution (marketing tools); revenue-cohort retention (data-analytics domain); when events are not instrumented.
Before analyzing the funnel, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
bashpython scripts/funnel_analyzer.py --input funnel.json --format markdown # conversion + drop-off + bottleneck python scripts/funnel_analyzer.py --demo --format mermaid # worked SaaS funnel diagram
Load the reference that matches the task — keep this file lean and pull detail on demand:
funnel_analyzer.py reference (flags, input JSON, Mermaid sample), troubleshooting, and success criteria. Read when building or analyzing a funnel.In Scope: funnel definition (events, stages, transitions) via AARRR/AAARRR; conversion + drop-off math and bottleneck detection; Mermaid rendering; activation-event selection (Ellis); counter-metric pairing; cohort-vs-snapshot distinction; all 6 output formats.
Out of Scope: pulling raw event data (input is JSON — use Amplitude/Mixpanel/PostHog/Looker); statistical significance testing (discovery/brainstorm-experiments/, data-analytics); cohort-retention analysis; channel attribution (marketing tools); building the UX/A/B test; forecasting.
Caveats: a funnel implies a linear flow — real products branch and re-enter, so complement with branched analysis. Snapshot funnels mix cohorts and lie; always specify the cohort window. Top-stage gains amplify downstream and can mislead investment — look at both absolute and relative drop. Re-validate the activation event against fresh retention cohorts every 1-2 quarters.
| Integration | Direction | Description | |---|---|---| | north-star-metric/ | Pairs with | Activation rate is often the NSM or a top input metric in the NSM tree | | brainstorm-okrs/ | Feeds into | Funnel-stage targets become KRs (e.g., "improve activation from 28% to 36%") | | prioritization-frameworks/ | Feeds into | Fix-the-funnel projects ranked by RICE / weighted-score | | discovery/brainstorm-experiments/ | Pairs with | Each funnel leak suggests testable experiments to plug it | | discovery/identify-assumptions/ | Pairs with | "Users will complete step 3 if we shorten it" is an assumption to validate | | status-update-generator/ | Feeds into | Weekly funnel deltas appear in Highlights / Risks | | outcome-roadmap/ | Pairs with | Roadmap items justify themselves by which funnel stage they target | | cycle-time-analyzer/ | Pairs with | Cycle time to fix funnel leaks is part of flow analysis | | data-analytics/ (domain) | Pairs with | Telemetry instrumentation; cohort analysis; stat sig |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 16,290 | 16,303 | +0% | 1 | 1 | 0% | 2,871 | 4,806 | +67% | 0 | 0 | — |
case-02 | fail→fail | 18,066 | 30,453 | +69% | 1 | 1 | 0% | 3,047 | 6,166 | +102% | 0 | 0 | — |
case-03 | fail→pass | 6,896 | 6,008 | -13% | 1 | 1 | 0% | 1,048 | 2,648 | +153% | 0 | 0 | — |
case-04 | fail→fail | 14,958 | 17,214 | +15% | 1 | 1 | 0% | 3,180 | 4,975 | +56% | 0 | 0 | — |
case-05 | fail→pass | 19,981 | 17,632 | -12% | 1 | 1 | 0% | 3,876 | 4,453 | +15% | 0 | 0 | — |
case-06 | pass→pass | 17,246 | 21,498 | +25% | 1 | 1 | 0% | 2,664 | 5,001 | +88% | 0 | 0 | — |
case-07 | pass→pass | 15,901 | 16,591 | +4% | 1 | 1 | 0% | 2,559 | 4,317 | +69% | 0 | 0 | — |
case-08 | pass→pass | 14,601 | 13,095 | -10% | 1 | 1 | 0% | 2,201 | 3,650 | +66% | 0 | 0 | — |
case-09 | pass→pass | 13,481 | 12,410 | -8% | 1 | 1 | 0% | 2,086 | 3,758 | +80% | 0 | 0 | — |
case-10 | pass→pass | 13,976 | 13,741 | -2% | 1 | 1 | 0% | 2,131 | 3,759 | +76% | 0 | 0 | — |
case-11 | pass→pass | 5,950 | 11,349 | +91% | 1 | 1 | 0% | 1,197 | 3,981 | +233% | 0 | 0 | — |
case-12 | pass→pass | 14,526 | 13,333 | -8% | 1 | 1 | 0% | 2,236 | 3,766 | +68% | 0 | 0 | — |
case-13 | fail→pass | 11,393 | 7,997 | -30% | 1 | 1 | 0% | 1,790 | 2,955 | +65% | 0 | 0 | — |
case-14 | fail→pass | 13,965 | 11,506 | -18% | 1 | 1 | 0% | 2,025 | 3,430 | +69% | 0 | 0 | — |
case-15 | fail→fail | 13,286 | 17,146 | +29% | 1 | 1 | 0% | 2,498 | 4,688 | +88% | 0 | 0 | — |
case-16 | fail→fail | 16,111 | 17,054 | +6% | 1 | 1 | 0% | 2,793 | 4,659 | +67% | 0 | 0 | — |
case-17 | fail→fail | 9,002 | 11,891 | +32% | 1 | 1 | 0% | 1,687 | 3,859 | +129% | 0 | 0 | — |
case-18 | pass→pass | 17,994 | 17,740 | -1% | 1 | 1 | 0% | 2,736 | 4,389 | +60% | 0 | 0 | — |
case-19 | pass→pass | 9,681 | 8,629 | -11% | 1 | 1 | 0% | 1,570 | 3,037 | +93% | 0 | 0 | — |
case-20 | pass→pass | 13,386 | 12,514 | -7% | 1 | 1 | 0% | 1,870 | 3,620 | +94% | 0 | 0 | — |
case-21 | fail→pass | 17,454 | 18,797 | +8% | 1 | 1 | 0% | 2,737 | 5,091 | +86% | 0 | 0 | — |
case-22 | pass→pass | 14,051 | 19,180 | +37% | 1 | 1 | 0% | 2,195 | 4,539 | +107% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +23 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.