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 SHAREDOUTPUTSCHEMA 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, settle the inputs below. When one is missing or vague and would change the result, ask about it; when it wouldn't, use a sensible default and say which one you used.
Ask about the two or three inputs that matter most for this request, not the whole list. If the user wants a result straight away, produce it and state your assumptions at the top.
assets/activation_metric_worksheet.md before touching the funnel.assets/sample_funnel.json, each with a counter-metric.funnel_analyzer.py. It reports the largest absolute drop, the worst conversion rate, and the worst conversion past acquisition; start with the last one, because top-of-funnel stages nearly always lose the most and say the least.python3 project-management/execution/activation-funnel/scripts/funnel_analyzer.py --input project-management/execution/activation-funnel/assets/sample_funnel.json --format markdown
python3 project-management/execution/activation-funnel/scripts/funnel_analyzer.py --demo --format mermaid
Formats: markdown, json, mermaid, confluence, notion, linear (the past-acquisition bottleneck appears in markdown and json). Exit 0 on success, 2 on bad input (missing file, invalid JSON, malformed stages).
Mistake: Activation is set to "clicked Get Started on day 1" without checking whether that event predicts day-30 retention.
Why it happens: An easy-to-instrument event is at hand, and validating it needs a cohort analysis nobody has run.
Instead: Compare 30-day retention for users who hit the candidate event with users who did not, and adopt it only when the lift is large. Use assets/activation_metric_worksheet.md and re-validate every 1-2 quarters.
Mistake: Removing six signup fields lifts signup conversion 40% and the change ships. Two weeks later activation is down 20%.
Why it happens: Each experiment is judged on the stage it changed.
Instead: When you optimize a stage, measure the next one or two stages downstream and report net activated users. Pair each stage metric with a counter-metric before the test starts.
Mistake: The team works on a 40pp signup-to-activation drop while a 25pp drop at a later, higher-value stage is worth several times more revenue.
Why it happens: The funnel_analyzer.py bottleneck call-out ranks by drop size, and that is the easiest number to quote.
Instead: Treat the bottleneck call-out as a starting point. Weight each drop by what a user at that stage is worth (LTV or revenue) before choosing where to invest.
Nine more, each with a bad and a good example: references/red-flags.md.
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.
| File | Purpose |
|---|---|
scripts/funnel_analyzer.py | Stage conversion, drop-off, cumulative conversion, bottlenecks, Mermaid diagram, six output formats |
assets/sample_funnel.json | Runnable 7-stage SaaS trial funnel |
assets/activation_metric_worksheet.md, assets/funnel_design_canvas.md | Worksheets |
examples/freemium-saas-day-7-retention-diagnosis.md | Worked diagnosis |
references/*.md | See References |