Clickport
Start free trial

Metrics Definitions

This is a complete reference for every metric shown on the Clickport dashboard. Each entry explains what the metric measures, how it is calculated, and where it appears.

Visitors
1.4k ↗11%
Pageviews
3.7k ↗19%
Views/Visit
2.67 ↗7.3%
Bounce
22% ↘15%
Conversions
157 ↗14%
Conv. Rate
11% ↗2.9%
Duration
3:42 ↘1%
Scroll
44% ↗10%

Traffic metrics

Visitors

The number of unique people who visited your site during the selected period.

How it is calculated: count(DISTINCT session_id) from the sessions table. Each browser tab creates one session, and each session is counted once regardless of how many pages are viewed within it.

Identification: Visitors are identified by a daily-rotating anonymous ID. The same person visiting on two different days counts as two visitors. No cookies or fingerprinting are used.

Where it appears: KPI bar, all panel rows, chart (when selected), realtime view.

Pageviews

The total number of page loads across all visitors.

How it is calculated: sum(pageviews) from the sessions table. Every full page load and every client-side navigation in single-page applications (React, Vue, Next.js, etc.) counts as one pageview. If one visitor views 5 pages, that counts as 5 pageviews.

Where it appears: KPI bar, chart (when selected), Pages panel (as "count" per page).

Views per visit

The average number of pages viewed per session.

How it is calculated: sum(pageviews) / count(DISTINCT session_id) from the sessions table, rounded to 2 decimal places. Displayed as a decimal like 2.67.

A higher number generally means visitors are exploring more of your site. A value close to 1.0 means most visitors view only a single page before leaving.

Where it appears: KPI bar, chart (when selected).

Current visitors

The number of people on your site right now. Shown as a green pulsing dot in the top-right corner of the dashboard.

How it is calculated: The API checks for sessions with recent activity in the events table. A session is considered active if its last event was a pageview within the last 5 minutes, or a pageleave within the last 10 seconds. The differentiated cutoff prevents visitors who just closed the tab from lingering in the count.

Where it appears: Green "online" beacon, realtime panel. Refreshes every 30 seconds.

Engagement metrics

Bounce rate

The percentage of sessions where the visitor had minimal engagement. Unlike most analytics tools that define a bounce as a single-page visit, Clickport uses a stricter, multi-criteria definition.

How it is calculated: A session counts as bounced only when all four of these conditions are true:

The bounce rate is then: 100 * sum(is_bounce) / count(DISTINCT session_id), rounded to one decimal place.

This means a visitor who reads an entire blog post, scrolls to 80%, and stays for 2 minutes is not counted as a bounce, even if they only viewed one page. A typical bounce rate in Clickport is lower than in tools that only check pageview count.

Bounce vs. not a bounce
Bounce: 1 pageview, no clicks, 12% scroll, 6 seconds
Not a bounce: 1 pageview, no clicks, 78% scroll, 3 minutes
Not a bounce: 1 pageview, clicked outbound link, 10% scroll, 4 seconds

Where it appears: KPI bar (with inverted color: lower is green), chart (when selected), Sources panel.

Session duration

The average time visitors spend on your site per session, displayed in m:ss format (for example, 3:42).

How it is calculated: For each session, duration is the number of seconds between the first event and the last event: floor((last_event_time - session_start) / 1000). The KPI uses avg(least(1800, duration)), which caps individual sessions at 30 minutes (1,800 seconds) before averaging. This prevents a single outlier session (such as someone leaving a tab open overnight) from skewing the number.

Visibility-aware timing: The tracker pauses its timer when the visitor switches to another tab or minimizes the browser, using the Page Visibility API and window focus events. Only time spent actively viewing the page is counted. See the Engagement docs for details.

Where it appears: KPI bar, chart (when selected), Sources panel (as avg_duration), Pages panel (as avg_duration per page).

Scroll depth

The average maximum scroll depth across all sessions, shown as a percentage from 0 to 100.

