> For the complete documentation index, see [llms.txt](https://docs.fullsession.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fullsession.io/10.-page-statistics-engagement-and-building-cards.md).

# 10. Page Statistics, Engagement & Building Cards

This chapter is the **metrics and reference companion** to \[Chapter 9 — Dashboards]. It has two halves:

* **Part A — Automatic statistics:** the page and engagement metrics FullSession computes for you, what each one means, and where to find it.
* **Part B — A deeper card-building reference:** every measure, aggregation, breakdown, series filter, interval, and how values are formatted — so you can build a card to answer almost any question.

> **A note on terminology.** FullSession doesn't have a separate "Insights" section with its own card catalog. **Cards are dashboard cards** (stored in your reusable card library — \[Chapter 9, section 9.1]). This chapter explains the data and options behind them.

***

### Part A — Automatic Statistics

#### 10.1 Page Statistics

FullSession automatically computes a set of **page statistics** for any page, surfaced most prominently in the **page statistics panel** beside a heatmap (\[Chapter 8 — Heatmaps]) and in the **Pages** dashboard card.

<div data-with-frame="true"><figure><img src="/files/xgKlmq0Wf4YLkwTbOJfx" alt="FullSession heatmap page statistics panel showing click totals, frustration signals, traffic metrics, and timing details alongside the heatmap."><figcaption></figcaption></figure></div>

#### The metrics

| Label                | What it measures                                               |
| -------------------- | -------------------------------------------------------------- |
| **Total**            | Total clicks on the page                                       |
| **Rage**             | Rage-click intervals on the page                               |
| **Error**            | Error clicks on the page                                       |
| **Dead**             | Dead clicks on the page                                        |
| **Total views**      | How much of your traffic this page received (shown as a share) |
| **Avg time on page** | Average time visitors spent on the page                        |
| **Avg load time**    | Average page load time                                         |
| **Users**            | Unique visitors who saw the page                               |

The frustration metrics (**Rage / Error / Dead**) sit right next to traffic and timing, so a page that's busy *and* frustrating stands out immediately.

#### The Pages card

On a dashboard, the **Pages** card (\[Chapter 9, section 9.5]) presents these statistics as a ranked table. You can:

* Choose the **page type** — visited pages, **landing** pages, or **exit** pages.
* Order by **most viewed** or **slowest** (by load time).
* Show **percentage**, **views**, and a **heatmap** link per row.

<div data-with-frame="true"><figure><img src="/files/6xNSrVMe2J9xXamdf0GI" alt="FullSession Pages card showing pages ordered by slowest performance with links to their corresponding heatmaps."><figcaption></figcaption></figure></div>

> **Note** — page statistics cover **clicks, frustration, views, time, load time, and users**. Scroll depth isn't part of this panel; it lives in the **Scroll Map** (\[Chapter 8, section 8.4]).

***

#### 10.2 Engagement Metrics & the Data Behind a Session

Every session FullSession records carries a rich set of **engagement fields**. These power the metrics you chart, the filters you build, and the frustration score you sort by.

<div data-with-frame="true"><figure><img src="/files/pvMe2ihgKT8lmsWOPd3Z" alt="FullSession session details view showing session metrics including duration, active time, visited pages, clicks, frustration signals, and page load time." width="405"><figcaption></figcaption></figure></div>

#### Session-level engagement fields

| Field                                        | Meaning                                           |
| -------------------------------------------- | ------------------------------------------------- |
| **Duration**                                 | Total length of the session                       |
| **Active time**                              | Time the visitor was actively engaged (not idle)  |
| **Pages visited**                            | Number of pages in the session                    |
| **Clicks**                                   | Total clicks                                      |
| **Rage clicks / Dead clicks / Error clicks** | Frustration-signal counts                         |
| **Thrashing periods**                        | Count of erratic "thrashing" cursor stretches     |
| **Abandoned forms ratio**                    | How much form abandonment occurred in the session |
| **Avg load time**                            | Average page load time across the session's pages |
| **Events count**                             | Number of events captured                         |
| **Landing / exit page**                      | Where the session began and ended                 |
| **Referrer**                                 | Where the visitor came from                       |
| **First session date**                       | When this visitor was first seen                  |

#### Per-page detail

Within a session, each page carries its own stats — the **page URL**, **time visited**, **time on page**, **load time**, **click count**, and **frustration clicks** — which is what makes the player's page stepper and the page statistics so precise (\[Chapter 6, section 6.5]).

#### In the player: session statistics

The session player surfaces two engagement readouts for the visit:

* **Average Time on Page**
* **Total Active Time on Pages**

<figure><img src="/files/TzyKeNIwG6zGQc6by9jI" alt="FullSession session player statistics panel showing average time on page and total active time for the session being replayed."><figcaption></figcaption></figure>

#### The frustration score

The **0–100 frustration score** you sort by in the Sessions list (\[Chapter 5, section 5.1]) is **computed on demand** from the session's frustration signals — it isn't a stored field. That's why it's available when you request it (e.g. in the Worth Watching view) and reflects the latest signal data.

***

#### 10.3 What FullSession Computes — and What It Doesn't

Knowing which metrics exist saves you from looking for ones that don't. Here's the honest picture.

#### Metrics that exist

| Metric                | How it's defined                                                                                                           |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| **Identified Users**  | Sessions where **at least one** of email, name, or username is present                                                     |
| **Anonymous Users**   | Sessions where **all** of email, name, and username are absent                                                             |
| **Pages per Session** | Number of pages visited per session                                                                                        |
| **Error Sessions**    | Sessions with **any** error signal — an error click, error log, uncaught exception, unhandled rejection, or response error |

#### Metrics that do *not* exist (and how to approximate them)

| Not available                  | What to do instead                                                                             |
| ------------------------------ | ---------------------------------------------------------------------------------------------- |
| **Bounce rate**                | Filter or break down by **Pages per Session** (e.g. sessions with 1 page)                      |
| **Exit rate**                  | Use the **Pages** card with page type **Exit Page**, or **group by Exit Page**                 |
| **New vs. returning visitors** | Filter by **First Seen** (first session date) — there's no dedicated returning-visitor measure |
| **Engagement rate**            | Build from **Active Time** / **Duration** measures directly                                    |
| **Conversion rate**            | Use **Funnels** (\[Chapter 12 — Funnels]) — conversion isn't a dashboard card measure          |
| **Sessions per user**          | Use a **Breakdown** card: measure **Total Sessions**, grouped by **User**                      |

> **Why this matters** — FullSession gives you the raw, accurate building blocks (active time, pages per session, identified/anonymous, error sessions) and lets you compose them, rather than shipping pre-baked "rates" that hide their definitions. The trade-off is that a few familiar web-analytics ratios must be approximated with the measures above.

***

### Part B — Card-Building Reference

#### 10.4 How a Card Is Built

Every dashboard card is assembled from the same parts in the **card builder** (\[Chapter 9, section 9.6]). Understanding these parts lets you build almost anything:

| Part              | Question it answers                                         |
| ----------------- | ----------------------------------------------------------- |
| **Measure**       | *What* are we counting? (sessions, clicks, duration…)       |
| **Aggregation**   | *How* do we combine numeric values? (sum, average…)         |
| **Group by**      | *Sliced by what?* (device, country, page…)                  |
| **Series**        | *Which filtered slices to compare?* (up to five)            |
| **Interval**      | *What time bucket?* (for time-series: hour/day/week/month)  |
| **Visualization** | *How is it drawn?* (line, area, column, bar, spline, table) |

<div data-with-frame="true"><figure><img src="/files/oZHU5sdt17PYHoxurNng" alt="FullSession card builder showing labeled configuration options for measure, aggregation, group-by, series, interval, and a live preview."><figcaption></figcaption></figure></div>

***

#### 10.5 Measures Reference

A **measure** is the value a card counts. The full set, with the labels you'll see in the builder:

| Label (in builder)        | Measures…                       | Type            |
| ------------------------- | ------------------------------- | --------------- |
| **Total Sessions**        | Sessions                        | Count           |
| **Total Events**          | Custom events                   | Count           |
| **Unique Users**          | Distinct visitors               | Count           |
| **Identified Users**      | Sessions with an identity       | Count           |
| **Anonymous Users**       | Sessions without an identity    | Count           |
| **Error Sessions**        | Sessions with any error signal  | Count           |
| **Active Time**           | Active engagement time          | Numeric         |
| **Duration**              | Session length                  | Numeric         |
| **Pages per Session**     | Pages visited per session       | Numeric         |
| **Number of Clicks**      | Clicks                          | Numeric (click) |
| **Rage Click Count**      | Rage clicks                     | Numeric (click) |
| **Dead Click Count**      | Dead clicks                     | Numeric (click) |
| **Error Clicks**          | Error clicks                    | Numeric (click) |
| **Total Feedbacks**       | Feedback submissions            | Count           |
| **Answered Feedbacks**    | Completed feedback responses    | Count           |
| **Total Response Errors** | Network/response errors         | Count           |
| **Abandoned Forms**       | Forms started but not submitted | Count           |

**Two kinds of measure:**

* **Numeric measures** (Active Time, Duration, Pages per Session, and the four click measures) can be **aggregated** — summed, averaged, etc. (section 10.6).
* **Count measures** (everything else) count matching sessions/items and don't take an aggregation.

> **Click measures** (Number of Clicks, Rage / Dead / Error Click Count) are available in click-oriented contexts. If you don't see them, switch the card to a click-based measure setup.

***

#### 10.6 Aggregations & Breakdowns

#### Aggregations

For **numeric** measures, choose how the values are combined:

| Aggregation | Result                            |
| ----------- | --------------------------------- |
| **Sum**     | Total of all values               |
| **Average** | Mean value                        |
| **Median**  | Middle value (robust to outliers) |
| **Minimum** | Lowest value                      |
| **Maximum** | Highest value                     |

> **Tip** — for time-based measures like Duration and Active Time, **Median** is often more honest than **Average**, because a few very long sessions can skew the mean.

#### Breakdowns (Group by)

A **group-by** dimension slices a measure into categories. The available dimensions:

| Group          | Dimensions                                                                                                                                  |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
| **Audience**   | User                                                                                                                                        |
| **Technology** | Browser, Browser Version, Device, Operating System, Screen Width, Screen Height (and the **Screen Resolution** combo, shown as `1920x1080`) |
| **Location**   | Country, Region, City                                                                                                                       |
| **Navigation** | Page, Landing Page, Exit Page, Referrer                                                                                                     |
| **Errors**     | Error Logs, Uncaught Exceptions, Unhandled Rejections, XHR Errors, Response Error Status / Method / URL                                     |
| **Clicks**     | Element Text, CSS Selector                                                                                                                  |

<div data-with-frame="true"><figure><img src="/files/t3B3JjwL8tUnsls8rQ6X" alt="FullSession Breakdown card showing Total Sessions grouped by Country as a bar chart, with an option to switch to a table view."><figcaption></figcaption></figure></div>

**Combining dimensions:** session-level dimensions (device, country, browser, etc.) can be combined with page-level dimensions (page, landing/exit page). However, the **error-category breakdowns** (error logs, exceptions, response errors) must be used **on their own** — they can't be combined with other group-bys.

***

#### 10.7 Series, Filters, Intervals & Comparison

#### Series (comparing slices)

A single card can carry **up to five series**, and **each series has its own filter**. This is how you put related slices side by side on one chart — for example, one series filtered to *mobile* and another to *desktop*, plotting both together.

<div data-with-frame="true"><figure><img src="/files/Y4GKkaOagx0r2kia5WEI" alt="FullSession Time Series card showing two separate filtered series — Mobile and Desktop sessions — plotted together on the same chart for comparison."><figcaption></figcaption></figure></div>

#### Filters

Series filters use the **same filtering system as the Sessions list** (\[Chapter 5, section 5.2]) — the same fields, the same operators (is / is not / contains / greater than / between…), and the same **AND / OR / NOT** grouping. Anything you can filter a session list by, you can scope a card series by.

#### Time intervals

For **Time Series** cards, choose the bucket the data is grouped into:

**hour · day · week · month**

#### Date range

A card's date range comes from the **dashboard's shared filter bar** (which can be "all time" or a custom window), applied to **every card on the dashboard**. There's **no per-card date override** — change the dashboard's range and all cards move together. Scope by audience using a **connected Segment** (\[Chapter 9, section 9.7]).

#### Previous-period comparison

The **Metric** card can show a **previous-period comparison** — the current value alongside the prior period and the change. This turns a bare number ("4,210 sessions") into a trend signal ("4,210, +12%"). It's the simplest way to give a KPI context.

<div data-with-frame="true"><figure><img src="/files/pl4VWzNjFjs5S5sOr7RZ" alt="FullSession Metric card showing the current value with a previous-period comparison and the change versus the prior date range."><figcaption></figcaption></figure></div>

***

#### 10.8 How Values Are Formatted

FullSession formats card values for readability, which is worth knowing so the numbers don't surprise you.

#### Durations become human-readable

**Active Time** and **Duration** are captured in milliseconds but displayed as human time:

| Underlying      | Displayed    |
| --------------- | ------------ |
| Under a minute  | `45s`        |
| Under an hour   | `2m 30s`     |
| An hour or more | `1h 15m 30s` |

#### Large counts are compacted

Counts (sessions, events, users, clicks…) are shown compactly:

| Range                 | Displayed        |
| --------------------- | ---------------- |
| 1,000–999,999         | `1.5k`           |
| 1,000,000–999,999,999 | `1.5M`           |
| 1,000,000,000+        | `1.5B`           |
| Under 1,000           | the plain number |

#### Unit labels

Where helpful, values carry a unit label — *Sessions*, *Events*, *Users*, *Clicks* — pluralized automatically (e.g. "1 Session" vs. "3 Sessions"). Duration values embed the unit in the value itself (the `m`/`s`/`h`), so they don't show a separate label.

> **The big picture** — FullSession computes accurate, well-defined **page statistics** (views, time, load time, clicks, frustration) and **engagement fields** (duration, active time, pages per session, frustration counts, identified/anonymous, error sessions), and exposes them through a **composable card builder**: pick a **measure**, optionally **aggregate** it, **break it down** by any compatible dimension, compare up to **five filtered series**, bucket time by **hour/day/week/month**, and read it back in human-friendly units. A handful of classic ratios (bounce, exit, returning, conversion) aren't pre-computed — you build them from these parts or use **Funnels**.

***

> **Next up:** \[Chapter 11 — Segments] introduces the reusable audience definitions that power series filters, connected dashboards, heatmaps, and alerts — letting you name a group of users once and reuse it everywhere.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.fullsession.io/10.-page-statistics-engagement-and-building-cards.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
