Conversion funnel — from visitor to lead
Under Analytics → Funnel you see the four most important conversion stages of your chat widget in descending order. Drop-off per stage tells you where visitors leave — and which part of your widget is worth optimizing next.
The four stages
1. Visitors (with widget)
How many unique sessions loaded your website while the widget was active. Source: visitor_pageviews with event_type='pageview'.
2. Chat opened
Sessions that clicked on the widget (widget_open or chat_started event). Open-Rate = Stage 2 / Stage 1. A good value is 5-15% for standard SaaS websites; higher for highly interactive pages (Pricing, Demo).
3. Visitor messages
Conversations with at least one message from the visitor. Engagement-Rate = Stage 3 / Stage 2. If a visitor opens the widget but doesn't write, the greeting text is usually too generic or the bot doesn't seem helpful enough.
4. Leads (email captured)
Unique visitors with a stored email address (pre-chat form, resume token, or collected by the bot). Lead-Rate = Stage 4 / Stage 3. This is the marketing headline — leads per visitor conversation.
Trend badge
Next to the page title, you see +12%, -3%, or stable. The comparison is always the same window length back: for a 30-day view versus the 30 days before; for a 7-day view versus the 7 days before. This way, you compare apples to apples, not Black Friday to May.
If there is little or no data in the previous period, the badge is hidden (instead of showing a meaningless "+∞%").
What counts as a lead?
In v1 only email address stored. This covers 95% of typical conversion definitions. Custom goals (phone number, certain page view, JS event) are planned for a later iteration (Plan #168b).
Performance note
The four stages are direct SQL aggregations over existing tables (visitor_pageviews with index on (tenant_id, event_type, timestamp), conversations with tenant_id+created_at-index). On tenants with six-figure pageviews, each request stays under one second. If your data volume exceeds this: let us know, and we'll add a materialized view with 30-minute refresh.
How to improve conversion
Open-Rate too low?
- Send greeting bubble proactively (Widget Settings → Greeting)
- Make widget position more prominent (bottom right instead of hidden icon)
- A/B test (Plan #167) with two greeting texts
Engagement-Rate too low?
- Activate Quick-Action-Cards ("Book Demo", "See Prices")
- Make bot persona friendlier / more personal (Plan #161 Persona Templates)
- Streamline or remove pre-chat form
Lead-Rate too low?
- Bot actively asks for email at the end of a conversation
- Activate resume token email (continuous conversation via email)
- Improve KB answers so the bot doesn't immediately pivot to a lead capture
GDPR
The pageview data is subject to the same retention as the rest of your visitor data (see Data Retention Settings). The funnel shows only aggregated counts — no personal data.
API Reference
GET /api/v1/analytics/conversion-funnel?from=<iso>&to=<iso>
Response:
{
"funnel": {
"from": "2026-04-20T00:00:00Z",
"to": "2026-05-20T00:00:00Z",
"stages": [
{ "name": "pageviews", "count": 10000 },
{ "name": "opens", "count": 2300 },
{ "name": "messages", "count": 950 },
{ "name": "leads", "count": 250 }
],
"change_vs_previous": 0.12
}
}
Date range is capped at a maximum of 1 year (DoS protection). Default if no query parameters: last 30 days.