How it is calculated: The tracker monitors the scroll position on every page and records the furthest point reached. This value only increases within a page view (scrolling back up does not reduce it). On the KPI bar, the value is avg(max_scroll_depth) from the sessions table, rounded to the nearest integer.

A scroll depth of 72% means the average visitor sees about three-quarters of your page content.

Where it appears: KPI bar, chart (when selected), Pages panel (per-page scroll depth from the events table).

Engagement score

A 0-100 score that combines scroll depth and duration into a single number. It appears as a colored percentage in panel rows.

How it is calculated:

Engagement Score Formula
engagement = ( avg_scroll + min(100, avg_duration / 6) ) / 2

avg_scroll Average max scroll depth (already 0-100)
avg_duration Average session duration in seconds (capped at 1,800)
/ 6 Converts seconds to 0-100 scale. 600s (10 min) = 100

Color thresholds:

Where it appears: Every panel row (Sources, Locations, Technologies, Campaigns, Pages).

Anatomy of a session

A session represents a single visit to your site within one browser tab. Sessions start when the visitor first loads a page and end when the tab closes. There is no 30-minute inactivity timeout.

Session timeline
A visitor arrives, browses 3 pages, clicks an outbound link, then leaves
1
Pageview: /blog/guide 0:00 (entry page)
S
Scroll to 84% max scroll updated
2
Pageview: /pricing 1:45
3
Pageview: /about 2:30
C
Outbound click: github.com 3:12
X
Pageleave (tab closed) 3:42
3
Pageviews
3:42
Duration
84%
Scroll
No
Bounce

This session is not a bounce because it has 3 pageviews, a click, 84% scroll, and 3:42 duration. Any one of those alone would be enough to prevent the bounce flag.

Session-level metrics

Each session record stores these metrics, which are updated with every new event:

Conversion metrics

Conversions

The total number of sessions that completed at least one configured goal. This KPI only appears when you have at least one goal with "counts as conversion" enabled.

How it is calculated: sum(has_converted) from the sessions table. The has_converted flag is set at ingestion time by the session manager when an event matches a goal condition. Each session is counted at most once, regardless of how many goals it triggers.

If no conversion goals are configured, the conversions KPI is hidden. For setup instructions, see the Goals documentation.

Where it appears: KPI bar, chart (when selected), Goals panel.

Conversion rate

The percentage of visitors who completed a conversion, calculated as conversions divided by visitors, multiplied by 100.

How it is calculated: When conversion goals are configured: (sum(has_converted) / count(DISTINCT session_id)) * 100. When no conversion goals exist but click tracking is active, the system falls back to clickers: (sum(has_clicked) / count(DISTINCT session_id)) * 100. Rounded to one decimal place.

For example, 50 conversions from 1,000 visitors gives a 5.0% conversion rate.

Where it appears: KPI bar (labeled "Conv. Rate"), chart (when selected).

Goal completions (per goal)

Individual goal tracking in the Goals panel provides two metrics per goal:

Where it appears: Goals panel, goal cross-filtering.

Revenue

For custom events sent with revenue data, the dashboard tracks total revenue and currency. Revenue is reported using the clickport.track() API.

How it is calculated: sum(revenue_source_amount) from the events table for custom events.

Where it appears: Custom Events section of the Goals panel.

Panel metrics

Every row in every panel shows three core metrics: visitor count, percentage share, and engagement score. Some panels include additional metrics.

Sources Locations Technologies Campaigns
Channels Sources Referrers
Source Visitors Eng
google.com 482 34% 72%
Direct / None 371 26% 51%
twitter.com 198 14% 48%
reddit.com 124 9% 31%

Sources panel

Shows where your traffic comes from. Each row includes:

Sub-tabs: Channels (auto-classified into 15 categories like Organic Search, Direct, Social, Paid Search), Sources (individual referrer domains), Referrers (full referrer URLs).

Locations panel

