← All posts

Funnel Analysis 101: Finding Where Users Actually Drop Off

Every product has a moment where it loses people. The hard part isn’t believing that — it’s finding exactly which step sheds users, and why. That’s what funnel analysis does: it takes an ordered sequence of events and shows you the conversion from each step to the next, so a vague “our onboarding feels weak” turns into “73% of installs finish the tutorial, but only 41% of those reach their first purchase, and the cliff is at the account-creation screen.”

Funnels are simple to draw and easy to draw wrong. Here’s how to build one that actually tells you something.

A funnel is just an ordered set of events

At its core, a funnel is a list of event names in the order you expect users to hit them, plus a rule for how to count people moving between them. For a mobile game’s activation flow:

1. app_open
2. tutorial_start
3. tutorial_complete
4. level_start          (first real level)
5. level_complete
6. item_purchase        (first purchase)

The funnel counts, for each step, how many users who completed the previous step also completed this one. The output is a conversion rate per step and an overall top-to-bottom rate. Drop-off is just 1 - conversion at each transition, and the biggest single drop is where you focus.

This is exactly why a clean event taxonomy pays off here. If half your users fired tutorial_done and half fired tutorial_complete, your funnel silently undercounts step 3 and invents a cliff that doesn’t exist. Funnels are only as trustworthy as the event names feeding them.

Define the conversion window deliberately

The most-overlooked funnel setting is the conversion window: how long a user has to complete the next step before they count as dropped. This single choice can swing your numbers dramatically.

  • A tight window (same session, or one hour) measures immediate, in-the-moment conversion. Good for checkout flows where hesitation means abandonment.
  • A loose window (7 or 30 days) measures whether users eventually convert. Good for activation flows where it’s normal to come back the next day to make a first purchase.

A first-purchase funnel with a one-hour window will look catastrophic and tell you nothing useful, because most first purchases happen days after install. Match the window to the real-world rhythm of the behavior. Keentics lets you set the conversion window when you build the funnel, so pick it on purpose rather than accepting a default.

One more window subtlety: decide whether steps must happen in strict order or just in sequence. Strict order requires each event with nothing relevant in between; sequence just requires they happened in the right relative order. For most product funnels, “in order, within the window” is what you want.

The SQL reasoning behind a funnel

You don’t have to write this — but understanding it tells you what the chart is actually claiming. Because Keentics stores raw events in your own ClickHouse with read-only SQL, a two-step funnel is conceptually a self-join on user_id with a time and ordering constraint:

-- users who did tutorial_complete, then item_purchase within 7 days
SELECT
  count(DISTINCT t.user_id)                      AS reached_tutorial,
  count(DISTINCT p.user_id)                       AS reached_purchase,
  count(DISTINCT p.user_id) / count(DISTINCT t.user_id) AS conversion
FROM events t
LEFT JOIN events p
  ON p.user_id = t.user_id
  AND p.event = 'item_purchase'
  AND p.ts >  t.ts
  AND p.ts <= t.ts + INTERVAL 7 DAY
WHERE t.event = 'tutorial_complete';

Two things to notice. First, the denominator is users who reached the prior step, not all users — funnel conversions are conditional. Second, count(DISTINCT user_id), not count(*): a user who buys three times still converted once. Counting raw rows instead of distinct users is the single most common way to overstate a funnel.

Segment to turn “where” into “why”

A single funnel tells you where people drop. Segmentation tells you why — or at least where to look. Run the same funnel split by a property and compare:

  • By platform: if iOS converts at 45% and Android at 22% at the same step, you’re probably looking at a platform-specific bug, not a design problem.
  • By app version: a drop that appears only in version >= 3.2 points straight at a regression you shipped.
  • By acquisition channel: users from one ad campaign bouncing at the paywall may simply be lower-intent traffic — an attribution question, not a product one.
  • By country or locale: a step that craters in one language often means a broken translation or a payment method you don’t support there.

The pattern is always: find the biggest drop-off step in the overall funnel, then segment that step until one slice stands out. The slice that’s dramatically worse is your lead.

Reading drop-off without fooling yourself

A few habits keep funnel analysis honest:

  • Watch absolute numbers, not just percentages. A step converting at 30% sounds bad, but if 30% of a million is 300,000 users, fixing a 90% step further down that only 5,000 reach matters less.
  • Beware survivorship at the bottom. The users who reach step 6 are your most engaged; their high conversion isn’t a sign the product is great, just that you’ve already filtered out everyone else.
  • A step that’s “too good” is suspicious. 99% conversion between two steps usually means they’re effectively the same action and one of them isn’t a real decision point — collapse them.
  • Cohort your funnels by time. Last week’s funnel and last quarter’s funnel describe different products if you’ve shipped changes. Compare like-for-like cohorts.

Done well, a funnel converts an argument into a number and points everyone at the same screen. That’s the whole job: stop debating where users leave, and go look at the step that’s actually bleeding.

FAQ

How many steps should a funnel have? As few as needed to isolate the question. Three to six is typical. Long funnels dilute attention and make the chart hard to read — if you have a ten-step flow, build a high-level funnel first, then a detailed funnel zoomed into whichever step is worst.

Why does my funnel conversion differ from my raw event counts? Because funnels count distinct users who completed the prior step within the window, not total event fires. A user firing item_purchase five times is one conversion. And users outside the conversion window don’t count even if they eventually converted.

Should the funnel require steps in strict order? Usually “in order within a window” is right — each step after the previous one, inside the conversion window, other events allowed in between. Reserve strict adjacency for cases where an intervening action genuinely breaks the flow you’re measuring.