Heatmaps and the page map

Verhalten › Seiten › a page opens the page map („Seitenkarte“): an image of your page (the snapshot, rebuilt in a sandbox without any of your page's scripts) with one layer of real behaviour on top. Every number comes from counted signals of real visits – nothing is estimated from a sample model.

Layers

LayerShowsBuilt from
KlicksWhere people click, per element and as a density layerclick target, position relative to the element
ScrolltiefeHow far down people get; the fold of each device classscroll depth and viewport height
AufmerksamkeitWhere people stay (dwell time per band of the page)scroll path every 500 ms, section visibility
FrustRage clicks (several fast clicks on one spot), dead clicks (no reaction), U-turnsderived in the browser from the clicks
RankingElements by clicks, share, conversion rate of the clickers and lift (Wilson interval)clicks joined to leads – leads count people, not events
GeldAd spend and cost per click on each element (money map)clicks of paid visits × cost of the ad the visit came from; needs ads:read

The device switch (Handy / Tablet / Desktop) changes the snapshot and the data together – phone clicks are never painted onto the desktop layout. Vergleich puts two segments side by side (for example converted vs. not converted, Meta vs. Google, version vs. version) and shows the per-element difference.

Minimum counts and suppressed cells

Heatmaps and every other aggregate follow two thresholds that you set in Einstellungen › Datenschutz & Erfassung:

  • Mindestmenge (kMin, default 5; at least 3, at least 10 under the health preset): below it a view shows „Zu wenig Besuche (n < k)“ instead of data. The API answers with met: false; MCP tools say so in words.
  • Zellen unterdrücken (cellSuppress, default 3): single cells, elements or places with fewer visits are hidden from grids, rankings, reports and share links, and the view says how many were hidden.

The data basis label

Every view shows its basis next to the numbers, e.g. „Basis: 1.240 Besuche · solange nicht abgelehnt“ or „… · nur mit Zustimmung“. It names the capture mode the data was collected under, and when the range mixes modes (because the mode was changed) it says so. Reports and MCP answers carry the same basis object.

Mass replay and the board

Abspielen („mode=play“) replays all visits of a page at once on the session clock: a density band of where people are, the median scroll position, who is still there, click clusters, exits per section and reached goals. The board does the same for the top pages of the project as tiles with flow arrows between them; „+5“ adds more pages. Both need the minimum count per tile. inapp=1 in the page URL (API: inapp=true on …/behavior/mass and …/behavior/board) plays only visits from in-app browsers (Instagram/Facebook webviews); the in-app report links there.

Auf der Seite below the board plays the same visits on the page itself, synced to the clock: the click heat builds up until the current second, clicks of the last moments pulse at their position (rage clicks ◆ red, dead clicks ■ grey), pointer trails from recordings glow and fade over the last seconds, the left edge shows where everybody looks and a red line the deepest point so far; the camera follows the median visitor, a strip on the right shows the whole page. Each layer can be switched off. Seconds below the minimum carry no positions; pointer trails need the permission „Aufnahmen ansehen“ and at least the minimum of recorded visits in that second. Exportieren there records the play as a 12-second clip (MP4 where the browser can, else WebM) or the current moment as PNG, in 9:16, 4:5 or 1:1 with the X3 logo and basis line, to download or share.

Patterns („Claude-Muster“)

Above a playlist of recordings (for example „Abbruch im Quiz“) X3 shows the strongest pattern of that playlist, counted deterministically from the visits in it – „7 von 9 steigen bei Frage 4 „Jahresumsatz“ aus“, the most common rage-click target, the section most visitors leave from. Rules:

  • shown only from kMin visits in the playlist; a pattern needs at least 30 % of them and 2 visits;
  • the line names n and the data basis and links to the matching visits („Belege ansehen“);
  • „Claude fragen“ opens Claude with a ready prompt that uses the MCP tools below.

GET /v1/projects/{project}/behavior/patterns?playlist=quiz_drop (scope analytics:read); MCP behavior_patterns.

Reports

ReportWhereAPI
In-App-Browser per ad: frust, dead clicks, fold and stuck WhatsApp/form paths of Instagram/Facebook webviews against normal browsers of the same ad, with the spend on those visitsQuellen & Kampagnen (ad drill-down); one ad with its visits, device split, recordings, mass replay of the in-app visits and fixes: Verhalten › In-App-Browser (/behavior/inapp?ad=…, the target of the behavior_inapp_friction alert)GET …/behavior/reports/inapp (ad= adds detail: devices, systems, entry pages, visits)
Reibungskosten: ad spend on visits with rage/dead clicks, U-turns or abandoned forms; leads counted as people; also a section of the weekly mail („Reibung hat Dich diese Woche ≈ 340 € Klickkosten gekostet“)Pulse, weekly mailGET …/behavior/reports/friction
Wirkung einer Änderung: CTA clicks and leads in equal windows before and after a new page version or deploy marker („Seit der Änderung am 12.10. +31 % Klicks auf den CTA, +2 Leads“)Nachlegen, page mapGET …/behavior/reports/change-impact?page=/software
Kundenbericht (agencies): the month's page map aggregates and money map, no single visits, cells below cellSuppress hidden; as a revocable share linkCockpit, weekly client mailGET …/behavior/reports/client?month=2026-09, share links under …/behavior/reports/shares; the link itself opens GET /v1/share/behavior/{token} (public HTML page, aggregates only, noindex, revocable)

All reports explain what is missing instead of showing empty numbers: without a connected ad account there is no cost („Ohne Meta-Kosten keine Klickkosten – Werbekonto verbinden“, with the link to the connect wizard), mixed account currencies are converted into the project currency, and members without ads:read see the behaviour without the money.

Alerts

The behaviour rules join the project's alerts. They open and close themselves from the current numbers (with hysteresis, so they do not flicker), reopen as „erneut aufgetreten“, and respect „Erledigt“ unless the problem gets clearly worse.

RuleOpens when
behavior_dead_click_spikean element collects clearly more dead clicks than in the previous week
behavior_cliff_ctaon phones most visitors never scroll down to the main CTA (from the snapshot)
behavior_deploy_dropCTA clicks or leads drop after a new page version
behavior_inapp_frictionan ad's in-app browser visits have much more friction than its normal-browser visits
recordings_cap_reachedthe daily recording cap was reached (UTC day)
snapshot_blockedthe page image could not be taken for 30 minutes (bot wall, login) – ask for an owner capture
recordings_no_consentsrecordings wait for a consent nobody gives (the banner probably lacks the purpose)

Reading the click heat

  • The heat is scaled to the typical element (90th percentile of the click density), not to the single most clicked one: one big CTA no longer makes every other click invisible. Thin areas are lifted (square-root scale), so a single click stays visible; white points mark where people clicked.
  • The five most clicked elements are outlined with their share and clicks (the top one in lime).
  • Clicks on elements that are missing in the page image (changed page, quiz step, menu) are drawn at the position on the page where they happened.
  • Elements clicked by fewer visits than the project's minimum (default 5) are never shown alone. Their clicks are pooled by place into zones that together have at least that many visits (soft blobs without an element outline); what stays below the minimum even then is left out.

Export and share

Exportieren above the map downloads the layer as PNG: the whole page, or the social formats 1:1 (1080×1080), 4:5 (1080×1350) and 9:16 (1080×1920) with the hottest part of the page, headline, legend, basis line and the X3 logo. Teilen opens the share sheet of the device with the image (where the browser supports sharing files), else it downloads it. The image only contains aggregates: the page as the crawler saw it (no visitor input), cells under the cell minimum are left out, the page path without query.

API and MCP

  • REST (scope analytics:read): GET /v1/projects/{project}/behavior/heatmap, /heatmap/image (PNG, format=page|square|portrait|story), /compare, /mass, /board, /elements, /sessions, /patterns, /reports/*; snapshots under …/snapshots. Every endpoint takes the common filter plus page, bp (m/t/d) and segment parameters.
  • MCP tools: behavior_heatmap (a zone table, never raw points), behavior_heatmap_image (the same layer as PNG image), behavior_elements, behavior_mass_replay, behavior_visits, behavior_patterns, behavior_report. Prompts: why_not_converted, page_review, ad_vs_landing, deploy_check. Results above 150,000 characters are compacted with a note.