Skip to content

Level Funnels: How to Find the Level Where Players Quit

Find levels worth investigating with reach counts, completion rates and fail reasons. Learn to compare cohorts and game versions, with report screenshots.

Free plan · No card required · 14-day Max trial included

By Vexil

7 min read

Updated
Cute blob players walking across floating platforms that get narrower, some falling into clouds at a glowing red gap, while the AnyAnalytics axolotl inspects the gap with a magnifying glass.
On this page

Every game has a level that eats players. Somewhere between the tutorial and the credits there's a jump that's too long, a boss with too much health, or a timer that's three seconds too tight. Players hit it, sigh, close the app, and never come back. They won't email you about it either.

A level funnel helps you find where progression drops. Pair it with attempt completion rates and fail reasons to choose a level to investigate. This guide explains the difference between reach counts and an ordered funnel, how to compare the right players, and what to test once a level stands out.

The screenshots are from AnyAnalytics with sample data from our demo game, Space Hopper. The method works in any analytics tool.

What is a level funnel?#

An ordered funnel follows the same cohort through a sequence of steps within a chosen conversion window: started level 1, then level 2, then level 3. Its bars get shorter as fewer of those players progress.

A per-level reach report is different: it counts players who reached each level in the selected date range. Returning players can start at higher levels without replaying level 1, so those counts need not decline. Use Insights → Funnels when you need a defined sequence and conversion window; use the Game report to inspect level reach and attempt results.

The question is never "do players drop off?" They always do. The question is where the drop-off is bigger than it should be.

Step 1: Send three events#

These three events power the Game report. Send a start for each attempt and exactly one completion or failure for its result, with the same level value:

JavaScript / TypeScript
analytics.track("level_start", { level: 12 });
analytics.track("level_complete", { level: 12, duration: 92, score: 3400 });
analytics.track("level_fail", { level: 12, duration: 38, reason: "timeout" });

Use the same level value on the start and end of an attempt, include duration in seconds, and give fails a reason from a short, fixed list. If you're in Unity, here's the five-minute setup. For the full list of events worth tracking, see 8 events every mobile game should track.

Step 2: Read "players reached"#

In AnyAnalytics, the Game → Players reached view shows per-level reach from your events. Start by checking the date range and which players it includes. The screenshot below is sample data with 1,000 players at level 1 and 749 at level 12:

Players reached: 1,000 players started level 1 and 749 made it to level 12.

Explore the Game demo to try these views with sample data.

This sample has no sudden cliff. That shape is a useful starting signal, but it does not establish a healthy retention rate on its own. Compare new players with enough time to progress, and separate platform and game version. A recent player who has not reached level 12 may still be playing.

Here's what to look for:

ShapeWhat it looks likeWhat it usually means
Gentle slopeA few points lost per levelNo obvious single cliff; compare with your own previous cohorts
CliffOne level loses 2-3× more than its neighborsA difficulty spike, a confusing mechanic or a bug
Early cliffBig loss at levels 1-3Onboarding problem: controls, tutorial or first impression
Plateau, then cliffFlat for a while, then a sudden dropA paywall, an energy system or a content gate kicking in

Step 3: Check fail rates per level#

Reach counts suggest where to look. The Start → finish view adds evidence by showing how each level's attempts end; it cannot establish the cause by itself:

Completion and fail rates per level, with the median time to beat each one.

Three columns do most of the work:

  • Fail rate. Fails as a share of starts. A smooth climb is a difficulty curve. A sudden jump is a wall.
  • Median time. If one level takes three times as long as its neighbors, players might be lost rather than challenged.
  • Hardest level. AnyAnalytics flags the level with the highest fail rate among levels started at least 10 times, so one unlucky attempt can't crown a level. In this sample it's Level 56, which players fail 52.9% of the time.

High fail rate + small drop-off = hard but fair. Players retry and get through. That's often fine, even fun.

