Mobile funnel tracking
Track onboarding flows, paywall conversion, and in-app purchase funnels using the Grometrics mobile SDK, custom events, and RevenueCat transaction data.
Last updated June 2026
Measure one complete attempt
An attempt starts when the entire first required step is satisfied. That event starts the conversion window and supplies cohort properties. An unfinished first group is not a started attempt; use separate steps to measure losses within the group.
Create up to 20 required conversion steps and 30 total steps. Choose Attempts in the funnel editor and set the property carrying your attempt ID. Existing funnels continue counting visitors.
Send one opaque attempt ID on every required event, including completion. Keep it when resuming across sessions and replace it when restarting. Missing IDs cannot advance the funnel. A repeated screen requires a new event.
Use original occurrence timestamps for offline events. Equal timestamps require distinct increasing values in the configured sequence property to prove step order. Reuse the same ingestion dedupeKey for delivery retries when sending events through the tracking API.
Set cohort properties on the event that completes the first required step. Configure up to three properties, such as flow version, app version, and paywall variant, to compare their combinations. Missing entry values remain Unknown even if a later event supplies them.
Assign paywall variants before the journey starts to compare end-to-end conversion fairly. An app upgrade during a resumed attempt stays in its entry version cohort. Later conflicting values are reported without moving the attempt.
The reporting period selects attempts by their first required step. Completion can occur after the reporting period within the saved conversion window. Pending attempts have time remaining; confirmed drop-off counts only expired incomplete attempts.
Filter and compare entry cohorts, inspect each transition, and export all matching cohorts. Rates with no denominator show no data. Retained history may be incomplete after deletion or partial imports. Attempt reports do not attribute revenue.
Provider events need an explicit matching attempt ID and a verified visitor link. A shared customer ID alone does not prove that a payment belongs to the same attempt.
After entry, an event with a sequence number no greater than the last accepted number is skipped. Later valid events can continue the attempt. If tied starting events have no usable order and disagree on a cohort value, that value stays Unknown; agreeing values are kept. Ordering issues are reported.
Exports include pending attempts after each step and median completion time in minutes for each result group. A group with no completed attempts has no median completion time.
A mobile funnel combines three types of steps: screen views, goal events, and transaction events synced from RevenueCat. React Native can capture screens through its navigation callbacks; native iOS, Android, and Flutter apps call trackScreen from their navigation lifecycle. You can mix all three in one funnel.
Prerequisites
- Grometrics mobile SDK installed and verified for iOS, Android, React Native, or Flutter
- RevenueCat setup completed if tracking in-app purchases or subscriptions
- At least one recorded app session in Settings > Tracking
Anonymous tracking and identity linking
Steps
Confirm screen tracking is working
Open your app, navigate through several screens, then go to Pages/Screens in Grometrics and confirm your screen names appear. If screens show as generic names, update your navigation stack to use descriptive route names.
Add custom goal events
Fire goal events only after the user completes the action, not when a form or screen loads. Common onboarding events include account_created, profile_completed, notifications_enabled, onboarding_completed, paywall_viewed, and paywall_dismissed. See the custom goal events docs for platform examples and naming rules.
React Native
1await tracker.track('account_created');23await tracker.track('profile_completed', {4had_avatar: true,5fields_filled: 4,6});
Merge anonymous and logged-in activity
After your auth session is saved, pass the same stable app user ID to RevenueCat and Grometrics. Identify retroactively merges earlier screens and goals with later server events and subscription revenue across every analytics report.
React Native
1await Purchases.logIn(user.id);2await tracker.identify(user.id);34// Before sign-out on a shared device5await tracker.reset();
Create the funnel in the dashboard
Go to Conversions > Funnels, create a funnel, then mix Screen, Goal, and Transaction steps in the same flow. Set a conversion window that matches your trial length and buying cycle.
Browser-to-server funnels use the same person
Canonical identity resolution is shared across funnels, Visitors, unique counts, revenue, goals, journeys, devices, and Realtime. A browser pageview and a backend event sent with the identified userId can complete one funnel path.
OR and all-of steps
In the funnel editor, use the filter button for property filters such as is_first_message = true, + OR for alternatives such as first_project_created OR template_imported, and ALL OF when one logical step requires every event in any order, such as profile_name_added plus profile_photo_added, profile_role_selected, profile_bio_added, and profile_topics_selected.
Options / Configuration
| Event name | When to fire |
|---|---|
| account_created | After successful signup, not when the form loads |
| profile_completed | After the user submits their profile |
| notifications_enabled | After the user grants push permission |
| onboarding_completed | After the user reaches the main app experience |
| paywall_viewed | When the paywall renders, especially if it is a modal overlay |
| paywall_dismissed | When the user closes the paywall without starting a trial |
Options / Configuration
| Step label | RevenueCat event |
|---|---|
| Trial Started | TRIAL_STARTED |
| Purchase | INITIAL_PURCHASE |
| Trial Converted | TRIAL_CONVERTED |
| Renewal | RENEWAL |
| Cancellation | CANCELLATION |
Event naming rules
Use lowercase letters, numbers, underscores, and hyphens only. Event names are limited to 64 characters. Send at most 10 properties per event, with keys up to 64 characters and values up to 255 characters.
Web checkout revenue
If the mobile funnel leads users into web checkout, connect Stripe analytics so the same source and screen path can be reviewed beside Stripe customers, renewals, refunds, and revenue attribution.
What happens next
Build a dedicated install-to-trial funnel when you need to diagnose the full path from first app open to trial start. Install-to-trial funnel
Troubleshooting
Screen names are not appearing
The screen name in your funnel step must exactly match what the SDK reports. Check Pages/Screens for the exact tracked names.
RevenueCat transaction steps show zero
Confirm RevenueCat is connected, identity linking uses the same user ID in both SDKs, and the conversion window is long enough for trial conversion.
Goal events are not registering
Confirm the event fires after at least one screen_view. Offline events are queued and sent when connectivity returns.
Some steps have data but later steps do not
This is usually a conversion-window issue. Increase the funnel window if users complete later steps after the current window expires.
Was this page helpful?