Breaks down visitors by geography. Same core metrics (visitors, percentage, engagement). Sub-tabs: Countries (with flags), Regions (state/province), Cities. Country detection uses server-side IP geolocation. The IP is discarded immediately after lookup.

Technologies panel

Shows what devices and software visitors use. Same core metrics. Sub-tabs: Devices (Desktop, Tablet, Mobile, classified by screen width: 992+ = Desktop, 768-991 = Tablet, below 768 = Mobile), Browsers, OS, Screens (screen size categories).

Campaigns panel

Tracks UTM-tagged traffic. Same core metrics. Sub-tabs correspond to each UTM parameter: Medium, Source, Campaign, Content, Term. Only shows data when visitors arrive with UTM-tagged URLs.

Pages panel

Shows which pages visitors viewed. The Pages sub-tab queries the events table (not sessions) and includes extra metrics per page:

Sub-tabs: Pages (all pages), Entry Pages (first page per session from sessions table), Exit Pages (last page per session), Errors (pages detected as 404s from page title).

Outbound links

External link clicks grouped by destination domain.

Forms

Form submissions grouped by form name.

Custom events

Named events sent via the clickport.track() API, grouped by event name.

Comparison percentages

Each KPI card shows a colored percentage change compared to an intelligent baseline. A green arrow pointing up means the metric improved. A red arrow pointing down means it declined.

Bounce rate is inverted: a decrease shows in green (lower bounce is better) and an increase shows in red.

How comparison baselines work
The baseline adapts to the date range you have selected
Today Average of last 4 same weekdays, up to the current hour
Yesterday Average of last 4 same weekdays
7 Days Average of last 4 same 7-day periods
14 Days Average of last 4 same 14-day periods
30+ Days Previous period of equal length
Last 24h Previous 24 hours (24-48 hours ago)

Why weekday-aware?

Simple "previous period" comparisons create false alarms. A Monday with 20% less traffic than Sunday is perfectly normal for most sites. By comparing against the same weekday, you only see changes that are genuinely unusual for that day of the week.

How the percentage is calculated

For each KPI, the API runs the same query against both the current period and the comparison period(s). When multiple comparison periods are used (4-week averaging), the results are averaged. The percentage change is: ((current - baseline) / baseline) * 100, rounded to one decimal place. When the baseline is zero and the current value is greater than zero, the change is shown as +100%.

Tip: For "Today" comparisons, only hours up to the current hour are included. This prevents comparing a full day of baseline data against a partial day, which would make every metric appear to be declining.

Traffic source classification

Clickport automatically classifies every session into one of 15 traffic channels based on the referrer, UTM parameters, and click IDs in the URL.

Channels

Edge cases and limitations

JavaScript required

Clickport is a JavaScript-based analytics tool. Visitors with JavaScript disabled will not be tracked at all. This typically affects less than 2% of web traffic.

Bot filtering

Bots, crawlers, and automated tools are filtered out at ingestion time using multiple detection methods: user-agent pattern matching, datacenter IP blocklists, webdriver detection, header analysis, and viewport checks. Filtered requests do not appear in any metrics. See Bot Management for details.

Single-page applications

The tracker automatically detects client-side navigations by patching history.pushState and history.replaceState, and listening for popstate events. Each client-side navigation counts as a new pageview. See SPA Tracking for details.

Duration cap

Individual sessions are capped at 1,800 seconds (30 minutes) when calculating KPI averages. The raw session duration in the Sessions panel still shows the actual uncapped value.

Daily visitor rotation

Because the visitor ID rotates daily, the same person visiting on Monday and Tuesday counts as two different visitors. This is a deliberate privacy design choice that avoids persistent cross-day tracking.

Engagement data on tab close

Final engagement data (duration, scroll depth) is sent when the visitor navigates away or closes the tab, using fetch with keepalive: true. In rare cases where the browser terminates the request before it completes, the last incremental update (sent while the visitor was still active) serves as the recorded value.