> 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/page-statistics-engagement-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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FTCV3iJZB2F8bKQoWcIx6%2Fimage.png?alt=media&amp;token=b53a8b88-9d79-4ef8-941b-82aeb4dbf6da" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FMRLBxxnUAzFL2VeiHpnw%2Fimage.png?alt=media&amp;token=2c24e588-9e56-4a69-81b3-b2fc3f5a8fe8" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FW84UFY0mvd15sEYbGscu%2Fimage.png?alt=media&amp;token=4b8f462a-3ea7-4f2b-a822-17f159592729" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FMvLWVHd8S8RYBHYv2GVq%2Fimage.png?alt=media&amp;token=628a35e9-6477-45a5-ad96-38f53bd71123" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FlTGO68BN1I4DLI7WPsyP%2Fimage.png?alt=media&amp;token=77db02d6-6432-49a0-b8c0-5c6e7fd5efae" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FYvyGsRBZ5hdfDzLtQmqf%2Fimage.png?alt=media&amp;token=08342db9-d4a9-42ae-90b0-eb4f712996e3" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FuRUqfosoxX7YbM4bkO7X%2Fimage.png?alt=media&amp;token=25a6b948-b2f0-4d40-b409-1f1255c8f087" 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="https://3931781085-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjvxfJkYMGfMfN4qlzl0C%2Fuploads%2FLq9O6uhFtKhd0ajB9Tla%2Fimage.png?alt=media&amp;token=0244e7c3-db2d-4602-a42f-887d2036765f" 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.
