Funnel analysis: count people through the journey, not pageviews
4 min read · published 2026-10-23
What a funnel analysis needs
Signups are flat and the graph will not say why. A funnel analysis is the question behind that: of the people who landed, how many signed up, how many activated, how many paid. The honest version counts people, admits what it cannot know, and takes an afternoon to wire, not a quarter. This is what a good one includes, how it works here, and where other tools go further.
- People, not events. “12,401 pageviews” answers nothing about a journey. Each step should count the distinct people who did it, once each, so the person who refreshed eleven times counts the same as the one who glanced.
- Steps that are real event names. If step one is “Awareness” and no such event exists anywhere in your code, the chart is a wish. A step is a thing your product can emit: page_view, signup, checkout, paid.
- One identity per person across steps. The same user id on every event, or the four bars are four unrelated counts wearing one title.
- An honest answer about order. Strictly ordered funnels quietly drop everyone who did things out of sequence, and you never see it happen. Know which kind you are reading.
- A stated range. How far back the bars reach should be a number you chose, not a number the tool decided during the incident.
- Wiring that fits a small product. If the project starts with a tracking plan, a warehouse and an ingestion budget, the funnel ships next year.
What it looks like here
npx upcontrol in the repo hands the setup to the coding agent you already use; ten are supported, among them Claude Code, Cursor and Codex. You ask in plain language, “track my users from first visit to purchase”, and the agent wires the events with your users as the actors. No tracking code written by hand. Node has an SDK, and a sender in Go, Rust or the browser writes the same one-line JSON to the same wire: an event name, that it is an event, and who did it.
The card is built from events the project has already received: Add widget, Funnel, then press your events in journey order, two to twelve steps. Each bar is the number of distinct people with that event in the range, counted once however many times they did it.
One thing said plainly: the order is your claim, not an enforced sequence. A person counts at a step if they have that event at all, so a later bar can read higher than an earlier one, and that is a real answer, people arriving by another door, not a bug. A tool that quietly changed the definition under you would be worse than a loose one stated out loud.
| Plan, monthly | The funnel reads back |
|---|---|
| Free | 1 day |
| Indie, $11 | 7 days |
| Growth, $24 | 31 days |
| Agency, $49 | 365 days |
How far back the range reads is the plan you are on, from the pricing page as of 2026-10. Funnels, retention grids, breakdowns and A/B tests all read from the same events, on the same boards as your uptime checks and logs, because checks, logs and events are one product here.
Where dedicated analytics tools still win
- Session recordings and replays. We record clicks, rage clicks, moves and scroll for heatmaps, and nothing that replays a session. Tools built for analytics alone carry both.
- Depth and distance. A decade-old analytics platform keeps years and digs with paths, cohort explorations and notebooks. Our boards read back at most 365 days on the largest plan, and web analytics reaches 31 days at most.
- Ad attribution beyond UTM tags, and the integration catalogue of an incumbent. Younger product, fewer integrations; that is the trade.
Build one in five minutes
- Run npx upcontrol in the repo. Tell the agent the journey you want: “track my users from first visit to purchase.” It writes the events with your user ids as the actors.
- Use the steps it sends as your event names; prefix your ids (u_1042, not 1042), because a bare long number is scrubbed as a card number and an event with no actor never counts.
- Open the dashboard, press Add widget, pick Funnel, and press your events in order. Name the card.
- Read the drop between two bars. That gap, with the log lines and the deploy beside it when something broke, is where the next fix is.

The journey, wired by the agent you already have: https://upcontrol.io/?utm_source=blog&utm_medium=vs&utm_campaign=engine