> ## Documentation Index
> Fetch the complete documentation index at: https://docs.terminus.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Analyze Link Clicks, QR Scans, and Visitor Data

> Track clicks and QR scans on your short URLs: headline KPIs, UTM, geo, and device breakdowns, pivot tables, and per-link stats.

Analytics shows how the short links in your published records are being used. Every time someone opens a Terminus Hub short URL, by clicking the link or scanning its QR code, the open is recorded along with the visitor's approximate location, device, referrer, and any UTM parameters on the URL. Analytics is account-level: it spans every workspace and governance model, and you narrow it down from there.

<Info>
  Every short URL open is captured as one event with its source (link click vs QR scan), approximate country, region, and city (from IP), device type, browser, OS, referrer, and UTM parameters. A short URL starts being tracked once its submission is approved, so Analytics reflects activity on your published links.
</Info>

## Open analytics

Click **Analytics** in the left sidebar. Analytics opens on the **Overview** tab, with three tabs across the top:

<CardGroup cols={3}>
  <Card title="Overview" icon="gauge" href="#overview">
    Headline KPIs and a per-link breakdown for the selected period.
  </Card>

  <Card title="Drill-in" icon="filter" href="#drill-in">
    Filter clicks down by dimension and read the breakdown.
  </Card>

  <Card title="Pivot" icon="table" href="#pivot">
    Cross-tabulate two dimensions in a single table.
  </Card>
</CardGroup>

## Shared controls

Two controls sit at the top of every tab and apply across the page.

**Period.** Set the time window for everything shown:

| Option           | Window                        |
| ---------------- | ----------------------------- |
| **Last 7 days**  | The 7 days ending today       |
| **Last 30 days** | Rolling 30-day window         |
| **Last 90 days** | Rolling 90-day window         |
| **All time**     | Every retained event          |
| **Custom range** | A start and end date you pick |

**Compare prior period.** When on, KPI tiles show the change versus the previous window of the same length, for example this 30 days against the 30 days before it. The toggle is enabled on **Overview** and **Drill-in** only. It is shown but disabled on **Pivot**, and it has no effect under **All time** (there is no prior window to compare against).

<Note>
  How far back **All time** reaches depends on your plan's click-retention window: Free 30 days, Professional 365 days, Business 730 days, Enterprise 1095 days (about 3 years). Events older than your window age out and stop appearing.
</Note>

## Overview

The Overview tab answers "how are my links doing overall?"

**Controls.** Choose a **Taxonomy**, optionally **Search** by slug or destination, filter by **Source** (**All**, **Links**, or **QR**), and optionally **Group by** a field from your governance model.

**KPI tiles.** Four summary tiles, each scoped to the current period and filters:

| Tile                | What it measures                                                                     |
| ------------------- | ------------------------------------------------------------------------------------ |
| **Total clicks**    | Every click and QR scan in the window, including repeat visits                       |
| **Unique visitors** | Distinct visitors, where one IP address and device combination counts as one visitor |
| **Active links**    | Short URLs that received at least one click in the window                            |
| **QR share**        | The share of total clicks that came from QR scans                                    |

With **Compare prior period** on, Total clicks, Unique visitors, and Active links each show their change against the prior window.

**Per-link breakdown.** Below the tiles, a table lists one row per short URL with its clicks, unique visitors, QR share, top country, and top device, each with a small trend sparkline. Use **Group by** to group rows by a governance-model field instead of by link. Click any row to open that link's [per-link stats](#per-link-stats).

## Drill-in

The Drill-in tab answers "what is driving these clicks?"

<Steps>
  <Step title="Set the scope">
    Pick a **Taxonomy** to analyze, or choose **All taxonomies** to look across every governance model.
  </Step>

  <Step title="Add filter conditions">
    Add one or more conditions of the form **dimension = value** (for example `Device = Mobile`). Multiple conditions combine with AND, so every condition must be true for a click to count.
  </Step>

  <Step title="Read the breakdown">
    The breakdown panels update to show clicks and unique visitors for the filtered set, grouped by the dimension you choose per panel. A click-trend line and KPI tiles sit alongside.
  </Step>
</Steps>

