Setting up funnels (Funnels) for mobile app analytics
Funnel — sequence of events a user should pass through to achieve goal. Sounds simple. In practice, half the funnels in Firebase are set up incorrectly: wrong time window, events with non-matching parameters, or funnel built in interface but data doesn't flow because of event implementation error.
Where to build funnels
Three main tools depending on analytics stack:
Firebase / Google Analytics 4 — Explore section → Funnel Exploration. Funnels built from event stream.
Amplitude — Funnel Analysis in Analytics section. More flexible settings: can set conversion window differently for each step, group by properties.
Mixpanel — Funnels in Reports section. Differs in ability to view funnel by unique users, sessions or events — different metrics give different numbers.
Correct event structure for funnel
Registration funnel looks like:
app_open → sign_up_start → sign_up_email_entered → sign_up_password_entered → sign_up_success
Each event — separate step. Common mistake: developers log only start and end of funnel. Then unclear where users drop — after email input or after password input.
// Correct — each step separately
Analytics.logEvent("sign_up_start", parameters: ["method": "email"])
// After email entered
Analytics.logEvent("sign_up_email_entered", parameters: [:])
// After password entered
Analytics.logEvent("sign_up_password_entered", parameters: [:])
// After successful registration
Analytics.logEvent(AnalyticsEventSignUp, parameters: ["method": "email"])
Setting up funnel in Firebase Explore
- Explore → + New Exploration → Funnel Exploration
- Add steps in sequence order
- Set Conversion Window — typical values: 1 day for registration, 7 days for onboarding, 30 days for first purchase
- Enable Open funnel if step order not required, Closed — if strictly sequential
Conversion Window — most influential parameter. Same funnel with 1 day and 7 day window can show 15% and 40% conversion respectively. Choice depends on how quickly users actually decide.
Funnels with segmentation parameters
One powerful technique — comparing funnel across segments. In Amplitude done through breakdown:
// Funnel steps same, but break down by:
// - install source (utm_source)
// - device type (iOS vs Android)
// - app version
Example: conversion from registration to first purchase for paid traffic users — 8%, organic — 22%. Signal that UA audience quality needs review.
Errors that break funnel
Different user_id at different steps. If user starts funnel as anonymous (device_id), and after registration becomes authorized (user_id), and analytics doesn't do identity merge — funnel breaks at registration step. In Firebase this is Analytics.setUserId() after successful authorization. In Amplitude — identify.setUserId() + identify.alias().
Events logged on server and client simultaneously. purchase with one transaction_id goes from both iOS SDK and backend. In funnel user passes step twice — conversion distorted.
Incorrect timestamp. If on Android events sent with delay (offline queue) with server timestamp not client — event order in funnel may be violated.
What's included in the work
- Audit of current events for funnel step compliance
- Adding intermediate events where missing
- Setting up funnels in Firebase Explore / Amplitude / Mixpanel
- Conversion window configuration for real user behavior
- Segmentation setup by source, platform, version
- Documenting funnel schema for team
Timeline
One funnel with event audit: 1 day. Complete set of funnels (registration, onboarding, monetization): 3–4 days. Cost calculated individually.







