Docs/What the numbers mean
What the numbers mean
Every metric in the dashboard, defined — including the ones that differ from Google Analytics.
Audience
| Metric | Definition |
|---|---|
| Visitor | One anonymous daily fingerprint: sha256(daily salt + IP + User-Agent + domain). The salt changes every night, so the same person on two days counts as two visitors. This is the price of having no cookie. |
| Session | A visit. It ends after 30 minutes without a request, and a new one starts on the next page. |
| Pageview | One page load, plus every route change in a single-page app. |
| Bounce rate | Share of sessions with a single pageview. Note that a session with one page but three minutes of reading counts as a bounce — engaged time is the better signal. |
| Avg. duration | Average time between the first and the last request of a session. |
| Engaged time | Seconds where the tab was visible and the visitor did something within the last 30 seconds. A tab left open all afternoon adds nothing. |
| Scroll depth | Deepest point reached on the page, in percent. |
Humans, robots, and the ones we can't tell
Three populations, mutually exclusive, so they always add up to the total:
- Humans — behaviour proved it: a mouse moved, a key was pressed, a finger touched, a real scroll happened.
- Robots — the User-Agent said so (search crawler, AI crawler, SEO tool, headless browser, monitor, link preview), or automation was detected.
- Unconfirmed — everything else: immediate bounces and quiet automation. We don't guess for them.
A robot that moves a mouse is still a robot: a declaration beats behaviour, in that direction only. It matters because a conversion rate computed over crawler traffic is not a conversion rate.
Intent
Every session is filed by what the visitor came for, read from the landing page and the campaign parameters: paid (pricing, subscribe, order), free (free, template, download), tool (generator, calculator, converter), info (guide, how-to, comparison), home (arrived on the home page) and other.
It answers the question a global conversion rate hides: are they here to buy, or here for the free thing? Read the funnel by intent and one unreadable rate becomes two usable ones.
Funnel stage
Each session carries the furthest step it ever reached, from arrival to purchase — arrived, engaged, activated, signed up, checkout started, purchased. It only ever moves forward, so a visitor who buys is never counted back at an earlier step. Steps come from the canonical events; see custom events.
Channels
Sessions are grouped by where they came from: Direct, Search, AI assistants, Social, Referral. The AI bucket is broken down by assistant (ChatGPT, Perplexity, Claude and others), because in most tools they arrive as ordinary referrers and disappear into "other".
Channels count sessions, not visitors: one person arriving once from Google and once from ChatGPT is one visitor but two sessions, and sessions add up exactly.
Friction signals
| Signal | Definition |
|---|---|
| Rage click | Three or more clicks in the same spot within 700 ms. |
| Dead click | A click on an element that shows a pointer cursor but does nothing. |
| Abandoned field | A field was focused and the form was never submitted before leaving. |
| JS error | An uncaught error or rejected promise, deduplicated, five per page at most. |
Only the element's tag, a short selector and its visible label are stored — never what someone typed.
Time
Every date in the dashboard and the API is UTC. A "day" runs from 00:00 to 23:59 UTC, so a sale at 01:00 in Paris belongs to the previous UTC day.
What is never counted
- Anything from
localhost, a private IP, a.localhost or afile://page. - Any browser where you opened the site once with
?kp_ignore=1. - Nothing else is filtered: a production domain you did not expect still counts, because a site legitimately lives under several names.