MJ Lindeman, PhD, Community Partner
Oct 7, 2025

Table of contents
- What is funnel analysis: Core definitions and concepts
- Step design: Defining meaningful funnel stages
- Attribution choices: Handling complex user journeys
- Building a conversion funnel with SQL: A practical template
- Time-to-convert analysis: Measuring funnel velocity
- Cohortized funnel views: Comparing across segments
- Diagnosing drop-off: Finding the friction points
- Repeatable funnel analysis in Quadratic
- Funnel analysis tools and technology choices
- Visualization: Communicating insights effectively
- Product management and funnel analysis
- Industry-specific patterns
- Scaling analysis across teams
- Getting started with actionable analysis
Product managers live in a world of conversion funnels. Whether you're optimizing onboarding flows, measuring feature adoption, or diagnosing why users drop off before upgrading, funnel analysis provides the foundation for understanding user journeys. Yet the real challenge is running repeated funnel analyses as your product evolves, new users arrive, and experiments conclude.
This guide provides a deep dive into funnel analytics. It covers definitions, step design, attribution choices, and drop-off diagnosis, along with concrete SQL templates for building conversion, time-to-convert, and cohortized funnel views. We'll show you how to set up repeatable funnel analysis frameworks in Quadratic that you can refresh with a single click rather than rebuilding from scratch.
What is funnel analysis: Core definitions and concepts
What is funnel analysis at its foundation? It measures how users progress through a defined sequence of steps toward a desired outcome. A funnel chart visualizes this progression, showing each step with its corresponding user count and conversion rate. The "funnel" shape emerges as users drop off at each stage.
The fundamental components include step definitions (specific actions users must take), time windows (how long users have to complete the funnel), attribution logic (how you handle out-of-order completion), and cohort definitions (how you segment users for comparative analysis). Understanding these components allows you to design funnels that provide actionable insights rather than just statistics.
Step design: Defining meaningful funnel stages
Effective onboarding funnel analysis starts by identifying key actions that represent genuine progress toward user value realization. For SaaS products, meaningful steps might include account creation, email verification, workspace setup, first feature usage, and first successful outcome. Each step should represent a clear milestone.
Avoid including too many steps in a single funnel. Funnels with more than five to seven steps become difficult to analyze. If your user journey includes many actions, create multiple focused funnels rather than one massive funnel. Step ordering matters, so decide whether steps must be completed sequentially or in any order. Strict sequential funnels work well for linear processes like checkout funnel analysis, while flexible ordering suits exploration-focused experiences.
The time dimension often gets overlooked, but it is critical for accurate funnel conversion analysis. Should email verification happen within 24 hours of signup? Does workspace setup need to occur in the same session? These time constraints affect which users you include and how you interpret conversion rates. Once you understand constraints, you can set up A/B tests to evaluate potential solutions.
Attribution choices: Handling complex user journeys
Real users rarely follow neat linear paths. They backtrack, repeat steps, take breaks, and return later. Your conversion funnel analytics needs explicit attribution rules to handle this consistently.
First-touch attribution credits users based on the first time they complete each step. This provides the most conservative view, measuring how quickly users progress without crediting repeated attempts. First-touch works well when you want to understand the fastest path or when step repetition indicates problems.
Last-touch attribution credits users based on their most recent completion. This approach is more forgiving of exploration and works better when repeating steps is expected behavior. For customer funnel analysis, users often return to the cart multiple times before completing a purchase.
Any-touch attribution is the most lenient, crediting users if they've ever completed a step, regardless of when. This maximizes measured conversion but can hide struggle patterns. Choose attribution logic that aligns with your business questions and apply it consistently.
Building a conversion funnel with SQL: A practical template
Let's build concrete SQL for conversion funnel analysis that you can adapt. This template uses first-touch attribution with a 7-day window:
```sql WITH user_events AS ( SELECT user_id, event_name, MIN(timestamp) as first_event_time FROM events WHERE event_name IN ( 'account_created', 'email_verified', 'profile_completed', 'first_action_taken', 'feature_activated' ) GROUP BY user_id, event_name ), funnel_steps AS ( SELECT user_id, MAX(CASE WHEN event_name = 'account_created' THEN 1 ELSE 0 END) as step_1, MAX(CASE WHEN event_name = 'email_verified' AND first_event_time <= ( SELECT MIN(first_event_time) + INTERVAL '7 days' FROM user_events e2 WHERE e2.user_id = user_events.user_id AND e2.event_name = 'account_created' ) THEN 1 ELSE 0 END) as step_2, MAX(CASE WHEN event_name = 'profile_completed' AND first_event_time <= ( SELECT MIN(first_event_time) + INTERVAL '7 days' FROM user_events e2 WHERE e2.user_id = user_events.user_id AND e2.event_name = 'account_created' ) THEN 1 ELSE 0 END) as step_3, MAX(CASE WHEN event_name = 'first_action_taken' AND first_event_time <= ( SELECT MIN(first_event_time) + INTERVAL '7 days' FROM user_events e2 WHERE e2.user_id = user_events.user_id AND e2.event_name = 'account_created' ) THEN 1 ELSE 0 END) as step_4, MAX(CASE WHEN event_name = 'feature_activated' AND first_event_time <= ( SELECT MIN(first_event_time) + INTERVAL '7 days' FROM user_events e2 WHERE e2.user_id = user_events.user_id AND e2.event_name = 'account_created' ) THEN 1 ELSE 0 END) as step_5 FROM user_events GROUP BY user_id ) SELECT 'Step 1: Account Created' as step_name, SUM(step_1) as users, NULL as conversion_from_previous, ROUND(100.0 * SUM(step_1) / COUNT(*), 2) as pct_of_total FROM funnel_steps UNION ALL SELECT 'Step 2: Email Verified', SUM(step_2), ROUND(100.0 * SUM(step_2) / NULLIF(SUM(step_1), 0), 2), ROUND(100.0 * SUM(step_2) / COUNT(*), 2) FROM funnel_steps UNION ALL SELECT 'Step 3: Profile Completed', SUM(step_3), ROUND(100.0 * SUM(step_3) / NULLIF(SUM(step_2), 0), 2), ROUND(100.0 * SUM(step_3) / COUNT(*), 2) FROM funnel_steps UNION ALL SELECT 'Step 4: First Action', SUM(step_4), ROUND(100.0 * SUM(step_4) / NULLIF(SUM(step_3), 0), 2), ROUND(100.0 * SUM(step_4) / COUNT(*), 2) FROM funnel_steps UNION ALL SELECT 'Step 5: Feature Activated', SUM(step_5), ROUND(100.0 * SUM(step_5) / NULLIF(SUM(step_4), 0), 2), ROUND(100.0 * SUM(step_5) / COUNT(*), 2) FROM funnel_steps; ```
This SQL funnel analysis template provides the foundation for repeatable funnel data analysis. Once you've set up this query structure, refresh it daily or weekly to get updated conversion metrics without rewriting the SQL. The query structure remains the same; only the underlying data changes.
To adapt for last-touch attribution, change MIN(timestamp)
to MAX(timestamp)
in the user_events CTE. To extend the time window, modify the INTERVAL '7 days'
clauses. These parameterization opportunities make the template reusable across different user funnel analysis scenarios using funnel analysis SQL techniques and SQL queries for funnel analysis patterns.
Time-to-convert analysis: Measuring funnel velocity
Understanding conversion rates tells you how many users complete each step, but knowing how long they take reveals different optimization opportunities. Here's the SQL for calculating time-to-convert:
```sql WITH step_times AS ( SELECT user_id, MIN(CASE WHEN event_name = 'account_created' THEN timestamp END) as step_1_time, MIN(CASE WHEN event_name = 'email_verified' THEN timestamp END) as step_2_time, MIN(CASE WHEN event_name = 'profile_completed' THEN timestamp END) as step_3_time, MIN(CASE WHEN event_name = 'first_action_taken' THEN timestamp END) as step_4_time, MIN(CASE WHEN event_name = 'feature_activated' THEN timestamp END) as step_5_time FROM events WHERE event_name IN ( 'account_created', 'email_verified', 'profile_completed', 'first_action_taken', 'feature_activated' ) GROUP BY user_id ), time_diffs AS ( SELECT user_id, EXTRACT(EPOCH FROM (step_2_time - step_1_time))/3600 as hours_to_step_2, EXTRACT(EPOCH FROM (step_3_time - step_2_time))/3600 as hours_to_step_3, EXTRACT(EPOCH FROM (step_4_time - step_3_time))/3600 as hours_to_step_4, EXTRACT(EPOCH FROM (step_5_time - step_4_time))/3600 as hours_to_step_5 FROM step_times WHERE step_1_time IS NOT NULL ) SELECT 'Step 1 → Step 2' as transition, ROUND(AVG(hours_to_step_2)::numeric, 2) as avg_hours, ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY hours_to_step_2)::numeric, 2) as median_hours, ROUND(PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY hours_to_step_2)::numeric, 2) as p90_hours, COUNT(*) FILTER (WHERE hours_to_step_2 IS NOT NULL) as users_converted FROM time_diffs UNION ALL SELECT 'Step 2 → Step 3', ROUND(AVG(hours_to_step_3)::numeric, 2), ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY hours_to_step_3)::numeric, 2), ROUND(PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY hours_to_step_3)::numeric, 2), COUNT(*) FILTER (WHERE hours_to_step_3 IS NOT NULL) FROM time_diffs UNION ALL SELECT 'Step 3 → Step 4', ROUND(AVG(hours_to_step_4)::numeric, 2), ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY hours_to_step_4)::numeric, 2), ROUND(PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY hours_to_step_4)::numeric, 2), COUNT(*) FILTER (WHERE hours_to_step_4 IS NOT NULL) FROM time_diffs UNION ALL SELECT 'Step 4 → Step 5', ROUND(AVG(hours_to_step_5)::numeric, 2), ROUND(PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY hours_to_step_5)::numeric, 2), ROUND(PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY hours_to_step_5)::numeric, 2), COUNT(*) FILTER (WHERE hours_to_step_5 IS NOT NULL) FROM time_diffs; ```
A step might have an 80% conversion, but it takes three days on average to complete. This indicates significant friction, even though most users eventually succeed. The median and 90th percentile metrics help you understand whether slow conversions affect everyone or are concentrated in a subset.
Cohortized funnel views: Comparing across segments
The most powerful funnel analytics compares conversion patterns across different user cohorts. Cohortized funnels test hypotheses like "Do users from organic search convert better than paid ads?" or "Has our recent redesign improved activation?"
Here's the boilerplate SQL for cohortized analysis comparing funnels across signup date cohorts:
```sql WITH user_cohorts AS ( SELECT user_id, DATE_TRUNC('week', signup_date) as cohort_week FROM users ), user_events AS ( SELECT e.user_id, c.cohort_week, e.event_name, MIN(e.timestamp) as first_event_time FROM events e JOIN user_cohorts c ON e.user_id = c.user_id WHERE e.event_name IN ( 'account_created', 'email_verified', 'profile_completed', 'first_action_taken', 'feature_activated' ) AND e.timestamp >= c.cohort_week AND e.timestamp < c.cohort_week + INTERVAL '7 days' GROUP BY e.user_id, c.cohort_week, e.event_name ), funnel_by_cohort AS ( SELECT cohort_week, COUNT(DISTINCT user_id) as total_users, COUNT(DISTINCT CASE WHEN event_name = 'account_created' THEN user_id END) as step_1_users, COUNT(DISTINCT CASE WHEN event_name = 'email_verified' THEN user_id END) as step_2_users, COUNT(DISTINCT CASE WHEN event_name = 'profile_completed' THEN user_id END) as step_3_users, COUNT(DISTINCT CASE WHEN event_name = 'first_action_taken' THEN user_id END) as step_4_users, COUNT(DISTINCT CASE WHEN event_name = 'feature_activated' THEN user_id END) as step_5_users FROM user_events GROUP BY cohort_week ) SELECT cohort_week, total_users, step_1_users, ROUND(100.0 * step_2_users / NULLIF(step_1_users, 0), 2) as step_1_to_2_pct, ROUND(100.0 * step_3_users / NULLIF(step_2_users, 0), 2) as step_2_to_3_pct, ROUND(100.0 * step_4_users / NULLIF(step_3_users, 0), 2) as step_3_to_4_pct, ROUND(100.0 * step_5_users / NULLIF(step_4_users, 0), 2) as step_4_to_5_pct, ROUND(100.0 * step_5_users / NULLIF(step_1_users, 0), 2) as overall_conversion FROM funnel_by_cohort ORDER BY cohort_week DESC; ```
This cohortized view lets you see how funnel performance evolves. You can quickly identify whether recent product changes improved conversion or whether specific cohorts show different patterns. To segment by acquisition channel instead, join on a user_acquisition table and group by channel.
Diagnosing drop-off: Finding the friction points
Start a drop-off diagnosis by calculating absolute drop-off (how many users you lose) versus relative drop-off (what percentage). For example, a step with 1,000 users entering and 700 completing shows a 30% drop-off because it loses 300 users. A different step with 100 entering and 95 completing shows only a 5% drop-off, but it might not warrant optimization attention because it loses only 5 users.
The largest drop-offs aren't always the best optimization targets. Sometimes high drop-off reflects appropriate user self-selection. If 50% of users drop off during paid plan selection, that might be healthy because half your users are better suited for your free plan. Focus optimization on drops that should not be happening.
Time-to-convert analysis helps diagnose causes. If users who eventually convert take dramatically longer at a specific step, that indicates friction. If the median time-to-convert is 5 minutes but the 90th percentile is 3 days, you have a bimodal distribution, and that suggests some users encounter problems that others do not.
Cohort comparison reveals whether drop-off affects all users equally. If mobile users drop off at 2x the rate of desktop users, you've identified a device-specific problem. If organic search users convert better than paid ads, you might have targeting issues or messaging mismatches.
Combine quantitative drop-off identification with qualitative research. Session recordings of users who drop off often reveal usability issues not apparent in data. User surveys asking why people did not complete actions provide context that numbers cannot supply.
Repeatable funnel analysis in Quadratic
The SQL templates provide an analytical foundation, but running analysis repeatedly requires significant effort. This is particularly true if you're copying queries into different tools, manually updating date ranges, and recreating visualizations. Quadratic transforms these one-time queries into living, refreshable analysis frameworks.
The key to repeatable analysis in Quadratic is establishing your analytical foundation once, then refreshing automatically as new data arrives. Connect Quadratic directly to your analytics database where user event data lives, whether it is PostgreSQL, MySQL, Snowflake, or another system. Query source data directly within the familiar spreadsheet interface.
Set up your core funnel analysis SQL queries in Quadratic cells, using the SQL templates as starting points. Each query runs directly against your database and returns results into the spreadsheet. Use Python cells for additional calculations, statistical analysis, or custom funnel visualization beyond what SQL provides.
The power emerges when you parameterize queries. Instead of hardcoding date ranges or cohort definitions, reference spreadsheet cells containing these parameters. Want to analyze last week versus this week? Change a single date cell and all queries update automatically. Need to compare across acquisition channels? Update the channel filter cell and see results immediately.
Quadratic's AI capabilities accelerate both setup and ongoing analysis. Describe your funnel requirements in plain English, such as "Show me conversion from signup to activation for users who joined in the last 30 days, segmented by acquisition source.” Quadratic generates the appropriate queries. The AI understands your data schema and creates queries that join the right tables and apply correct filtering.
Once your framework is established, refresh all queries with a single action. Rather than manually re-running multiple queries across different tools, Quadratic updates all connected data simultaneously. Automatic scheduled refreshes (coming soon) will eliminate even this manual step, ensuring your funnel analysis dashboard always reflects current data.
The collaborative nature means your entire product team can access the same framework. Stakeholders can view current metrics without SQL knowledge. Engineers can review underlying queries to understand exactly how metrics are calculated. Product managers can modify parameters to explore different cohorts or time windows. Everyone works from the same source of truth rather than creating conflicting versions.
For product funnel analysis that you run weekly or monthly, such as reviewing product adoption funnel metrics or tracking product conversion funnel performance, Quadratic's repeatability saves hours. The first time you build the analysis might take an afternoon. Every subsequent refresh takes minutes rather than hours because the framework already exists.
This approach also supports comprehensive full-funnel analytics that track the entire user journey from awareness through retention. By establishing connected queries for each funnel stage, you can monitor how changes in early-stage conversion affect downstream metrics without rebuilding analysis infrastructure.
Funnel analysis tools and technology choices
Modern product managers need appropriate funnel analysis tools for their specific context. The choice between different funnel analysis tool options depends on the team's technical expertise, data infrastructure, and analytical requirements.
Funnel analytics software ranges from simple funnel chart generator tools that create basic visualizations to comprehensive platforms including data integration, statistical analysis, and collaboration. Basic funnel chart maker applications work well for simple conversion tracking, while sophisticated funnel analytics tools provide advanced segmentation, statistical testing, and automated insight generation.
For teams wanting maximum control, funnel analysis Python approaches using libraries like pandas and matplotlib enable custom analyses. Python funnel chart capabilities and Python funnel visualization tools offer flexibility for complex analytical requirements, but require more technical expertise than traditional BI platforms.
Excel-based approaches remain popular, with many teams building funnel chart Excel templates and conducting funnel analysis in Excel for its accessibility. While these approaches lack automation capabilities, they work well for teams already comfortable with spreadsheet workflows and basic funnel analysis chart creation.
Emerging AI funnel analysis platforms and AI funnel analysis tool options combine traditional funnel measurement with machine learning insights. These tools automatically identify patterns, predict conversion likelihood, and suggest optimization strategies based on historical data.
The integration of funnel analysis dashboard capabilities with broader analytics platforms enables teams to monitor multiple funnels simultaneously. Analytics funnel visualization features help communicate findings to stakeholders and facilitate data-driven decision-making across teams.
Visualization: Communicating insights effectively
Building accurate analysis matters little if you cannot communicate insights effectively. While the funnel chart is most common, it's not always most informative for every situation.
Traditional diagrams work well for showing overall conversion flow and identifying major drop-offs. Funnel data visualization using waterfall charts reveals absolute user loss between steps more clearly. Each step shows both users who continued and the specific number who dropped off, making it easier to quantify optimization impact.
For cohort analysis, side-by-side comparison charts or small multiples provide clearer insights than overlaying multiple funnels. Show each cohort's funnel separately with consistent scales, allowing viewers to compare patterns without visual confusion.
Time-series visualizations show how funnel performance evolves over time. Rather than a single snapshot, these plot conversion rates for each step across multiple periods, revealing trends and product change impacts. Heat maps provide a powerful visualization when comparing many cohorts, with color intensity indicating performance.
Product management and funnel analysis
Effective funnel analysis in product management requires integrating funnel insights into regular product development workflows. Rather than treating funnel analysis as occasional reporting exercises, leading product teams embed it into decision-making processes.
A complete product funnel example for SaaS products typically includes signup, activation, engagement, monetization, and retention stages. Each stage requires specific measurement approaches and optimization strategies. The product management funnel framework extends beyond individual user journeys to include feature adoption, expansion revenue, and referral mechanics.
Product management teams should maintain a product backlog funnel that connects feature requests and user feedback to actual user behavior data. This integration ensures development priorities align with observed friction points rather than assumptions about what users need.
For new product launches, product launch funnel analysis becomes critical for understanding initial adoption patterns. Tracking conversion rates during launch periods and comparing them to baseline expectations helps identify whether launch execution met goals or requires adjustment.
Industry-specific patterns
Marketing funnel analysis typically spans longer time horizons, measuring the customer journey from initial awareness through various touchpoints before purchase. Marketing teams track attribution across multiple channels while understanding how different content types move prospects through consideration stages.
Sales funnel analysis focuses on opportunity progression through qualification, demo, proposal, negotiation, and close stages. Unlike automated product funnels, sales funnels involve human sales rep interactions at each stage, requiring analysis of both stage conversion and sales rep performance variability.
Website funnel analysis tracks visitor behavior across pages and interactions leading to conversion goals. These funnels often include soft conversions like newsletter signup alongside hard conversions like purchase.
App funnel analysis addresses mobile-specific patterns, including app store discovery, download, permissions requests, account creation, and first meaningful use. Mobile funnels face unique challenges like permission request fatigue and small-screen usability that don't affect web experiences.
Product-led growth funnel analysis extends beyond individual journeys to include viral loops, referral mechanics, and team expansion patterns. These funnels track not just individual conversion but how converted users bring additional users into the product.
Scaling analysis across teams
Standardized definitions ensure that different product managers measure similar concepts consistently. When every product manager defines "activation" differently, comparing results across product areas becomes impossible. Establish organization-wide standards for key product funnel metrics while allowing flexibility for product-specific nuances.
Template libraries accelerate setup for new team members while ensuring analytical consistency. Rather than each product manager building queries from scratch, curated templates provide starting points that incorporate the organization's best practices.
Cross-functional sharing of funnel insights ensures optimization learnings benefit the entire organization. Regular reviews where product teams present findings, optimization experiments, and results create opportunities for pattern recognition across different product areas.
Getting started with actionable analysis
- Start with a single high-impact user journey that directly affects your product's success. For most products, this means the path from signup through first meaningful value realization.
- Define three to five clear steps representing this journey. Each step should represent genuine progress toward value rather than arbitrary actions. Write these definitions explicitly so everyone interprets them consistently.
- Implement the basic conversion SQL template in Quadratic, adapting step definitions and time windows to match your product. Run the query manually first to verify it produces sensible results before building repeatability mechanisms.
- Set up this query in Quadratic, connecting directly to your event database. Create a simple visualization using query results, and share with teammates for feedback. The goal at this stage is validation, not perfection.
- Add time-to-convert analysis once basic conversion metrics work correctly. This requires minimal extra work but provides substantially deeper insights into user experience.
- Create your first cohort view to compare performance across a meaningful segment, whether it is acquisition channel, signup date, or user plan tier. Cohort comparison transforms analysis from interesting statistics into actionable insights.
- Establish a regular refresh cadence appropriate for your product's pace. Fast-moving consumer apps might need daily refreshes, while enterprise SaaS products might review funnels weekly or monthly. In Quadratic, this refresh becomes a single click rather than a complete analytical rebuild.
The investment in systematic analysis pays dividends beyond individual conversion optimization projects. Product managers who can quickly generate reliable insights are better equipped to prioritize development efforts, measure change impacts, and guide teams toward improvements that create lasting user value. In competitive markets where user experience optimization drives sustainable growth, systematic analysis provides essential capabilities for product success.