OwlMetry

Funnels

Define multi-step funnels to measure user conversion and drop-off across your app.

Funnels let you define an ordered sequence of steps that users should complete, then measure how many users reach each step and where they drop off. They are useful for tracking conversion flows like onboarding, checkout, or signup.

Add funnel tracking with your coding agent
Add OwlMetry funnel tracking to this project.
Run `owlmetry skills` to find the SDK and CLI skill files.

- Identify 2-3 key user journeys worth measuring conversion on
  (e.g., onboarding, checkout, activation).
- For each journey, define the funnel on the server via CLI with
  3-6 ordered steps, then add Owl.track("step-name") calls at
  each progression point in the code.
- Each step must be a point every user passes through — don't
  include optional side-paths or engagement actions as steps.
- Split alternative paths into separate funnels (e.g., screenshot
  export vs video export).

Funnel Definitions

A funnel definition is a project-scoped record with an ordered list of steps. Each definition includes:

FieldDescription
nameHuman-readable name (e.g., "Onboarding Flow")
slugURL-safe identifier (e.g., onboarding-flow) -- must match /^[a-z0-9-]+$/
descriptionOptional explanation of what this funnel measures
stepsOrdered array of step definitions (max 20)

Funnels are managed through the dashboard, the CLI, or the API.

Steps

Each step has a name and an event_filter that determines which events count as completing that step:

{
  "name": "Viewed Pricing",
  "event_filter": {
    "step_name": "viewed-pricing",
    "screen_name": "PricingScreen"
  }
}

The event_filter can match on step_name, screen_name, or both. When both are provided, an event must match both fields to satisfy the step.

A funnel can have up to 20 steps.

Tracking Funnel Steps

SDKs provide a track() method that emits an event matching the step name in your funnel definition:

track("viewed-pricing")    → matches event_filter { "step_name": "viewed-pricing" }
track("started-trial")     → matches event_filter { "step_name": "started-trial" }

The step name you pass to track() must match the step_name in the funnel definition's event_filter. For SDK-specific usage, see the Swift SDK or Node SDK guides.

You can also define steps that match on screen_name instead of or in addition to step_name. A step filter matching screen_name: "CheckoutScreen" would count any event from that screen.

Analysis Modes

Funnel queries support two modes that change how step completion is evaluated:

Open Mode (Default)

Each step is evaluated independently. A user counts toward a step if they completed it at any point during the time range, regardless of whether they completed earlier steps.

Open mode answers: "How many users performed each action?"

Closed Mode

Steps are evaluated sequentially. A user only counts toward step N if they also completed all preceding steps (1 through N-1), and in the correct order based on event timestamps.

Closed mode answers: "How many users completed the full progression from step 1 through step N?"

Analytics Results

A funnel query returns per-step analytics:

FieldDescription
step_nameName of the step
unique_usersNumber of distinct users who completed this step
percentagePercentage of total users who completed this step
drop_off_countUsers who completed the previous step but not this one
drop_off_percentageDrop-off as a percentage of the previous step

The total_users at the top level represents the total number of users in the funnel (all users who completed at least step 1 in closed mode, or any step in open mode).

Grouping and Segmentation

Funnel queries support a group_by parameter to break down results by a dimension:

Group ByDescription
environmentSegment by runtime platform (ios, android, web, etc.)
app_versionSegment by app version
experiment:<name>Segment by A/B experiment variant

Experiment grouping is particularly useful for measuring how different A/B variants affect conversion through a funnel.

Filtering

Funnel queries accept optional filters to narrow the data:

  • since / until -- date range
  • app_id -- restrict to a specific app
  • app_version -- restrict to a specific version
  • environment -- restrict to a runtime platform
  • experiment -- filter to a specific experiment variant (format: name:variant)
  • mode -- open or closed
  • data_mode -- production, development, or all (see Data Mode)

Storage

Funnel events are stored in a dedicated funnel_events table, partitioned monthly by timestamp, with structured rows containing step_name, user_id, screen_name, and experiments.

For API details, see the funnels API reference.

Ready to get started?

Install the CLI and let your agent handle the rest.