Live and the world map
Live sits in the main menu between Pulse and Leads, with the number of visitors on the site right
now („● 7“; the dot pulses only while someone is there and stays still with reduced motion). On
phones it is part of the bottom bar. Old links to Verhalten › Live and /events forward here.
The area has two tabs: Board & Karte (default) and Ereignisse, the raw event stream that used to be the events page.
Who counts as live
A visitor is live when their browser sent a signal in the last 90 seconds and the page was not
left. The count is cached for 15 seconds (GET /v1/projects/{project}/live/count, also part of
GET …/pulse/badges as liveVisitors). While nobody watches, the SDK keeps sending a light
heartbeat every 30 seconds on visible tabs (that is what keeps a reader „live“); as soon as a team
member opens Live, visitors shown on a board send frames every half second, a sample of others once
per second (see Many visitors at once) – only for the signals the project's
capture levels allow for that visitor. A page load that the server stitched into an
earlier visit (new tab, cookieless visitor) refreshes that visit, so one person is counted once.
„Besucher jetzt“, the board, the map window „Jetzt“, the „● n“ badge and „Alle Projekte live“ all count the same presence rows with the same rule. When nobody is there, the header still says how many visitors the last 30 minutes had („In den letzten 30 Min. waren 5 Besucher da“).
The board
- Kacheln: one tile per page with visitors, built on the page snapshot. Each visitor appears as the band of the page they currently see (viewport) plus their clicks – no mouse pointer unless „Mausbewegung & Hover“ is allowed for them.
- Page image of a tile: the newest page snapshot of the page. Usually it comes from the first
recorded visit of the page: the masked full snapshot of that recording (masked in the browser and
again on the server with the project's masking settings) becomes the page image, rendered on the
playback domain without scripts. It needs no crawler, is refreshed at most every 30 minutes, is
never taken from page views marked personal, from test sessions with relaxed masking or under the
health preset, is kept no longer than the recording retention and is erased with the visitor's
recording. It is visible to everyone who may watch recordings (
recordings:read). Without any image the tile says „Seitenabbild entsteht mit dem ersten aufgezeichneten Besuch“. - Gruppiert / Einzeln: grouped shows the density per page and only appears from the project's minimum count (kMin) per tile. Single visitors are shown when the level „Live-Ansicht einzelner Besucher“ allows it for that visitor (by default only with consent for recordings); otherwise the board says why („Einzelne Besucher sind in diesem Projekt aus …“) and links to the setting.
- Mauszeiger, Spur und Klicks: where „Mausbewegung & Hover“ is allowed for a visitor and you hold
recordings:read, the pointer moves smoothly over the tile (the SDK samples about 16 times per second, the board plays the path back about 1.2 seconds behind and interpolates in between) with a fading trail. Clicks ripple where they happened: in the visitor's colour, red with a double ring for rage clicks, grey and dashed for dead clicks (no reaction within a second), as a dot for taps on phones. A resting pointer stays where it stopped, fainter. Only coordinates travel, never text or values. Everything is drawn on one canvas per tile. - Seite wählen: the page selector in the board's head (or a click on a tile) shows one page large; pages beyond the tiles are buttons below („+3 weitere Seiten“).
- Besucher-Detail and „Besuch verfolgen“: source, ad, device, interest, pages so far and the cost of the visit; following keeps the tile of that visitor in focus across page changes.
- Hinweise: hot visitors on a page („2 heiße Besucher auf /software“) and enquiries the moment they are sent appear in the header of the board. They live only in the stream and are never stored with personal data; lasting problems run through the normal alerts.
Many visitors at once
Live stays fast with thousands of visitors on one page – on the server, on the way and in your browser:
- On the board: at most 30 visitors singly (followed and selected ones always, then the 10 most
interested, then a fixed sample that does not change while they stay, at most 25 per page). Every
other visitor is part of the density and the Zeiger-Wärme, the pointer heat of the last
1.5 seconds, which stands for the whole page („+ 9.812 weitere als Zeiger-Wärme“). The heat needs at
least kMin pointers and
recordings:read. - From the visitors: only visitors shown on a board send pointer frames twice a second; about 60 more send once per second for the heat and about 400 send their visible area every 5 seconds; all others keep the 30-second heartbeat. The number of requests therefore stays about the same from a few hundred visitors on, plus one heartbeat per visitor every 30 seconds.
- On the way: a moving pointer sends only its new samples, not the whole visitor. A slow connection never builds up a queue: Live skips and merges updates and reconnects when it falls far behind.
- Lists, map and events: the visitor list ends with „+ n weitere, zusammengefasst“, the map draws the 150 busiest places and counts the rest („+ 2.340 weitere Besucher an 410 kleineren Orten“), the event stream shows the newest events once per second and says how many it grouped.
- In the browser: one drawing loop for all tiles at the display's refresh rate, paused in a hidden tab, at most 40 pointers (12 on a phone), the rest as heat; on a slow machine it draws every other frame.
The world map („Woher gerade?“)
Next to the board, a world map shows where current sessions come from:
- Zeitfenster: „Jetzt“ (last 90 seconds, always the start) or „Letzte 30 Min.“ with traces of new arrivals. With „Letzte 30 Min.“ the map title, a caption („5 Besucher in den letzten 30 Min. · jetzt 0“), the header sentence and the visitor tile name that window.
- Ausschnitt: DACH, Europa or Welt; zoom with „Näher heran“ / „Weiter weg“ (also on phones), a double-click (Shift = out), Ctrl/⌘ + mouse wheel or a trackpad/two-finger pinch; drag to move. A plain mouse wheel keeps scrolling the page.
- Farbe: by amount, by source (Meta, Google, direct …) or by interest.
- Hover or tap on a place: „Zürich · 2 Besucher · Meta k1-a1 · /software“. A click filters the board to these visitors; „Ortsfilter entfernen“ resets it.
- Next to the map a list of places; datacenter traffic is marked „Rechenzentrum (VPN?)“ and visits without a known location are counted separately as „unbekannt“.
- On phones the list comes first with a small map.
The map is drawn from a simplified vector world map shipped with the dashboard – no tile service, no request to a third party.
How location is captured
- The location comes from the hosting edge's headers at the moment of the request (Vercel
x-vercel-ip-country/-country-region/-city, Cloudflarecf-ipcountry/cf-region-code/cf-ipcity; behind the X3 first-party proxy itsx-3x-client-geo). No IP address is stored. - The project's precision (city, region or country) and the capture level of the signal „Ort“ are
set in Datenschutz & Erfassung.
X3_GEO_HEADERS=offstores no location at all. - A city is shown only when at least kMin visitors are there or the viewer may see personal data; otherwise the point is coarsened to the region, then to the country.
All projects live
With more than one project, Live also sits in the cockpit menu (/cockpit/live, „Alle Projekte
live“) and every project's Live links to it. One page for every project you can read – across
organizations like the cockpit:
- Bereich: „Alle Projekte“, one organization, or a chosen set of projects (kept in the URL,
shareable). Only projects whose organization grants you
analytics:readappear; a key or Claude connection narrowed to projects sees only those. - Jetzt live in total and per project – exactly the number of each project's „● n“ – with a sortable, filterable project table (columns, presets and CSV like every table): visitors now, via ads, very interested, top source, today's leads, conversions, purchases, revenue and spend.
- One world map for all projects: colour by project (legend with show/hide per project) or by source. Places are coarsened per project with that project's rules before they are merged, so the shared map never shows more than the project maps.
- Live-Feed: visits, leads (with the booking or enquiry of the same moment), repeat conversions and purchases, each with project badge, channel, campaign and country; filter by project, organization, kind and channel; pause and resume (new entries wait as „n neue“). A click opens the visit, the lead or the project's Live.
- Updates every 5 seconds in one request for all projects (each project's own Live keeps its live stream). Map points are loaded for the 40 projects with the most visitors, at most 200 projects per page; the page says when projects are left out.
Live figures in the cockpit
The cockpit shows Jetzt auf Deinen Seiten, Leads heute, Conversions heute (shop projects: Käufe und Umsatz heute) and Ausgaben heute in total; the columns „Jetzt live“, „Leads heute“, „Conversions heute“, „Käufe heute“, „Umsatz heute“ and „Ausgaben heute“ are in „Alle Projekte“ under Spalten or the preset „Heute live“. They refresh every 15 seconds; a changed number pulses briefly (not with reduced motion).
- „Heute“ across time zones: every project counts its own running calendar day in its time zone (project settings). The total adds these days up – late in the evening a project in New York may still count its „today“ while Berlin is already on the next day; the tile then names both days.
- Counting rules as in Pulse: leads are people (repeat enquiries of the same person do not count
again), qualified leads are those not marked disqualified, conversions are the counted reports
(enquiry, booking, contact – one person can convert more than once), every purchase counts in shop
projects. Lead and purchase figures are never added into one number. Revenue and spend totals are
converted into your display currency; spend needs
ads:readand comes from the ad accounts (synced every 15 minutes). Test traffic never counts; demo projects stay out of the totals next to real projects.
Empty and error states
Nobody there: „Gerade ist niemand da“ with the time of the last activity in the last 30 minutes.
Connection lost: the board says so and reconnects by itself (the stream resumes where it stopped).
No access: members without analytics:read get a clear message instead of an empty board.
API and MCP
POST /v1/projects/{project}/live/token(scopeanalytics:read) returns a 60-second token; the streamGET /v1/live/{projectId}/streamis read withfetch()andAuthorization: Bearer <token>– the token never goes into a URL. Events:snapshot,delta(at most 4 per second; moving pointers aspointerswith only the new samples),ping,bye(after 280 seconds, or when the connection falls far behind; resume withLast-Event-ID).GET …/live/geo?window=now|30m– the coarsened map points, same rules as the dashboard.- MCP
live_now– the same view for Claude, grouped below kMin. GET /v1/portfolio/live?parts=live,geo,feed,today(scopeanalytics:read; optionalorg,projects,window,since,display_currency) – the view over several projects; MCPportfolio_livereturns the same snapshot for Claude, scoped to the connection.