Funnel audit
Finds the single constraint in a conversion funnel. Takes any funnel shape (AARRR, PLG onboarding, SLG pipeline, content/SEO), identifies where the most volume is being lost, classifies the bottleneck type, and outputs ranked experiment hypotheses. Use when conversion is below benchmark, when you're unsure which stage to fix, or before allocating experiment budget.From its SKILL.md
npx -y skills add 0xF4ng/aether-growth-fieldwork --skill funnel-auditAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- 25 days oldThe repository was created 25 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 3 stars3 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
20.8 KB, ~4.5k tokens by cl100k_base, as published. Nobody here has run it
Funnel Audit
Before starting
Confirm (ask or infer) before running the audit:
- Funnel definition — what are the stage names, and what actions define entry/exit at each stage?
- Data availability — volume in / volume out per stage (cannot run audit without stage-level numbers; aggregate "conversion rate" is insufficient)
- Data freshness — when was this data collected? (data older than 30 days may not reflect current state)
- Product type — consumer SaaS, B2B SaaS, developer tools, PLG, SLG? (determines which funnel framework applies and which benchmarks are relevant)
- North star metric — what is the product's primary measure of user value?
- Known changes — any recent product, acquisition, or copy changes that might explain anomalies in the data?
- ICP card — is one available? (required if bottleneck type turns out to be messaging mismatch or fit gap)
If data is unavailable: block and help user identify which proxy data is available (see Inputs section).
Contract
This skill guarantees:
- One and only one primary constraint is identified per audit cycle
- Calculation is shown (absolute drop × relative drop) so the conclusion is auditable
- Bottleneck type is named with evidence — not asserted without data
- "What NOT to fix right now" section is always included to prevent scope creep
- Hypotheses are written in falsifiable "If/then/because" format
Role: Constraint Finder. You diagnose funnels with the precision of a manufacturing line engineer. You never recommend fixing multiple things simultaneously. You find the one right constraint and prove it is the one worth fixing now.
Inputs
Required before proceeding:
- Funnel definition (stage names, input/output volumes per stage, timeframe)
- Baseline metric for each transition (conversion rate or raw numbers)
- Data freshness (when was this data collected?)
If data is unavailable:
BLOCK. Return:
"Funnel audit requires stage-level conversion data. Without numbers,
this becomes speculation. Please provide:
- Each stage name
- Volume in / volume out for each stage transition
- Timeframe (daily / weekly / monthly)
- Any known data quality issues (attribution gaps, test pollution)
Describe what data you have available and I will help identify the most
useful proxy if exact metrics are not yet instrumented."
Step 1 — Map the funnel
First, confirm which framework best fits the product:
| Framework | Use when |
|---|---|
| AARRR (Acquisition, Activation, Retention, Referral, Revenue) | Most consumer and SaaS products |
| PLG onboarding (Signup → FVM → Habit) | Products where self-serve activation is the growth driver |
| SLG pipeline (MQL → SQL → Demo → Proposal → Close) | Sales-led B2B where human touch drives conversion |
| Content/SEO (Visitor → Reader → Sign-up → Activate) | Content-first or inbound-led growth motions |
Label each stage with: input volume, output volume, conversion rate, data freshness.
Funnel map:
[Stage 1] → [Stage 2]: [X volume] at [Y% conversion] ([data date])
[Stage 2] → [Stage 3]: [X volume] at [Y% conversion] ([data date])
...
Step 2 — Find the single constraint
The Iron Law of Funnel Fixing: fix the largest absolute-volume drop first, unless a small absolute drop is at such high cost per conversion that it makes fixing it more valuable. When in doubt: absolute volume wins.
For each stage transition, calculate:
absolute_drop = input_volume - output_volume
relative_drop = 1 - conversion_rate
Primary constraint = the stage where (absolute_drop × relative_drop) is largest.
When they disagree — use absolute_drop as the tiebreaker.
"Fixing a stage that loses 10,000 users at 60% beats fixing one that
loses 200 users at 90%."
Output this statement before proceeding:
"The biggest drop is [Stage A] → [Stage B]: [X%] conversion, losing [N] [units] per [period]."
Step 3 — Classify the bottleneck type
Identify ONE primary bottleneck type for the constraint stage. Do not assign multiple types unless evidence clearly supports it.
| Type | Signals | What you're looking for |
|---|---|---|
| Awareness gap | Traffic or reach is the limiting factor; potential users never arrive | Top-of-funnel volume below benchmark; search terms not ranking; no organic referral sources |
| Messaging mismatch | Users arrive but bounce without engaging; high session starts, low progression | Click-through rates below benchmark; bounce from landing page; hero section exit; A/B test on hook shows divergence |
| Friction | Users intend to convert but hit a barrier | Form abandonment; error rates in onboarding; slow load; mobile broken; payment failure rates; steps-to-complete above benchmark |
| Trust deficit | Users consider but hesitate; consideration but no conversion | Long session time without conversion; returns to the pricing page; FAQ and security/compliance page traffic; lack of social proof in critical decision moment |
| Timing mismatch | Users arrive before they have the need or budget | Trial starts but low FVM rate; signups from teams in early budget cycles; newsletter signups with low engagement for months then sudden activation |
| Fit gap | Users convert but churn fast | Short time-to-churn; churn concentrated in specific cohort or use case; activation without habit formation |
Classification logic:
IF bounce is early (first page, before any engagement) → messaging mismatch
IF bounce is mid-funnel (started flow, didn't complete) → friction OR trust deficit
IF bounce is post-conversion (churns within first 7-14 days) → fit gap
IF conversion rate is fine but volume is low → awareness gap
IF long sessions without conversion → trust deficit OR timing mismatch
Name the type explicitly:
"Bottleneck type: [Type]. Evidence: [2-3 specific data points or observations that support this classification]."
Step 4 — Ranked experiment hypotheses
Generate 3–5 hypotheses for the primary bottleneck type only. Hypotheses for other stages go at the end, labeled "out of scope for now."
Hypothesis format (required):
Hypothesis: "If we [action], then [metric] will [direction] by [estimated amount]
because [reason tied to bottleneck classification]."
Bottleneck type addressed: [Type]
Effort: [Low / Medium / High]
Signal window: [How long until you can read a result?]
Examples by bottleneck type:
Messaging mismatch:
"If we replace the hero headline from '[generic category claim, e.g. The fastest solution]' to '[specific outcome claim tied to ICP trigger, e.g. Solve X for Y in Z timeframe]', then the hero-to-signup conversion rate will increase by ≥5 percentage points because the current headline doesn't speak to the migration or switch context our ICP is actually in."
Friction:
"If we remove the credit card requirement at signup, then the signup-to-trial rate will increase by ≥20% because our ICP (developers) defaults to no-cc trials as a trust signal."
Trust deficit:
"If we add a G2 social proof block with 3 specific quotes below the pricing section, then the pricing-page-to-trial conversion will increase by ≥8 percentage points because exit behavior on pricing suggests the missing trust element is at the decision point."
Fit gap:
"If we add an upfront-fit screening question ('What's your database size?') at signup, then 30-day retention will increase by ≥10 percentage points for the filtered cohort because current churn is concentrated in accounts with < 1GB databases, which is outside the product's target use case."
Step 5 — What NOT to fix right now
Name 1–2 stages that are explicitly NOT the right focus for this audit cycle, and why.
Not fixing: [Stage X]
Reason: [downstream of the primary constraint / already above benchmark /
outside growth's control / requires product changes, not growth tactics]
Why this section matters: teams that audit funnels often want to fix everything simultaneously. Fixing multiple stages at once makes it impossible to attribute which change drove results. The "what not to fix" section is the discipline that makes experiment results readable.
Output format
## Funnel Audit
### The one constraint
[Stage A] → [Stage B]: [X%] conversion, losing ~[N] per [period].
This is the primary constraint.
### Bottleneck type
[Type]
Evidence: [2-3 data points]
### Hypotheses (for this stage only)
1. [Hypothesis + effort + signal window]
2. [Hypothesis + effort + signal window]
3. [Hypothesis + effort + signal window]
### What NOT to fix right now
- [Stage X]: [reason]
- [Stage Y]: [reason]
### Out-of-scope hypotheses (for later)
[If any other stages have notable drops, list hypotheses here with a note
that they should be tackled after the primary constraint is addressed]
Connects to
Upstream: /icp-research — if the bottleneck is a fit-gap or messaging mismatch, the ICP card is the first thing to check. Wrong audience → wrong funnel → wrong optimization.
Downstream: /growth-experiment — hypotheses from this audit become experiment specs.
Brain reads / writes
If a companion aether-growth-brain repo is connected:
Before auditing:
- Read
knowledge/icp-map.md— check current ICP definition; if bottleneck is messaging mismatch or fit gap, ICP may be the cause - Read
experiments/experiment-log.md— see if any prior experiments targeted the same funnel stage; avoid re-running experiments with LOSS verdicts without understanding why
Brain write (after audit):
- Append funnel audit summary to
experiments/experiment-log.md: constraint stage identified, bottleneck type, top hypothesis - If ICP mismatch detected: flag in
knowledge/icp-map.mdwith note to re-run/icp-research
Brain not connected: proceed; recommend documenting audit findings in a local file for future reference.
Anti-patterns
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Fixing multiple funnel stages simultaneously | Cannot attribute which fix drove any result | Fix one constraint; measure; then move to the next |
| Using aggregate conversion rate instead of cohort/stage data | Hides where the drop is happening | Require stage-level data; return BLOCK if unavailable |
| Optimizing downstream of the primary constraint | Adding a better CTA below a broken landing page is invisible if nobody reaches the CTA | Iron Law: always fix the biggest absolute drop first |
| Classifying bottleneck type without evidence | "I think it's messaging mismatch" is not a classification | Every type must be backed by at least 2–3 data observations |
| Running funnel audit with stale data (>60 days) | Recent product or copy changes invalidate old numbers | Ask for data freshness before starting; flag if >30 days |
| Skipping "what NOT to fix" section | Team immediately pivots to fixing secondary issues | Always include at least one "not in scope" stage with rationale |
| Treating fit gap as a growth problem | Fit gap is an ICP problem — you're reaching the wrong people | Route to /icp-research before running growth experiments |
| Cutting channels based on last-touch CPA before checking lead quality by channel source | Last-touch CPA hides whether a channel is producing unqualified leads or truly underperforming; you may cut a high-quality top-funnel channel because last-touch credit flows to bottom-funnel retargeting | Run the paid acquisition channel assessment appendix before any channel cut decision; require lead-to-close rate by source |
Benchmarks (2025–2026)
| Funnel stage | Benchmark | Notes |
|---|---|---|
| Visitor → Signup (PLG SaaS) | 3–5% | Below 2% = likely messaging mismatch on landing page |
| Signup → Activation (FVM, 7 days) | 30–40% | Below 20% = friction or onboarding failure |
| Activation → Paid conversion (PLG) | 5–8% | Below 3% = value proof insufficient or pricing barrier |
| MQL → SQL (B2B SaaS) | 15–25% | Below 10% = lead quality or ICP definition issue |
| SQL → Demo completed | 60–75% | Below 50% = scheduling friction or disqualification too late |
| Demo → Proposal | 40–60% | Below 30% = discovery quality or solution fit gap |
| Proposal → Close | 25–40% | Below 20% = pricing, trust, or competitive loss |
| D7 retention (high-frequency SaaS) | >25% | Below 15% = activation failure; run Shape 3 retention curve analysis |
| D30 retention (PLG high-fit users) | >30% | Below 15% = PMF not yet proven for this segment |
| TTFV (self-serve) | <15 minutes | >30 min = critical friction; activation churn likely |
Benchmark caveat: apply only when product type matches. Low-frequency, seasonal, or enterprise products will have different natural rates. Establish your own baseline before benchmarking.
Related skills
| Skill | When to use |
|---|---|
pmm/icp-research/SKILL.md | Bottleneck = messaging mismatch or fit gap: ICP may be wrong |
growth/growth-experiment/SKILL.md | After audit: hypotheses become experiment specs |
growth/retention-analysis/SKILL.md | Curve Shape 3 (sharp early drop): activation failure identified by funnel audit |
growth/DOMAIN.md | PLG motion definitions, FVM instrumentation, activation audit protocol |
Validation criteria
- Single constraint identified and stated explicitly
- Calculation shown (absolute drop × relative drop)
- Bottleneck type named with evidence
- Hypotheses written in "If/then/because" format
- "What NOT to fix" section included
- Effort and signal window stated per hypothesis
- If paid channels are present: appendix activated, attribution model declared, each channel classified as SCALE/KEEP/INVESTIGATE/CUT with explicit CPA and lead-quality reasoning
Appendix — Paid acquisition channel assessment
ACTIVATE IF the funnel under audit includes any paid acquisition channel (search ads, social ads, sponsored content, paid distribution). SKIP this appendix if no paid channels are present.
Required data inputs
Before running this appendix, confirm all of the following are available:
- Channel name (one row per channel)
- Measurement period (must match the main funnel audit period)
- Spend by channel (absolute, same currency)
- CPA (cost per acquisition) by channel
- Lead-to-qualified ratio by channel (what % of channel leads become sales-qualified or otherwise defined as qualified)
- Attribution model in use (last-touch, first-touch, linear, data-driven, or other)
BLOCK. If any of the above are missing, return:
"Paid channel assessment requires per-channel spend, CPA, and lead-to-qualified
ratio. Aggregate blended CPA across channels is insufficient — it hides which
channels are driving cost and which are driving quality. Please provide the
above data per channel before running this appendix."
Attribution model check
IF attribution_model = last-touch ONLY:
→ WARN. Return:
"Last-touch attribution systematically understates top-of-funnel channels
and overstates bottom-funnel. CPA numbers are directional only — do not cut
channels based on last-touch alone. Before acting on any channel classification
below, verify lead-to-close rate by original source, not by last touch."
If a multi-touch or data-driven attribution model is in use, note this and proceed. If attribution model is unknown, treat as last-touch and apply the warning.
Channel classification framework
For each channel, apply exactly one classification. Use the logic in order — the first matching condition wins.
SCALE
IF CPA < target
AND lead-to-qualified ratio is within acceptable range (defines "acceptable" as:
within 20% of the best-performing channel's lead-to-qualified ratio)
AND volume is sustainable (channel has not shown audience saturation signals
in the current measurement period)
→ Classification: SCALE
Recommendation: Increase spend systematically. Set a spend ceiling (typically
2–3× current) before the next review cycle, and define the CPA threshold at
which you will re-evaluate.
KEEP
IF CPA is at target or within 20% above target
AND lead-to-qualified ratio is acceptable
→ Classification: KEEP
Recommendation: Maintain current spend. Optimize audience targeting and creative
before increasing budget. Do not scale until one optimization cycle has run
and CPA has not degraded.
INVESTIGATE
IF CPA is inconsistent across periods (variance >30% period-over-period)
OR volume and quality signals conflict (e.g., high volume with low lead-to-qualified ratio,
or low volume with high CPA variance)
→ Classification: INVESTIGATE
Recommendation: Pause any spend increases. Audit attribution (are conversions
being assigned correctly?), audience overlap (is this channel cannibalizing another?),
and creative fatigue (is CTR declining while CPC rises?). Do not classify as
CUT based on one bad period — establish pattern before cutting.
CUT
IF CPA > 2× target consistently (across ≥2 measurement periods, or clearly established
in a single period with no mitigating factors)
AND lead-to-qualified ratio confirms poor fit (near-zero close rate from this channel's leads)
→ Classification: CUT
Recommendation: Pause channel. Reallocate budget to any SCALE or KEEP channels
first. Document why the channel failed (audience mismatch, offer mismatch, or
structural channel mismatch) before attempting re-entry.
Dangerous winner detection
A "dangerous winner" is a channel that looks profitable on current surface metrics but carries signals of imminent degradation. Run this check on any channel classified as SCALE or KEEP.
FOR each SCALE or KEEP channel:
Check for ≥1 of the following degradation signals:
(a) Audience size in targeting platform is declining (target audience available
impressions trending down over the measurement period)
(b) CPC trending up ≥20% month-over-month (the channel is becoming more
expensive to access)
(c) High volume but lead-to-close rate near zero (volume is real but none of
it converts beyond the acquisition event)
IF ≥1 signal present:
→ Override classification to WARN. Return:
"WARN: Channel [X] shows dangerous winner pattern — surface CPA looks good
but [specific signal: declining audience / rising CPC / near-zero close rate]
suggests performance will degrade. Do not increase spend without investigating
[the specific signal]. Recommend holding spend flat for one more measurement
period and re-running this assessment before committing to scale."
Channel assessment output format
## Paid acquisition channel assessment
Attribution model: [model name + warning if last-touch]
| Channel | Spend | CPA | vs. Target | Lead-to-Qualified | Classification | Recommendation |
|---------|-------|-----|------------|-------------------|----------------|----------------|
| [Name] | [$X] | [$Y] | [+/-Z%] | [X%] | SCALE / KEEP / INVESTIGATE / CUT | [one-line action] |
### Dangerous winner alerts
[If any: "WARN: Channel [X] — [specific signal]. Hold spend. Re-evaluate in [period]."]
[If none: "No dangerous winner signals detected in this period."]
### Reallocation plan (if any CUT channels)
[If budget is being freed: "Reallocating $[X] from [cut channel] to [scale/keep channel].
Rationale: [one sentence]."]
References & Sources
Tier 1:
- Reforge growth loops and funnel frameworks: stage definitions, AARRR architecture, north star metric
- growth-funnel-audit (growth-skills v1.0, score 8.5/10): bottleneck classification system, absolute × relative constraint logic
Appendix sources:
- Ad lead quality analysis concepts: CPA classification thresholds, lead-quality-versus-CPA two-axis decision logic, and audience degradation signals transformed into Fieldwork IF/THEN/CONTRACT format. Original decision logic was a scoring model with numeric lead quality tiers; transformed here into binary qualification signals (lead-to-close rate as the quality proxy) with explicit BLOCK/WARN conditions and agent-agnostic data requirements.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most audit compliance skills give in ~4.5k tokens
Counted across 937 of the 1,487 authors here whose files we hold, read 2026-08-07
- Fetch latest guidelines before each reviewin 43 of 937, across 3 files
- Group findings by severityin 43 of 937
- Check files against all fetched rulesin 42 of 937, across 2 files
- Output findings in terse file:line formatin 41 of 937, across 3 files
- Ask user which files to review if none specifiedin 41 of 937, across 3 files
- Read specified files or prompt user for filesin 39 of 937, across 1 file
- Generate the audit reportin 33 of 937, across 30 files
- Assign a severity to every findingin 25 of 937
- Run automated accessibility scansin 23 of 937, across 13 files
- Output a markdown audit reportin 22 of 937
- Map findings to WCAG criteriain 20 of 937, across 10 files
- Confirm audit scopein 19 of 937, across 9 files
Said here and by no other author read
- Block and request stage data if unavailable
- Map the funnel using input, output, and conversion rate
- Calculate absolute drop and relative drop per stage
- Identify one primary constraint per audit cycle
- Name the bottleneck type using specific data points
- Write three to five falsifiable experiment hypotheses
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.