Funnel Analytics
Rules
- Define funnels as ordered step arrays:
[{ name, event, optional? }]— each step filters the previous step's users - Track events server-side: send events from API routes, not client — ad blockers skip 20-40% of client-side events
- Event schema:
{ event, userId, timestamp, properties: {} }— always includesessionIdfor funnel reconstruction - Drop-off rate per step:
(entered - exited) / entered * 100— highlight steps with > 20% drop-off as critical - Time-between-steps: measure median time from step N to step N+1 — long gaps indicate friction
- Cohort analysis: group users by signup week or acquisition channel — compare funnel performance across cohorts
- Conversion window: set a max time for funnel completion (e.g., 7 days) — ignore sessions that exceed it
- Visualization: horizontal funnel chart with percentage labels at each step — use bar width proportional to remaining users
- Segment funnels by: device type, acquisition source, user plan, geography — look for segments with abnormal drop-off
- Store raw events, compute funnels on read — don't pre-aggregate, you'll need to re-slice later
Avoid
- Funnels with more than 7 steps — simplify or group intermediate steps
- Counting page views as funnel steps — use intentional actions (click, submit, purchase)
- Ignoring mobile vs desktop differences — conversion rates often differ 2-3x
- Hardcoding funnel definitions — store in config so product can iterate without deploys