Skip to content

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_completed event. Step 3: onboarding_finished event 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. /cartcheckout_startedpurchase_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. /pricing
  • event_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

MethodPathPurpose
POST/api/v1/funnelsCreate a funnel
GET/api/v1/funnelsList 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}/resultsComputed 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 }
  ]
}

Have questions about integration or security? Drop us a line directly.