You can group and filter by these dimensions:

| Dimension                                           | Source                                                |
| --------------------------------------------------- | ----------------------------------------------------- |
| **UTM Campaign / Source / Medium / Content / Term** | UTM parameters read from the link                     |
| **Country**                                         | Visitor country, from IP geolocation                  |
| **Device**                                          | Desktop, mobile, tablet, or bot                       |
| **Source type**                                     | Link click vs QR scan                                 |
| **Governance-model fields**                         | Any field on the selected taxonomy's governance model |

<Note>
  Governance-model field dimensions only appear when you have a specific taxonomy in scope. Under **All taxonomies**, only the built-in dimensions (UTM, Country, Device, Source type) are offered.
</Note>

## Pivot

The Pivot tab builds a cross-tab table. Choose a **Rows** dimension, a **Columns** dimension, and a **Measure**:

* **Clicks**: total click count.
* **Unique**: distinct visitor count.
* **Unique rate**: unique visitors divided by clicks.

The table shades each cell by the chosen measure for every combination of row and column value. Compare prior period does not apply on Pivot.

## Per-link stats

From the Overview breakdown, click any short URL row to open its stats page. It covers that one link:

* **Header**: the link's slug, full short URL, destination, and domain.
* **KPI tiles**: Total clicks, Unique visitors, QR share, and Top country.
* **Click trend**: clicks over time across the selected period.
* **Breakdowns**: Top geos (by country), Device, Browser, OS, source (Direct vs QR scans), and Referrer.

The **Period** control applies here too, so you can see how a single link is trending. (Compare prior period is not available on the per-link page.)

## Gotchas

* **Only short URLs are tracked.** Clicks are recorded for Terminus Hub `short_url` fields and their QR codes. A plain `url` field points straight at your destination and does not route through Terminus Hub, so it cannot be click-tracked. Build the link as a Short URL to get analytics on it.
* **Clicks appear after a short delay.** Opens are batched and processed roughly every 30 seconds rather than in real time, so a fresh click can take up to about half a minute to show. There is no live or real-time mode.
* **Geo and device data are approximate.** Country, region, city, device, browser, and OS are inferred from the visitor's IP address and user agent. Treat them as directional, not exact.
* **Unique visitors are an estimate.** A visitor is approximated as one IP address plus device combination. The same person on two devices counts as two visitors, and several people behind one shared IP can count as one. Bots are included in the counts.
* **History is bounded by your plan.** Click data older than your plan's retention window is no longer available, even under **All time**.

## Troubleshooting

<AccordionGroup>
  <Accordion title="My clicks are not showing up instantly">
    This is expected. Opens are collected and processed in batches roughly every 30 seconds, so a click can take up to about half a minute to appear. There is no live or real-time view. If clicks still do not appear after a minute or two, confirm you are opening a Terminus Hub short URL (not a plain `url` field) and that the period covers the time of the click.
  </Accordion>

  <Accordion title="My campaign or field breakdown is empty">
    Grouping or filtering by a governance-model field only returns values for clicks whose record actually had a value in that field. Clicks on links whose record had no value (or no record) fall into an empty or unlabeled bucket. Confirm the records behind your links have values set for the field you are breaking down by. Also check that a specific taxonomy is in scope, since field dimensions are hidden under **All taxonomies**.
  </Accordion>

  <Accordion title="Why is there no live or real-time view?">
    Analytics is near real time with a short batching delay (about 30 seconds), not instant. A dedicated live mode is not available today.
  </Accordion>

  <Accordion title="Compare prior period is greyed out">
    Compare prior period is supported on **Overview** and **Drill-in** only. It is shown but disabled on **Pivot** and on the per-link stats page, and it has no effect under the **All time** period because there is no earlier window to compare against. Pick a fixed window such as **Last 30 days** to use it.
  </Accordion>
</AccordionGroup>

## Related

* [Short URL field](/reference/fields/short-url): the tracked links that power analytics.
* [QR Code field](/reference/fields/qr-code): QR scans are tracked as a separate source.
* [Records](/reference/records): the published data your links belong to.
* [Submissions](/reference/submissions): a short URL starts being tracked once its submission is approved.
