Skip to content

Funnels

Funnels visualize the conversion path through a series of events. Use them to find where players drop off during onboarding, purchases, or feature adoption.

ModeBehaviorUse Case
LooseEvents can happen in any order, repeated events count onceFlexible user journeys (default)
StrictEvents must happen in exact sequenceTutorial completion, purchase flow

Click Create Funnel in the dashboard:

  1. Name your funnel (e.g., “Tutorial to First Purchase”)
  2. Select mode: Loose or Strict
  3. Add steps by selecting events:
    • Step 1: tutorial_start
    • Step 2: tutorial_complete
    • Step 3: first_purchase
  4. Click Save

The dashboard immediately shows conversion rates between each step.

Track players from tutorial through purchase:

# Step 1: Tutorial Start
QuestData.track("tutorial_start", {"difficulty": "normal"})
# Step 2: Tutorial Complete
QuestData.track("tutorial_complete", {"time_spent_seconds": 300})
# Step 3: First Purchase
QuestData.track("purchase_completed", {
"product_id": "starter_pack",
"amount": 4.99
})
Drop-Off %Severity in DashboardRecommended Action
<30%green / no bannernormal friction — monitor
30–50%amber warning bannerreview UX, run a session-replay or quick survey
≥50%red critical bannertreat as a bug or blocker; fix this week

Drop-Off Causes — Why Players Stop Here {#drop-off-causes}

Section titled “Drop-Off Causes — Why Players Stop Here {#drop-off-causes}”

When a step shows a Drop-Off, the dashboard banner links to this section. The anchor #drop-off-causes is referenced from pages/[gameId]/funnels/[id].vue.

A drop-off between Step n and Step n+1 means: of all players who fired the event at Step n, this percentage never fired the event at Step n+1 in the configured time window. The cause is almost always one of these:

The next action exists in the game but is hard to find.

  • Button blends into the background, isn’t on the first screen, or requires scrolling.
  • Tooltip / hint never appeared.
  • The flow has too many decisions (paradox of choice).

How to verify: record a session-replay of 5 dropped-off players. If they hesitate or wander, it’s UX. Add a guided onboarding tour or move the next CTA above-the-fold.

The next step asks for something heavy.

  • Sign-up form, payment, account linking, age gate, OS permission prompt, large download.
  • Long loading screen between Step n and Step n+1.

How to verify: add intermediate events (shop_open, payment_method_select, form_field_focused) and re-check the funnel. The drop probably moves to that sub-step. Ease the friction (fewer fields, deferred sign-up, faster loading).

The action is impossible right now.

  • Crash on a specific OS / device / build version (cross-check with the Crashes page).
  • Server-side endpoint returns 500 / timeout.
  • Required asset missing in a new build.

How to verify: filter the funnel by app_version (Strict mode supports this). If one build’s drop-off is much higher than another’s, you have a regression. Open the Logs page for that timeframe.

The player simply doesn’t want to continue.

  • Reward doesn’t feel worth the effort (typical for tutorials, ad-watch flows).
  • Feature is irrelevant to the player’s segment (try splitting the funnel by Player Tag).
  • Confusing or off-tone copy.

How to verify: segment the funnel — if a tag like whale converts at 80% and f2p at 5%, your messaging is aimed wrong. Reward-test in an A/B Experiment.

The drop-off isn’t real; it’s a bug in instrumentation.

  • The Step n+1 event isn’t fired in code.
  • Event names differ between client builds (typo: purchase_complete vs purchase_completed).
  • Schema validation is silently dropping events (Event Schemas).

How to verify: open the Live Activity page, do the Step n+1 action manually, watch for the event. If it doesn’t show up, the SDK isn’t sending it.

6. Time-window mismatch (Strict mode only)

Section titled “6. Time-window mismatch (Strict mode only)”

Players reach Step n+1 but after the configured time_window_minutes. The conversion is real, but Strict-mode disqualifies it.

How to verify: switch the funnel temporarily to Loose mode. If the drop-off disappears, your window is too tight. Increase it or accept a slower funnel.

When a drop-off banner shows up, run through these in order — most issues resolve in the first 3 steps:

  1. Cross-reference Logs: any error spike for the same period?
  2. Filter by build: use Strict mode + app_version to compare versions.
  3. Filter by segment: paying vs free, mobile vs desktop, new vs returning.
  4. Live-test the flow yourself: open Live Activity, step through, watch events.
  5. Session-replay: pick 3 players, watch what they did.
  6. A/B-test fixes: don’t ship a redesign without measurement.
Terminal window
# Get all funnels for a game
curl "https://quest-api.digitalfactory.at/v1/funnels" \
-H "x-game-api-key: YOUR_API_KEY"
# Get a specific funnel's conversion data
curl "https://quest-api.digitalfactory.at/v1/funnels/monetization_funnel?from=2026-01-01&to=2026-04-01" \
-H "x-game-api-key: YOUR_API_KEY"

Response:

{
"funnel_id": "monetization_funnel",
"mode": "loose",
"steps": [
{ "step": 1, "event": "tutorial_start", "count": 1000 },
{ "step": 2, "event": "tutorial_complete", "count": 950, "dropoff": 5.0 },
{ "step": 3, "event": "first_purchase", "count": 285, "dropoff": 70.0 }
],
"overall_conversion": 28.5
}
  • Keep funnels to 3-5 steps for clarity
  • Use Strict mode for tutorials, Loose for organic behavior
  • Review funnels weekly to catch conversion regressions early