Session replay
Find and replay sessions
The Sessions page lists sessions and shows which had problems. The session replay shows a session's events, frustration signals and errors on one timeline.
On this page
What it is for
A chart shows that something changed. A replay shows what the person saw. Use it to check a support ticket, explain a drop, see a funnel step, or send an engineer a link to the exact second an error happened.
How it works
Sequential builds the Sessions list from your analytics events. It groups them by the session id that each event carries. If a recording with the same id is ready to play, the row shows ▶. See Sessions.
Find a session
- Click Watch in the left rail. It opens Sessions. Click the Latest tab. See Which view opens below.
- Set the dates in the toolbar at the top. The first time, the range is the last ten days in UTC. After that, the page opens on the range that you last applied here.
- To narrow the list, click + Add filter. Pick a field, such as User ID or URL, and enter a value.
- Click Apply. This applies the dates and the filter together.
- Click ▶ Replay (Play session replay) at the end of the row. If you cannot play the session now, the row says why in its place: "No recording", "Expired", "Processing · ready by" and a time, such as "Processing · ready by 14:05", or "Couldn't check recording" when Sequential could not read the state. See What you will not see.
Find sessions with problems
The Problems column names the JS errors and failed requests of a session, such as "2 JS errors" or "1 failed request". They come from the DevTools counts of the recording. A "+" means the recorder reached a capture limit. The real count can be higher. Without DevTools counts, for example for a session with no recording, the column counts the session's error events and the problems stored from its recording, in your date range.
A row without a badge can still have problems. Sequential may not have checked the session, or that kind of capture may have been off.
To show only sessions with problems, click With JS errors or With failed requests. These filters are on Latest only. See DevTools in replays.
Watch and share a replay
The player opens paused. Click the recording to play or pause. Skip inactivity is on by default. Markers above the seek bar show events, errors and frustration signals.
- Press E for the side panel: Events, Info and Insights.
- Press D for </> DevTools: console, network and performance data.
- Press ? for every keyboard shortcut.
To share a moment, seek to it and press C or click ⧉ Share. The link opens paused at that moment. The link does not name the project. If your teammate sees "No recording for this session", tell them to select your project in the sidebar. Or add &project= and your project id to the link. See Links that open a project.
Links that open a project
A link can name its project with project= in its address, for example /replay?session_id=…&project=…. This works on every page that has the left rail.
- Agent answers include these links. In an agent's answer, the
replay_urlof a session, theurlof a moment and theapp_urlof a session list all name the project that the agent reads. The link opens the correct project for you. You do not select it first. From 11 October 2026, theapp_urloflist_sessionsopens Latest (mode=latest), the list that the agent read. - What Sequential does. It selects the project before the page loads, as if you selected it in the sidebar. Then it removes
project=from the address. The project stays selected after that. - A project that you cannot open. The page shows "This link is for a project you can't open" and "It may belong to another account or organisation." with the link Go to your sessions. Sequential never shows another project in its place, and your selected project does not change.
- Share a link with a teammate. The link opens the same project for them. They must be able to open that project: they must be a member of its organisation, and the project must not be archived.
- Find the project id. Open Settings → Projects → your project. The address is
/settings/projects/<id>/overview. - ⧉ Share in the player does not add
project=. Add it yourself.
What it needs
- Analytics events with a session id. See Install Sequential.
- A recording under the same session id. See Session replay (web).
- A user id that the recorder can read, from PostHog, Amplitude, Mixpanel, Pendo or the Sequential SDK on the page. With only the Smartlook compatibility script, the player shows anonymous. See Identify your users.
- Background judging on for your project, for Watch. It is on by default. Owners and admins change it under Settings → Projects → your project → Insights. Your Sequential server must also allow it.
What you will not see
- Masked text and inputs show as solid blocks (█). Blocked elements show as empty boxes.
- Canvas and WebGL are not recorded unless your project turns on Record canvas. From 10 October 2026, the replay then shows snapshots of each canvas, 2 a second by default, not smooth motion. See Recording settings. Sequential never records the inside of cross-origin iframes.
- Masking changes apply from the next page load. Existing recordings keep the masking they were recorded with.
- Under Strict, attribute values and addresses are masked. Web fonts and CSS background images do not load, and the page address shows its route without a query. In DevTools, a file that the page loads shows only its domain, and an API call shows its route with id-like parts masked. See Masking and redaction.
- Some sessions have no recording, and long sessions are not recorded in full.
- DevTools never keeps request or response headers or bodies. It keeps console message text only if your project turns it on.
- Old recordings stop playing. By default, a recording plays for 30 days after its first part arrived at Sequential. Then the whole recording expires. The player shows "This recording has expired." The storage deletes each recording file about 2 days after its period ends.
- New recordings take a few minutes. Sequential collects uploads in 5-minute periods, and prepares each period 30 seconds after it ends. So with the default settings, an upload is ready between about 30 seconds and 6 minutes after it arrives. You can play a recording only when all its uploads are ready. Until then, the player shows "This recording is still being processed — ready by 14:05.", with the time when it is ready. On Latest, the row shows "Processing · ready by 14:05" in place of ▶ Replay. The time is at most about 6.5 minutes after the last upload arrived. Once that time has passed, the label reads "Processing · ready shortly", and the DevTools and Insights tabs say "(shortly)". While the session is still uploading, the time moves later. In Latest, Watch, Ask, the session list of a user, the sample sessions of a finding and the Worth watching tile, the row checks again 5 seconds after the time in its label, and at least 15 seconds after its last check. Without a time, it checks after 1 minute. It checks up to 10 times while the page is open. When the recording is ready, the row shows that you can play it. You do not have to reload. While its browser tab is visible, the player checks again every 10 seconds and opens the recording when it is ready. A check that comes while the tab is hidden waits until you show the tab again. The player checks every 10 seconds for at least 2 minutes and until 10 seconds after the time in its message, but not for more than 10 minutes. Then it shows "This is taking longer than expected." and checks once a minute, up to 10 times. After that, it stops. To check at once and start the checks again, select Check now. There is no live view: while a session is still recording, its newest uploads are usually not ready. See Troubleshooting.
- A recording that cannot be read for a moment. The player shows "The recording could not be read right now. Retry shortly." Select Retry.
See Recording settings and Masking and redaction.
- DevTools always keeps redacted error messages from uncaught exceptions and unhandled rejections, even with console message text off.
- Mobile apps mask on the device: set mobile masking in your app's PostHog SDK.
Limits
| Limit | What happens |
|---|---|
| 100 sessions a page | Latest loads 100 sessions at a time. The next 100 load when you scroll near the end, or when you press Load more. If a page cannot load, "Could not load more sessions." shows next to the button, and the button reads Try again. |
| Two durations | The list's Duration runs from the first event to the last. The player's duration is the recording's length. |
| 2,000 events per replay | The player loads the first 2,000 events of a session. |
| Recordings without events | They are not in the list. |
| No dates on the Events link | Open events opens the Events page on its default ten days. For an older session, widen the range there. |
| Mobile | PostHog's iOS and Android recordings play here. Android playback is not tested with a real app yet. React Native and Flutter recordings are accepted but not verified yet. DevTools' Performance tab stays empty for mobile, and Console and Network hold only what the SDK sends. See Mobile apps (iOS, Android, React Native). |
- The judge runs when you open the Insights tab. Each run uses the daily allowance for on-demand judging.
- You can re-run Insights for a session once every 10 minutes. A re-run inside that window shows the saved answer.
- Mobile sessions never match With JS errors.
- A condition matches single events. From 9 October 2026, a row's What happened, Duration and When count all the events of the session in your date range, also when you filter. The filter decides which sessions are listed.
- With only the Sequential SDK, the ‹ and › buttons that step between a user's sessions are not available, even after
identify.
Examples of use
- Check a support ticket. A customer says the invoice export "just spins". Filter to their user id and watch this morning's session.
- Explain a drop. Trial sign-ups fell on Tuesday. Turn on With failed requests and watch a few sessions from your sign-up page.
- See a funnel step. People leave at the billing step. Open one of their sessions and jump to the billing page.
- Send an engineer a link to the exact second an error happened.
Latest, Watch and Ask
Sessions has three views: Latest, Watch and Ask. All three use the same date range and filter. Every role can find and play sessions, viewers included.
| View | What it shows |
|---|---|
| Latest | The sessions in your date range that match your filter, newest first |
| Watch | Sessions that Sequential judged, ranked by how much attention they need. See Watch: sessions worth your time |
| Ask | Sessions that match a description you type, such as "tried to change their billing address and gave up". See Ask: find sessions by describing them |
Which view opens. From 11 October 2026, a link to Sessions without a view chooses one:
- Watch, when background judging is on for the project and Sequential judged sessions in the last 7 days. This includes sessions judged with an earlier rubric.
- Latest, when judging is off, when nothing is judged yet, or when the link narrows the list: a user's sessions or a heatmap's rage-click link.
- Latest with a note, when Sequential cannot read Watch, or when the first Watch page in your dates has no judged session. The note says "Watch is not available now, so Sessions shows Latest." or "No session in this range is judged yet, so Sessions shows Latest."
While Sessions chooses, the list shows that it is loading and no tab is selected. A view in the address always wins: ?mode=latest, ?mode=watch or ?mode=ask. A click on a tab puts its view in the address, Latest too, so a reload or a shared link keeps it. The Dashboard's error and frustration tiles, the links from Users and a user's page, and heatmaps open Latest. Watch in the left rail and the search (⌘K) let Sessions choose.
More about the list
- Sequential stores a recording under the same session id as the events. The player shows the session's events on top of the recording.
- To change the dates, see Filters, date ranges and saved views.
- Hover the Problems cell for the definitions.
- With JS errors and With failed requests sit beside the tabs. They search all recorded sessions in the range. Notes above the list show how many sessions these filters could not check.
- Rows are in order of latest activity, newest first. When shows when each session started, so a session that started earlier can be above one that started later. You cannot sort the columns.
- A recording without events can happen on a page that has the recorder but no analytics SDK.
- The count next to the tabs is the number of sessions in the range, not the number on the screen. Next to Load more, the page shows how many are on the screen, for example "100 of 2,345". If Sequential cannot count the sessions in 2 seconds, the count reads 10,000+.
List columns and filters
Sequential tests each top-level row of the filter on its own. A session is in the list when, for each row, it has an event that matches that row. Two rows can match two different events of the session. The conditions in one All of group must match the same event. A NOT group lists the sessions that have no event that matches it. When a filter is applied, the list shows: "Each filter row is checked on its own: a session is listed when it has an event that matches each row. A NOT group lists the sessions that have no such event." The Ask tab does not use this rule. There, a session needs events that match the whole filter. See Ask. From 9 October 2026, its What happened, Duration and When use all of its events in your date range. Before that date, they used only the matching events.
| Column | Shows |
|---|---|
| Who | The session's latest user id, as a name, an email or a label such as "Anonymous visitor 01a0f6…", with the browser, operating system and country of the session below it. With the Sequential SDK, PostHog or Mixpanel, it is the identified value that the anonymous id is linked to. Click it to open the user's page |
| What happened | The route of the first page view, then how many different routes the session viewed, such as /pricing → 6 pages. Below it, the verdict of background judging in the words of Watch, or "Not judged yet". If Sequential cannot read the judgments, this line is left out |
| Problems | JS errors and failed requests, such as "2 JS errors". They count the whole session in your date range, whatever your filters |
| Duration | First matching event to last |
| When | When the session started, such as "3 h ago". Hover it for the exact local time |
| No title | ▶ Replay, or why you cannot play the session now |
The list shows no session id and no event count. The ⋯ menu of a row has Copy session ID, Copy user ID, Show only this user and Open events. Show only this user adds a User ID condition to the filter builder. Click Apply to run it.
- Events that arrived without a session id are not a session. The list never shows them. See Sessions.
- A User ID filter finds the whole person. With the Sequential SDK, PostHog or Mixpanel, it also finds their sessions from before identify. See Users and identity.
- If you turn on both With JS errors and With failed requests, the list shows only sessions that have JS errors and failed requests.
- Mobile sessions never match With JS errors.
Other ways to open a replay
- Watch: Watch from m:ss opens the replay just before the session's key moment, with the Insights tab open.
- Ask: click a result's session id, or Watch from here.
- Users: click a user in the Who column, then click ▶ on one of their sessions.
- Events: click ▶ Replay in the Session column. It shows only when the recording is ready to play. Otherwise the column shows Session ▸, which narrows Events to that session.
- In the player: ‹ and › step to the same user's previous or next recorded session.
Playing and sharing a replay
- The player starts at the beginning, or at the moment that a link points to.
- To jump back or forward 10 seconds, double-click the left or right third of the recording. The playback speed multiplies the jump.
- Skip inactivity fast-forwards through gaps of more than 5 seconds without activity.
- Hover a marker to read it. Click it to jump to half a second before it.
- To open the side panel, you can also click ▤ Events. To open DevTools, you can also click </> DevTools. See DevTools in replays.
Sharing a moment
- Play or seek to the moment.
- Click ⧉ Share or press C. The message "Link copied — starts at m:ss" confirms it.
- Send the link. It opens paused at that moment, with the same side-panel tab and DevTools tab open.
The link opens in the project that your teammate has selected. To make it open your project, add &project= and your project id. See Links that open a project.
Keyboard shortcuts and saved settings
The most used shortcuts:
- Space: play or pause.
- ← and →: jump 5 seconds.
- N and P: step to the next or previous event.
- C: copy a link to the current moment.
- E: open the side panel. D: open DevTools.
The player saves your Skip inactivity setting and your playback speed in your browser.
Timeline markers
The markers show the events your analytics SDKs sent, the clicks and page changes the recorder saw, JavaScript errors and failed requests. They also show frustration signals that the player calculates from the recording:
| Marker | What happened |
|---|---|
| Rage click ×N on "…" | 3 or more clicks within 1 second and 30 pixels |
| Dead click | A click on something that is not a control, after which nothing on the page changed for 1 second |
| Bounced from /page after N s | The person opened a page and went back within 5 seconds |
- Markers that are close together merge into a numbered cluster.
- On the seek bar, shaded stretches are inactivity. Ticks are page changes.
Side panel and header
Events lists the session's events by page.
- Filter it with the chips (Pages, Clicks, Forms, Custom, Identify, Frustration) or with search.
- Click a row to jump there. Click › for its properties and the links View in Events, View user, Seed funnel and Copy link at m:ss.
- A time marked ≈ comes from an SDK that reports whole seconds. It can be up to a second off.
Info shows the user, the session, the start time in UTC, and the active and idle time. ← previous segment links the same user's recording that ended within 30 minutes before this one began.
Insights shows the judge's answers to your project's questions about the session. It also lists key moments that you can click.
- The judge runs when you open the tab. Each run uses the daily allowance for on-demand judging.
- Re-run asks for a fresh answer. You can re-run each session once every 10 minutes. A re-run inside that window shows the saved answer.
- See Session insights.
The header shows the user (or anonymous), the start time, the length, the browser, the operating system and the country.
- policy vN is the version of your recording settings that the session was recorded under.
- A session recorded before those settings were first saved has no policy chip.
- The </> DevTools badge counts exceptions and failed requests.
- Ask your agent hands a prompt about this session, at the current time, to a coding agent on your computer. See Ask your agent below.
- A narrow header. When the buttons do not fit, the header folds them in steps. First the facts after the user name go, such as the start time and the length. Then Share moves into the ⋯ menu as Copy link at the current time. Then DevTools shows only its icon and badge. Then ‹ › move into ⋯ as Previous session of this user and Next session of this user. Then Events shows only its icon and count. Then Ask your agent becomes Ask. Then the user name gets shorter. From 11 October 2026, on a phone the header keeps one row, so the recording keeps its height: Events then moves into ⋯ as Events panel, with its count. The DevTools badge always stays in the header.
- Narrow controls. The controls under the recording fold in the same way. First the Skip inactivity label goes. The switch stays. Then the back and forward buttons get narrower. Their seconds stay. Then the clock puts the length under the current time, so it uses less width. Then the page menu shows only the page number, such as 2/5. Then |◀ and ▶| go. P, N and the timeline markers still step through events. From 11 October 2026, on a phone, Skip inactivity, the speed, Fullscreen and Keyboard shortcuts then move into ⋯ (More playback options). Last, the page menu moves to a row of its own. Play, back and forward always stay.
Ask your agent
Ask your agent is in the replay header, and on an exception or an error-level console line in DevTools. It opens a menu. Each item opens an app on your computer, or ChatGPT in a new browser tab, with a prompt about this session filled in. You review the prompt and send it there. Sequential sends nothing itself.
| Item | What it opens |
|---|---|
| Copy prompt | Nothing: it copies the prompt, for any agent |
| Claude desktop app | A new chat in the Claude desktop app |
| VS Code (Claude Code) | A Claude Code tab in VS Code |
| ChatGPT · web chat; it cannot edit your app | ChatGPT in a new browser tab, with the prompt in the message box, not sent. You must be signed in to ChatGPT. The prompt is in the page address, so your browser sends it to chatgpt.com when the tab opens |
| Cursor | A new chat in Cursor, after Cursor asks you to confirm |
| Set up Sequential in Cursor | Cursor's prompt to install Sequential's MCP server, https://api.usesequential.com/mcp |
- The prompt holds the session id, the time in the session and the page's path. The path has no query or fragment, and ids become
:id, for example/orders/:id/items. - From DevTools, the prompt also holds the error message: the redacted text that DevTools shows, on one line, cut at 200 characters, and marked as user data, not instructions.
- The prompt asks the agent to fetch the rest with Sequential's tools
get_session_fullandlist_sessions. So your agent needs Sequential connected first. Owners and admins see a link to Agents. Other roles see "ask an owner or admin to connect it". See Agent tools. - If the prompt mentions
.env, a token, a secret, a password, an API key, a private key or a credential, the menu has no Cursor item, because Cursor refuses such links. The other items still work. - The menu shows your last choice first. Only your browser keeps that choice.
How mobile replays differ
- Recordings from PostHog's iOS and Android SDKs play in the same player. The header shows a platform badge. We have not tested Android playback with a real app yet.
- Sequential accepts React Native and Flutter recordings. We have not verified them yet.
- Screens show as rows such as "Screen Checkout" if your app names them.
- Touches show as a ring instead of an arrow cursor.
- The Performance tab in DevTools shows "Performance metrics are recorded for websites."
- You set mobile masking in your app's PostHog SDK, not in Sequential.
When the list or player is missing data
- If a replay's Events tab says "No events captured for this session", the session ids of the events and the recording usually do not match.
- On a site that uses only the Sequential SDK, the ‹ and › buttons are not available, even after
identify. - While background judging is off, Watch says why. See Watch: sessions worth your time.
Masking, limits and missing recordings
What the replay shows instead
The recorder masks content on the user's device during recording. So a replay cannot show masked content. Sequential's servers mask attribute values, addresses, input values and DevTools addresses again when a recording arrives.
- Blocked elements show as empty boxes of the same size.
- After the replay period, Latest shows "Expired" in place of ▶ Replay, and the player shows "This recording has expired." In Latest, Watch and the session list of a user, an older session shows a dim "…" ("Checking recording…") from the moment the list appears until its row gets its state. If Sequential cannot read the state, the row can show ▶. Up to about a week later, Sequential removes its index of the recording. The label then reads "No recording".
- Your project's values are under Settings → Projects → your project → Session replay.
Where recordings come from
A recording comes from the web recorder or from PostHog's mobile SDKs. The Sequential SDK starts the web recorder for you.
Masking presets
| Preset | Masks | Blocks |
|---|---|---|
| Strict (the default) | All text, every input and most attribute values. Link and image addresses keep only their domain. The page address keeps its route, with id-like parts masked | Images, SVG, video, audio, iframes and embeds |
| Balanced | Every input, and only the text you mark. Attribute values and the full page address are recorded as they are | Video, audio, iframes and embeds |
- Record canvas is under Masking → Advanced selectors. Ticking it switches masking to Custom. It is off in both Strict and Balanced.
Why a session has no recording
- Recording is off, or recording for that platform is off.
- Sampling left the session out.
- The page is excluded.
- The user left each page before the minimum duration. The default is 2 s.
Limits on long sessions
- A web recording stops when the session passes the size limit. The default is 25 MB before compression, counted across the whole session. On mobile, Sequential refuses the uploads past the limit.
- The length limit (60 minutes by default) is counted from each page load. On a site with several pages, it limits each page, not the whole session.
DevTools error messages
DevTools always keeps error messages from uncaught exceptions and unhandled rejections, redacted, even with message text off.
Where to find the replay period
The replay period shows in the summary line of the Session replay settings page, such as "30 d", and in the line under it, such as "Replays kept · Set by Sequential: 30 days". The organisation sets it for all its projects. See Retention and deletion.
Heatmaps
Heatmaps is under Explore in the left rail. It shows where visitors click and how far they scroll on each page of your website, from a sample of recorded sessions. Below the controls, Page picture shows the page with the clicks drawn on it. Most clicked ranks the elements beside it, or under it when there is little room.
- Open Heatmaps. The page with the most views opens first.
- To pick another page, click Page. The list shows each page with its views, most viewed first. Each page shows its path. The host shows before the path only when it is not the host with the most views. A long path loses its start, not its end. Hold the pointer on a page to see its full address. To find a page, type in Search pages.
- Pick Desktop, Tablet or Mobile. Each button shows the number of sampled page views for that device on this page. The device with the most views opens first.
- Pick Clicks or Scroll. Clicks opens first. Scroll shows how far visitors scroll. See The scroll map below.
- To change the dates, set them and click Apply.
Most clicked lists the 10 most clicked elements on the page. To see all of them, click View as table.
Look at one element. From 11 October 2026, click an element's name in Most clicked or in the table, or click the element on the picture. A panel opens above the list, with the element's name and kind. It shows the element's clicks over the dates, its share of the clicks on this page, its rage clicks and its clicks on something not clickable. Copy anchor path copies the element's place in the page (tags and positions). Sequential has no element text and no CSS selector to show. From 11 October 2026, the panel also shows Clicks per day: one bar for each day with clicks, and a mark on a day with rage clicks. A line under the bars gives the first and last day, the number of days with clicks, and the day with the most rage clicks, such as "Most rage on 5 Oct: 11". A screen reader reads the days as a table. If the days cannot be read, the panel says "The days could not be read right now. The totals above are complete."
From 11 October 2026, when the element has rage clicks, the panel also says how many, and in how many sessions, such as "38 rage clicks in 21 sessions (sampled)." The numbers come from the sampled sessions, as every heatmap number. Sequential keeps the sessions of rage clicks only from 11 October 2026, so when your dates start earlier, the line says "since" the first day, such as "38 rage clicks in 21 sessions since 11 Oct (sampled)." Watch these sessions opens Sessions with only those sessions: a rage click on this element, on this page, on this device, in the heatmap's dates. A note above the list names the element, the page, the device and the dates. The filters of Sessions still apply. Show all sessions removes the condition.
When the page has rage clicks, the panel also says how many sessions had a rage click on this page in the dates, such as "Rage clicks on this page in 21 sessions (all devices and elements)." Watch them opens Sessions with one filter: Event Type = rage_click and Page = the path, on the same event. This finds the sessions of the page on every device, not of one element. Click Close, or the name again, to close the panel. On the picture, a click chooses the smallest clicked element under the pointer. With a keyboard or a screen reader, use the names in the list.
All four roles (owner, admin, member, viewer) can open Heatmaps and see the page picture. Access tokens and agents never get the page picture or element text. From 15 October 2026, an agent with the sessions:explore scope can read heatmap counts with list_heatmap_pages and get_heatmap. The counts include your team. See Limits. For what Sequential keeps, see Heatmap data.
Reading a heatmap
- Each row names the element by its kind and its place on the page, such as "Link in footer", "Button in main · section 2" or "Link in list · item 3". The place is the nearest header, navigation, footer, sidebar, form, main area, dialog or table, and the nearest numbered section or list item. With none of these, the row says "on the page" and the element's place among the elements beside it, such as "Button on the page · 2nd of its group". Two rows never have the same name. When elements share a name, each row adds its place, such as "Link in navigation · 2nd of its group" or "Link in navigation · 2nd in page order". Hold the pointer on a row to see the element's whole path. Sequential never shows the element's text.
- Clicks counts pointer clicks on the element. This includes clicks on parts of it that are not clickable.
- The share is the element's part of all pointer clicks on the page.
- Not clickable counts the clicks on something that is not clickable. The list shows them as "… not clickable".
- Rage clicks are counted apart. Sequential never adds them to Clicks. The list shows them as "… rage".
- The table has the columns Element, Clicks, Share, Rage clicks, Not clickable and Path. Element shows the same readable name as the list. Path is the element's whole place in the page structure. Click View as list to go back.
- A count of 0 reads "none seen".
- Under the list are Sampled page views, Pointer clicks, Keyboard activations (not drawn) and Days. The line below them says how Sequential samples this project's sessions, and "Blocked regions are not recorded."
- Little data. When the page has too few sampled views, a note above the list says "Only … sampled page views. Patterns below about … views are unreliable." With no sampled views, it starts "No sampled page views seen." Read such a page with care, or choose more days.
The page picture
The picture is one visitor's recording of the page: a recent masked recording for that page and device. It takes no dates. Only the heat on it comes from the dates you set. The recording is masked as the project's replay settings say, so the picture shows what a replay of that session shows. See The page picture.
- Layers. From 11 October 2026, Clicks, Not clickable and Rage are all on when the page opens. Each button shows its total on the page, such as "Rage 164". Click a button to turn its layer off or on. Not clickable and Rage show only when the page has clicks of that kind. When a layer is off, the page address lists the layers that are on, so a shared link shows the same layers. A layer change does not load the data again.
- Dim page. This button is on by default. It lays a plain veil over the recorded page, so the page fades behind the heat. Click it to see the page at full strength.
- Colour and size. Each layer is one colour. A spot with more clicks is a stronger shade of that colour and a larger blob. The shades follow the recorded page's own lightness, not the app's theme: darker on a light page, lighter on a dark page.
- Legend. Each layer that is on has a legend of five steps, from "fewer" to "more … per spot", such as "more clicks per spot". Each step names a number of clicks per spot, such as
1–3. The last step ends in+. A step that no whole number falls in shows "–". Each swatch is drawn on the picture's own background, so it shows the same colour as the picture. - Not placed. A line under the picture says "Not placed: … of clicks (elements that are not in this picture)." These clicks are on elements that the picture does not show. Above 25 %, a note above the picture says "Not placed: … of clicks. The page has changed since this picture was taken; a shorter, more recent date range matches it better."
- Nearby match. "Placed by a nearby structure match (not the exact path): … of clicks." For these clicks, the end of the element's path matched exactly one element in the picture, but the whole path did not.
- Age. "Picture from" a date and time, then "(the visitor's clock)". The time comes from the visitor's device. From 11 October 2026, the line also gives the width of the recorded page, such as "· 1,440 px wide".
- Sample. "Based on … sampled page views and … pointer clicks", the dates, and "Pointer clicks only: keyboard activations are not drawn."
- Elements not in the picture. Most clicked says which elements the picture does not show. In the list, "not in this picture" follows the share. In the table, Element shows the readable name, then "· not in this picture". Path still shows the whole path.
- Point at an element. Move the pointer over a row in Most clicked, or go to it with the Tab key. The picture outlines that element and scrolls to it. This works in the list and in the table, once the picture is shown.
While the picture is prepared
The ranked list does not wait for the picture. The picture area shows one of these messages.
| Message | What it means |
|---|---|
| "Asking for the page picture…" | The page is asking for the picture |
| "Preparing the page picture…" | Sequential is building the picture (queued or building). This usually takes about 30 seconds. The page asks again every few seconds |
| "The page picture is still being prepared. The ranked list is complete." | The picture was still being prepared after about 2 minutes, and the page stopped asking. Click Try again |
| "This page's newest recording is still being processed; the picture will be ready by" a time (HH:MM) | The recording is not ready yet. The page asks once more at that time. If it is still not ready, click Check again |
| "No recording of this page is available (expired, or still processing). Ranked elements are shown without a picture." | No recording to take a picture from. The list shows without a picture |
| "A recording exists, but its picture would be too large to draw. Ranked elements are shown without a picture." | The picture is too large. Sequential keeps this answer for one hour and builds no new picture in that hour. The list shows without a picture |
| "The picture could not be prepared." | The build failed. Click Try again. The page also tries again on its own, up to 3 times: "Also trying again on its own shortly." |
| "Page pictures aren't available right now. The ranked list is complete." | No builder service runs, so nothing can build the picture. Sequential queues nothing. The page asks again on its own every 30 seconds, up to 3 times. Then it shows Check again |
| "Can't reach the recordings right now." | Sequential could not read its stores. Click Retry. The page also tries again on its own, up to 3 times: "Trying again on its own in a moment." |
| "Heatmaps are off for this project, so there is no page picture." | Heatmap data is off |
| "The page picture could not be drawn. The ranked list is complete." | Your browser could not draw the picture. Click Try again |
| "Couldn't load the page picture" | Loading the picture failed for another reason. The reason follows the title. Click Try again |
How a picture is built. A separate builder service builds each picture. A request goes from queued to building to the picture, in about 30 seconds. Requests for the same page and device share one build. Where no builder service runs, the area shows "Page pictures aren't available right now. The ranked list is complete." The ranked list and the counts work as usual.
The scroll map
Click Scroll to see how far visitors scroll down the page. The scroll map counts only the sampled views that scrolled. The Scroll depth card takes the place of Most clicked, beside the picture or under it. The card does not wait for the picture.
- Key numbers. Half of the visits saw a depth, such as "45 % of the page". If half of the views did not see all of the first 5 %, it reads "less than 5 % of the page". Saw the middle of the page is the share that saw the page down to 50 %. Views that scrolled is the number of sampled views that scrolled.
- Depth profile. 20 rows, one for each 5 % of the page, top first, from
0–5 %to95–100 %. Each row has a bar and the share of the views that scrolled which saw all of that part of the page. A line under a row marks 25, 50 and 75 %. A share of 0 reads "none seen". - View as table. It shows the same rows as a table, with the columns Part of the page, Saw it and Views. Click View as profile to go back.
- Under the card are Sampled page views and Days. The line below them says how Sequential samples this project's sessions, then "Blocked regions are not recorded. Scroll depth is measured on the page itself, not inside scrolling containers."
Reading the scroll map
- Bands. The picture is cut into bands, each 5 % of the page. A band's colour is the share of the views that scrolled which saw all of the band. A stronger shade means a larger share. A band that no view reached has no colour. The colour is light, so the page shows through it. On a light page it is faint, so read the ruler or the legend.
- Depth ruler. A column 30 px wide, to the left of the picture, shows the same bands at full strength, in the legend's colours. Its labels are 0 %, 25 %, 50 %, 75 % and 100 %. The ruler is never drawn over the page.
- Lines. Lines across the page mark 25, 50 and 75 % of the page. Each has a label with the share that saw it, such as "50 % of the page · 64 % saw it". A dashed line marks the fold, "Fold: the recorded screen's height". It shows only when Sequential knows the height of the recorded screen and the page is taller than it.
- Legend. Five steps, "up to 20 %", "20–40 %", "40–60 %", "60–80 %" and "80–100 %", then "share of visits that reached this depth".
- Dim page. This button is on by default, as on the click map. The scroll map has no layer buttons.
- Under the picture. A line says what the bands, the ruler and the lines mean. Then come the picture's age, and "Based on … sampled views that scrolled, of … sampled page views", with the dates.
- Point at a part of the page. Move the pointer over a row in Scroll depth, or go to it with the Tab key. The picture outlines that band and scrolls to it. This works in the profile and in the table, once the picture is shown.
- Little data. When few sampled views of the page scrolled, a note above the picture says "Only … sampled views of this page scrolled. Depth patterns below about … are unreliable." The limit is the same as for clicks, but it counts the views that scrolled.
- No depth data. When no sampled view of the page scrolled, the page shows "No scroll depth for this page" and "This page does not scroll, or it scrolls inside a container, so there is no depth data." It shows no picture. The totals add Views that scrolled.
- Picture messages. The picture area shows the same messages as for clicks. See While the picture is prepared above. Where a message names the ranked list, it names the Scroll depth card, such as "Page pictures aren't available right now. The Scroll depth card is complete." With no picture, it ends "The depth of every part of the page is in the Scroll depth card."
- Loading and errors. While the data loads, the page shows "Loading scroll depth…". If it fails, it shows "Couldn't load this page's scroll depth". Click Try again.
When Heatmaps shows no clicks
| Message | What it means |
|---|---|
| "No heat in this date range" | No page has sampled views in these dates. The project can have heat in other dates. The page adds: "Try a wider date range." and "Heatmaps use a sample of recorded sessions, and a recording appears here within about 6 minutes of the session ending." |
| "No heat for this page in this date range" | The same, for this page and device |
| "Heatmaps are off for" and the project name | Heatmap data is off for the project, or Recording or Web is off. Owners and admins see Turn on in settings. It opens the Heatmaps switch in the project's Session replay settings. See Heatmap data. If Recording or Web is off, turn that on first: the switch stays disabled until then. Other roles see "Ask an owner or admin to turn them on in the project's Session replay settings." |
| "Couldn't load heatmaps" | Sequential could not read the data, or too many heatmap reads were running at once. Click Try again |
| "Heatmaps are for people who can watch replays" | The server refused access. All four roles (owner, admin, member, viewer) can watch replays today |
Not there yet
- Keyboard activations are counted but not drawn.
- Mobile apps send no heatmap data.