The four stages
AWARENESS → CONSIDERATION → TRIAL → CUSTOMER
Four stages, fixed order, no renaming. Between each pair sits a conversion. Three conversion positions total (0, 1, 2). The model is opinionated by design: enough resolution to see where things break, small enough to remember.
Each stage holds:
- Data sources (providers), feed the count.
- Splits (splitting), filter cohorts within the stage.
- Connections to email and automations, fire on stage entry.
After CUSTOMER you can optionally enable extensions for upsell tracking.
AWARENESS — eyeballs
How many people saw you exist. Not who clicked, impressions, reach.
Sources: social provider impressions (X, YouTube, LinkedIn, Instagram, TikTok, Reddit), brand mentions (PRO), Google Search Console impressions, Google Ads impressions, manual entries. Most funnels combine 2–3 sources here.
CONSIDERATION — visitors
Unique people who reached your site. Source: your tracking script, every distinct _fn_vid cookie seen in the window.
This is where the marketing site lives. Split by traffic source to find which channels drive real visits, A/B-test hero copy, watch bounce rates.
The AWARENESS → CONSIDERATION conversion is essentially click-through rate from the wild web into your site.
TRIAL — active users
Visitors who showed real intent, gave you their email, started a trial, signed up.
Default conversion method: Stripe trial subscription (status = "trialing"). Configurable as:
- Email signup form submission.
- Custom event (
funnelfizz('event', 'signup')from your app). - Stripe trial.
This is the most under-measured stage, founders often only track Stripe trials and miss self-serve signups. Custom events close that gap.
CUSTOMER — paying customers
Default method: Stripe paid subscription (status = "active" or "past_due" within grace).
Unlike the other stages, CUSTOMER splits into a trichotomy:
| Bucket | Definition |
|---|---|
| Retained | Still active at your anchor product tier |
| Upgraded | Active at a higher tier than anchor (more valuable, not lost) |
| Churned | No active subscription anywhere |
The naive "canceled = churned" model can't tell upgrades from losses. This can.
The three conversion positions
| Position | Transition | Default method |
|---|---|---|
| 0 | AWARENESS → CONSIDERATION | Site visit (tracking) |
| 1 | CONSIDERATION → TRIAL | Stripe trial |
| 2 | TRIAL → CUSTOMER | Stripe paid |
Each position is configurable per funnel, see Conversion. Mix and match: a non-Stripe SaaS might map position 1 to a custom signup event and position 2 to Stripe paid.
On the canvas
┌──────────┐ ● ┌───────────────┐ ● ┌───────┐ ● ┌──────────┐
│AWARENESS │──%──▶│ CONSIDERATION │──%──▶│ TRIAL │──%──▶│ CUSTOMER │
└──────────┘ └───────────────┘ └───────┘ └──────────┘
128k imps 11,245 visitors 892 signups 213 paying
8.8% CTR 7.9% conv 23.9% conv
Stages render as cards left to right. Conversion bubbles between them show the rate + raw count. Split nodes (diamonds) appear between stages when you filter; extension stages appear after CUSTOMER.
Next: Tracking → · Conversion → · Splitting →