Concepts and metrics
What PilotFox measures and how each number is defined: sessions, visitors, pageviews, bounce rate, durations and channels.
From a request to a visitor and a session
The tracking script sends one small request per pageview or event. Everything else happens on the server, for each request:
- Visitor. PilotFox derives a visitor id from a secret kept per site, the site, the visitor's IP address and the browser's user agent (with version numbers removed). No cookie or browser storage is involved, the IP address is not kept, and the same person gets unrelated ids on two sites. See Counting visitors without cookies.
- Session. The visitor's session continues while events keep arriving; it ends after 30 minutes without an event. The next event starts a new session. Identifying a user in the middle of a session does not start a new one.
- Enrichment. Location (from the IP address), browser, operating system and device (from the user agent), the
referrer and its channel, and the campaign (
utm_*) parameters of the page URL. - Storage. The event is stored with those fields. Reports are computed from the stored events when you open them, so a filter or a new goal applies to past data too.
Requests the bot filter recognises are kept apart and shown in the Bots report instead (see Bots).
Users
When your site calls identify, PilotFox links the
visitor to your user id. A session counts as that user's when any of its events carries the user id, or when its
visitor was linked to the user; otherwise it counts as an anonymous visitor. So a user you identify counts once, across
devices and browsers, and the earlier anonymous sessions of the same visitor (before they signed in) join them too.
Metric definitions
| Metric | Definition |
|---|---|
| Sessions | Sessions with at least one event in the period (web-vitals measurements alone do not make a session). |
| Visitors | Distinct visitors over those sessions. An identified user counts once, across devices. |
| Pageviews | Pageview events. |
| Events | Interaction events: custom events, outbound link clicks, clicks, form submissions, input changes and copies. |
| Views per session | Pageviews divided by the sessions that have a pageview. |
| Bounce rate | Sessions with exactly one pageview and no interaction event, out of the sessions that have a pageview. |
| Visit duration | Time from the first to the last event of a session, for sessions with a pageview (average and median). |
| Time on page | Time from a pageview to the next pageview of the same session, between 0 and 30 minutes; the last page of a session is left out. |
| Entry and exit page | The first and the last page viewed in a session. |
| Online | Visitors seen in the last five minutes. |
A percentage in a breakdown is the row's value out of the period's total for the same metric, not out of the sum of the rows shown.
Session attribution
Each session carries one source, from its own events:
- Referrer, campaign and affiliate: the first non-empty one in the session.
- Channel: the first one other than Direct or Internal, if the session has one; otherwise its first.
- Entry page: its first pageview.
The channel of each request is decided in this order:
- Campaign tags and ad click ids (
utm_medium,utm_source,gclid,msclkid,fbclid, ...): Paid Search, Paid Social, Display, Email, Affiliate or Paid Other. A social click id such asfbclidwithout a paidutm_mediummeans Organic Social: Facebook, for example, addsfbclidto links in unpaid posts too. - The referring site, from PilotFox's lists: Organic Search, Organic Social, Video, AI (assistants such as ChatGPT, Claude or Perplexity), Email (webmail) or Shopping.
- Your own site as the referrer: Internal.
- Neither a referrer nor campaign tags: Direct.
- Anything else: Referral.
Visits from some apps and social sites arrive without a referrer and would count as Direct. Tag the links you share
with utm_* parameters (Site settings → Link builder makes them) so those visits are reported under their campaign.
Reports
| Report | What it is for |
|---|---|
| Dashboard | Visitors, sessions, pageviews, bounce rate and duration over time, with breakdowns by page, entry and exit page, referrer, channel, campaign, country, region, city, browser, operating system, device, language and more. Filters combine these dimensions, and a period can be compared with the one before it or the same period a year earlier. |
| Realtime | The dashboard's Online count and its Realtime view: visitors active now, with their pages, sources and locations. |
| Sessions and Users | Each session's pages and events in order; each user's sessions, devices, locations and traits. |
| Events | Event names with their counts and properties. |
| Goals, Funnels, Journeys, Retention | Conversions, multi-step funnels, the common paths through your pages, and how many users come back. See Events and identify. |
| Replays | Recorded sessions, when session replay is on. |
| Web vitals | LCP, CLS, INP, FCP and TTFB percentiles, rated against Google's thresholds, when Web vitals is on. |
| Errors | JavaScript errors, grouped by error name, message (with numbers, ids, quoted strings and URLs ignored) and the top frame of the stack, when JavaScript errors is on. |
| Bots | What the bot filter kept out of your reports and why, with AI crawlers and assistants by operator. |
| Map | Visitors by location. |
| Revenue, Affiliates, Search Console | See Revenue, Affiliates and Search Console. |
The app reads every report from the REST API, so an API key with the right permissions can read them too.