High fail rate + big drop-off = a wall. Players try, fail, and leave. Fix this one first.

Step 4: Find out why they fail#

Break level_fail down by the reason property in a trend chart to test a possible explanation:

level_fail by reason. Add a filter for one level to see how that level kills players.

Add a filter for level = 12 and you're looking at how that level beats people:

  • Mostly timeout: investigate the timer, route length and instructions. Test a longer timer and compare fail rate and progression.
  • Mostly died: inspect enemy damage, trap spacing and checkpoints. Separate failures by attempt number if you track it.
  • Mostly quit: investigate length and clarity. Only explicit quits you instrument are counted; closing or killing the app may leave an attempt without a result.

The Where players are view shows the level each player started most recently in the report's scope. A crowd on one level is a reason to investigate, not proof that those players are currently online or permanently stuck.

Bonus: the funnel before level 1#

Levels aren't the only funnel in your game. You can chain any events in Insights → Funnels. This one follows players from opening the game to their first purchase:

A four-step funnel from opening the game to a first purchase, with the median time between steps.

In this sample, 40% of the starting players did not reach the level-start step within the selected funnel window. For them the main menu is level zero, and it's the hardest one in the game. Real games see this too: long loading screens, a sign-in wall or a menu with nowhere obvious to tap. Let new players start playing in one tap.

The median time between steps is worth checking as well. If "opened the game → started a level" takes minutes instead of seconds, something is in the way.

A worked investigation#

Suppose a new-player cohort has a larger drop between levels 11 and 12 than neighboring steps. First confirm that all cohorts had the same time to progress. Then:

  1. Filter level_fail to level = 11, since a drop before reaching level 12 may originate in level 11.
  2. Break failures down by reason and compare platforms and app_version.
  3. If timeout failures rose after one update, inspect the timer and any level changes in that build. Treat it as a hypothesis.
  4. Ship one change, such as more time, and compare equally mature new-player cohorts.
  5. Look for both fewer timeouts and more players reaching level 12. A lower fail rate alone is not enough.

This is an example investigation, not a measured result from Space Hopper.

How to fix a problem level#

Once you've found the level, change one thing at a time and watch the numbers:

  1. Ship one fix per version. Every event carries your app_version, so you can filter the report to the new build and compare it with the old one.
  2. Make later attempts easier after repeated failures. Test more time, a checkpoint or a hint, then compare progression as well as fail rates.
  3. Teach before you test. If a new mechanic appears in the level players fail, add an easier level that introduces it first.
  4. Move the gate. If a paywall or energy limit lines up with your cliff, players may be leaving because of the gate, not the level.
  5. Re-check in a week. You want the fail rate down and more players reaching the next level, not just one of the two.

FAQ#

What is a good level completion rate?#

There's no universal number, since it depends on genre and on where the level sits. Compare each level with its neighbors instead. A level that's much harder than the ones around it is the problem, whatever the absolute rate.

What's the difference between drop-off and fail rate?#

Fail rate is about attempts: how often a level beats the player. Drop-off is about people: how many of the starting cohort did not reach the next level within the conversion window. A level can have a high fail rate and almost no drop-off if players happily retry.

How many players do I need before the numbers mean anything?#

The more the better. A rough guide: wait for at least a few dozen attempts per level before reacting. AnyAnalytics only names a "hardest level" once it's been started at least 10 times.

Can I build a funnel for my tutorial?#

Yes. Send tutorial_step_completed with a numeric step property, then chain that event in Insights → Funnels with a different step filter on each stage. Choose a conversion window that gives new players enough time to finish.

Find your level zero#

Start by verifying three level events, then let enough players attempt your levels. The Game report gives you reach and attempt results; an ordered funnel lets you follow a cohort through the next steps.

Start free with AnyAnalytics (no card required), send the level events, and open the Game report to choose your next investigation.

  • game-analytics
  • game-design
  • retention