Built in the URL, so a funnel is shareable by definition
The builder keeps its entire state in the address bar. Sending a colleague a funnel means sending them a link, and there is no second saved-funnel mode that can drift out of step with what the builder does.


Conversion, with the window stated
Steps are matched within a conversion window you set. A checkout funnel measured over an hour and an onboarding funnel measured over a fortnight are different questions, and the answer changes if the window is left implicit. Three ordering modes cover strict sequences, any-order sets and unordered completion.


Loss per step, not just the total
The drop-off waterfall shows exactly how many people were lost between each pair of steps and what share that was. A funnel with a healthy end-to-end rate and one catastrophic step is a common and completely invisible situation if you only look at the headline.


And then: who were they
Every step can be resolved to the people who reached it and stopped. That list links into the person profiles, which is where a drop-off stops being a statistic: you can see what those specific people did instead, which property they came from and whether they ever came back.
How it works, precisely
- Step types
- Event name or page path, in any combination
- Ordering
- Strict order, any order, or unordered completion
- Window
- Any number of hours; stated on the report, not assumed
- Engine
- ClickHouse windowFunnel over parameterized SQL
Funnels: the usual questions
Can a funnel span two of my properties?
Funnel steps are evaluated within one property. Cross-property questions are asked on the insights page and on person profiles, where the identity graph has already resolved the same person across products.
Are funnel queries safe with user-supplied values?
Yes. The filter layer compiles to parameterized SQL through a map-based allow-list, and no value is ever interpolated into a query string. The injection-safety suite covers prototype pollution, wildcard leakage and parameter binding.
Next, most people read
Run it yourself this afternoon
Clone the repository, bring up the stack with Docker Compose, paste one script tag. The data never leaves your machines.

