How to Build a Signup Funnel, Step by Step
A practical walkthrough for building a signup funnel that tells you where new users drop out, with step definitions, the events to track, how to read the result, and how to get from a drop-off number to the cause.
Short answer: define four to six steps a new user must pass through, from the first page to the moment they get value. Use page paths where a step has its own URL and custom events where it does not. Then segment the result by device and open the sessions that stopped at the weakest step.
Table of Contents
- Decide Where the Funnel Ends
- Map the Steps
- Instrument the Steps
- Create the Funnel
- Read the Result
- Go From Number to Cause
- Common Signup Funnel Problems
- Key Takeaways
Decide Where the Funnel Ends
Most signup funnels end at "account created". That is too early. An account that never does anything is not a success.
End the funnel at activation: the first moment the user gets what they came for. For an analytics product that might be "first data received". For a design tool, "first file saved".
Map the Steps
Walk through signup yourself in a private window and write down every screen and required action. A typical result:
- Landing or pricing page viewed
- Signup page viewed
- Signup form submitted successfully
- Email verified
- Workspace or project created
- Activated
Rules for a clean funnel:
- Every step must be required. If people can skip it, leave it out.
- Keep it to six or fewer.
- Order matters. Steps must occur in sequence.
- Separate paths get separate funnels. Email signup and Google sign-in are different flows.
Instrument the Steps
| Step | How to define it |
|---|---|
| Landing page viewed | Page path |
| Signup page viewed | Page path |
| Form submitted | Custom event, after the server accepts it |
| Email verified | Custom event, or the verified landing page path |
| Project created | Custom event |
| Activated | Custom event |
Add the events at the point where each outcome is confirmed:
deepsync("track", "signup_completed", { method: "email" });
deepsync("track", "project_created");
deepsync("track", "activated");Identify the user once they exist, so their sessions can be found later:
deepsync("identify", user.id, { plan: "trial", signupDate: user.createdAt });Client-side route changes are recorded as page views automatically, so single-page signup flows with distinct URLs need no extra calls.
Create the Funnel
In DeepSync (funnels docs):
- Open Funnels and click New funnel.
- Add steps in order. Each is a page path match or a custom event name.
- Save, then pick a date range to see step-by-step conversion and drop-off.
Free plans can create one funnel. Pro and above are unlimited.
Read the Result
- Find the largest drop. That is where to start.
- Split by device. A step that loses 20% on desktop and 60% on mobile is a mobile bug, not a product problem.
- Split by source. Paid visitors and search visitors behave differently.
- Use at least two weeks of data so weekday effects average out.
- Compare with last month to see whether a step is getting worse.
Expect email verification to be a major leak
Every step that sends people out of your product, to their inbox or to another app, loses some who never return. If that step is your worst, consider letting users in first and verifying later.
Go From Number to Cause
The funnel is an index into sessions, not the finding itself. In DeepSync, clicking any step's drop-off number jumps straight to the sessions that stopped there.
- Open the drop-off sessions for your weakest step.
- Watch ten to fifteen.
- Note the last thing each person did.
- Group what you see into two or three causes.
- Check JavaScript errors for the same page.
- Fix the most common cause and compare the step next week.
Common Signup Funnel Problems
| Step | Typical cause of drop-off |
|---|---|
| Landing → signup page | Weak call to action, unclear value |
| Signup page → submitted | Too many fields, password rules, validation errors |
| Submitted → verified | Email never arrives, lands in spam, user does not return |
| Verified → project created | Empty state with no guidance |
| Project created → activated | Setup too technical, waiting on an external step |
More detail in improving SaaS onboarding with session replay.
Key Takeaways
- End the funnel at activation, not account creation.
- Use page paths for pages and custom events for confirmed outcomes.
- Segment by device before drawing conclusions.
- Open the sessions behind the biggest drop.
Conclusion
A signup funnel takes an afternoon to build and tells you exactly which step is costing you users. Build it once and review it weekly.
Frequently Asked Questions
Related articles
Stay in the loop
Get the latest insights on product analytics and user behavior delivered to your inbox.



