
How to find where users drop off in onboarding
A practical framework to diagnose onboarding funnel drop-off using step-level analytics, segment cuts, and fixes you can ship without an App Store release.
"You need to fix onboarding" is not a plan. Growth leads ask where users leave, product wants why, and engineering wants what to ship.
This post gives a repeatable drop-off diagnosis framework: define the funnel, find the cliff, segment the loss, form hypotheses, and validate fixes with published flow versions. Rheo's analytics are built for this workflow, but the logic applies to any step-instrumented onboarding system.
Step 1: Define start, complete, and the steps in between
Before charts, agree on definitions:
| Term | Typical definition |
|---|---|
| Start | User receives flow_started for the channel |
| Complete | User reaches a terminal completion outcome for the flow |
| Step | Each screen, decision, or external surface (paywall, permission) |
Write the ordered step list from your live published graph, not from memory. Version pins matter: if the channel changed mid-week, filter analytics to one published version or you will blend incompatible sequences.
In Rheo: Apps → Flows → (flow) → Analytics. Choose environment (test vs live) and date range aligned with the pin you care about.
Step 2: Read the funnel for cliffs, not averages
Headline completion rate tells you if there is a problem. Funnel view tells you where.
Look for:
- Cliffs: A step loses more than 2x the average step-to-step drop.
- Flatlines: Many starts, near-zero progress past step 1 (load failure, crash, or instant dismiss).
- Paywall holes: Healthy arrival at paywall, weak
purchase_completedor trial events.
Example interpretation
| Step | Users | Step-to-step retention |
|---|---|---|
| Welcome | 10,000 | 100% |
| Value prop | 7,200 | 72% |
| Personalization | 6,800 | 94% |
| Paywall | 2,100 | 31% |
| Complete | 1,400 | 67% |
The cliff is personalization → paywall, not welcome. Fixing welcome copy wastes a sprint. Investigate what happens on the personalization screen and the transition into billing.
Step 3: Use drop-off highlights
Rheo's drop-off view emphasizes steps with disproportionate abandonment. Prioritize builder time there first.
Pair drop-off with median step duration:
- High drop-off + long duration: Confusion, heavy media, or network-bound loader.
- High drop-off + short duration: Users bounce immediately (copy mismatch, aggressive ask, or technical fail).
Step 4: Segment before you blame the UI
Aggregate funnels hide mixed populations. Split completion by:
| Segment | What it reveals |
|---|---|
| Platform | iOS vs Android layout or permission differences |
| Locale | Translation quality or copy length overflow |
| App version | SDK bugs or old binaries missing fixes |
| Experiment variant | Whether a test arm caused regression |
| Custom property | Campaign, tier, or feature flags from your app |
Use the completion heatmap to spot segments that lag the overall rate. A 60% global completion can mask 40% on one locale.
Attribution-sensitive flows
If the flow includes ATT or MMP-dependent decisions, check iOS segments separately. Low opt-in can truncate branches that look like UI drop-off.
Step 5: Reconstruct journeys for edge cases
Population charts are not enough for rare failures. Open Customers, filter to users who started but did not complete, and read individual timelines:
- Did they hit
failedon a RevenueCat paywall? - Did they dismiss at a permission prompt?
- Did events stop mid-flow (crash or force quit)?
Even 10 timelines often explain a cliff faster than a week of debate.
Step 6: Form hypotheses tied to one step
Good hypotheses are falsifiable and local:
| Bad | Good |
|---|---|
| "Onboarding is too long" | "31% exit between personalization and paywall because we ask for email on that screen" |
| "Paywall is ugly" | "Dismiss rate is 55% when users reach paywall in under 30 seconds" |
Limit to one primary change per publish so the next week's funnel attributes movement correctly.
Step 7: Ship fixes OTA and re-measure
For Rheo teams:
- Edit the flow in the builder (copy, order, branch, loader, paywall Fallback).
- Publish a new version with a clear label.
- Pin the channel to the new version, or run an experiment against the old pin.
- Compare the same date-range length after traffic stabilizes.
Avoid changing multiple steps and the paywall offering on the same day unless you accept ambiguous attribution.
Common drop-off patterns and fixes
Pattern A: Step 1 to step 2 cliff
Causes: Slow first paint, unclear CTA, login wall too early.
Fixes: Reduce first-screen weight (image/video), strengthen single CTA, defer account creation.
Pattern B: Pre-paywall cliff
Causes: Survey fatigue, permission prompt, or sudden tone shift before billing.
Fixes: Move permissions, shorten quiz, add bridge screen that matches paywall promise.
Pattern C: Paywall arrival OK, purchase weak
Causes: Offer mismatch, price surprise, broken RC integration, dismiss with no Fallback.
Fixes: Align copy with onboarding, verify offering ids, branch dismissed to second chance.
Pattern D: Post-purchase drop-off
Causes: Premium welcome too long, account setup failure, missing entitlement sync in app UI.
Fixes: Shorten welcome, gate features with RevenueCat entitlements in host app, decision on onb_rc_last_event.
Diagnostic checklist (copy for your doc)
- Funnel filtered to correct environment and version
- Biggest cliff step identified with counts
- Duration on that step checked
- Platform and locale segments compared
- 5-10 incomplete customer timelines reviewed
- One hypothesis written
- Fix published and pin or experiment started
- Re-check funnel after equal calendar window
How this connects to experiments
Drop-off diagnosis feeds the experiment backlog. When you find a cliff, duplicate the flow, change one thing, and A/B test. Experiments without diagnosis wander. Diagnosis without OTA shipping is slow.
Rheo keeps both in one place: same graph for analytics and editing, same channel for assignment.
When to escalate to engineering
OTA fixes cover content, structure, and branches. Escalate when timelines show:
- Consistent
failedon paywall across devices (integration) - Events stop on a specific app version only (SDK bug)
- Crashes correlated with a layer type (video, Lottie, OAuth)
Attach timeline exports and version ids to the ticket.
Worked example: from chart to shipped fix
Scenario: Meditation app, live channel, last 14 days.
- Funnel: 8,200 starts → 5,100 after "Choose goals" → 1,900 at paywall → 1,100 trial.
- Cliff: Choose goals → paywall (62% loss).
- Segments: Android loses 8 pts more than iOS on that step; Spanish locale matches average.
- Timelines: 8 users tapped through goals in under 5 seconds then disappeared before paywall (loader?).
- Hypothesis: Goals screen shows a 3s Lottie before continue; users abandon during animation.
- Fix: Publish version
goals-no-lottie; experiment 50/50 for 10 days. - Result: Paywall arrival +11% relative; trial starts +9% relative; promote variant.
Notice the fix was not "rewrite paywall." Step-level diagnosis aimed engineering at one layer change.
Connecting to revenue, not just completion
Product teams sometimes over-optimize completion screens that do not monetize. Add a guardrail metric on every diagnosis sprint:
| Primary | Guardrail |
|---|---|
| Trial starts | Paywall dismiss rate |
| Completion | Median time (do not speed users into confusion) |
| ATT opt-in | Trial starts (do not trade all revenue for IDFA) |
If completion rises and trials fall, revert or branch by segment.
Tooling beyond Rheo
Rheo is the system of record for in-app steps. Pair it with:
- RevenueCat for LTV and churn after trial
- MMP for campaign quality into the funnel
- Session replay (if you use it) for qualitative clips on the cliff step only
Do not duplicate event definitions across tools. Use Rheo correlation fields (flowId, versionId, variantId) when exporting to your warehouse.
Cadence: weekly onboarding review
| Day | Action |
|---|---|
| Monday | Pull 7-day funnel for active pin |
| Tuesday | Pick worst step or open experiment |
| Wednesday | Publish candidate fix to test channel |
| Thursday | QA on device |
| Friday | Pin or start experiment on live |
One rhythm beats quarterly hero redesigns.
Close the loop
Drop-off is not a one-time audit. Set a weekly review: same flow, rolling 7-day window, same version pin unless you shipped. Track completion and the worst step. Ship one improvement per week when traffic allows.
That cadence beats quarterly onboarding rewrites. Teams that treat onboarding as a living graph rather than a shipped feature consistently find revenue in steps competitors ignore.
Exporting for stakeholder reviews
Share a weekly PDF or slide with: funnel screenshot, worst step callout, one sentence hypothesis, and ship status. Rheo analytics stay the source of truth; the ritual keeps onboarding visible next to acquisition metrics in leadership meetings.
When drop-off diagnosis becomes habit, experiment ideas write themselves. Funnel analytics tell you what to test next; Rheo lets you ship that test before the next sprint planning meeting ends.
Start with yesterday's data. Fix the worst step this week. Repeat.