Funnels
A funnel is a saved sequence of steps — pages visited or custom events fired — that shows how many visitors made it from step 1 to the end, and exactly where the rest dropped off. Unlike most privacy-first analytics tools, Mitr's funnels can span more than one connected app in your workspace, so a step on your marketing site and a step inside your Flutter app can be part of the same funnel.
What it's for
- Signup-to-activation. Step 1: visited
/pricing. Step 2:signup_completedevent. Step 3:onboarding_finishedevent inside your app. See the conversion rate and drop-off at each stage. - Cross-app journeys. A visitor reads your website, then converts inside your Flutter app days later. Because both are connected apps in the same workspace, a funnel step can require either — as long as the visitor was identified (see below).
- Checkout drop-off.
/cart→checkout_started→purchase_completed, to see exactly which step is losing people.
How a step is defined
Each step matches on exactly one of:
path— an exact page path, e.g./pricingevent_type— an exact custom event name, e.g.purchase_completed
There's no regex or wildcard matching in v1 — steps match exactly, which keeps funnel definitions predictable and fast to compute. A step can optionally be pinned to one specific connected app, or left open to match that step in any app in the workspace.
Cross-app steps and anonymous visitors
Funnel steps are evaluated by matching the same visitor's hashed
identifier (user_hash) across events. For an anonymous
visitor, that hash is scoped to a single connected app by design — the
same privacy boundary documented on /trust — so a
funnel step can only correlate across apps for visitors who called
identify() and have cross-app identity enabled for the
workspace. A purely anonymous cross-app funnel isn't possible, and isn't
meant to be: that's the same anonymity guarantee, not a limitation
specific to funnels.
Setting one up
From the dashboard: Funnels → New funnel. Name it, add steps in order, and save. Results are computed live over whatever date range you select — there's no waiting for a scheduled report.
API
| Method | Path | Purpose |
|---|---|---|
| POST | /api/v1/funnels | Create a funnel |
| GET | /api/v1/funnels | List funnels in your workspace |
| GET | /api/v1/funnels/{id} | Get one funnel's definition |
| PUT | /api/v1/funnels/{id} | Replace a funnel's name/steps |
| DELETE | /api/v1/funnels/{id} | Delete a funnel |
| GET | /api/v1/funnels/{id}/results | Computed results for a date range |
Any team member in your workspace can create, view, edit, or delete a funnel — a funnel is just a saved analytics view, the same trust level as viewing the dashboard itself.
Example results shape
{
"steps": [
{ "label": "Visited pricing", "enteredCount": 4200,
"convertedCount": 4200, "conversionRate": 1.0,
"dropOffFromPrevious": 0 },
{ "label": "Signed up", "enteredCount": 4200,
"convertedCount": 860, "conversionRate": 0.205,
"dropOffFromPrevious": 3340 },
{ "label": "Finished onboarding", "enteredCount": 860,
"convertedCount": 611, "conversionRate": 0.710,
"dropOffFromPrevious": 249 }
]
}