Document purpose and minimize scope
Begin with the decision replay should support. “Understand all customer behavior” is not a useful purpose. A bounded purpose names the question, affected workflow, eligible population, comparison, intended reviewers, retention, outputs, owner, and stop condition.
| Field | Question | Example |
|---|---|---|
| Decision | What action could evidence change? | Whether to revise Reporting setup |
| Population | Whose Visits are relevant? | Newly invited administrators in one workflow |
| Routes and states | Where may recording start and stop? | Allowlisted Reporting setup routes only |
| Data layers | Which DOM, interaction, identity, network, console, and diagnostic fields are required? | DOM state/clicks; console and network bodies disabled |
| Access | Which named roles need playback? | Assigned researcher and engineer |
| Retention | How long is detailed evidence needed? | Investigation period plus short validation window |
| Review trigger | What invalidates the assessment? | Route redesign, SDK/config change, or purpose completion |
Sampling reduces total volume, but it does not make an individual recording safe. A sampled replay can still contain a password, support message, billing data, token, customer name, or private document. Apply the same per-record controls.
Prefer structured analytics when the question only needs counts, sequence events, completion, or error categories. Use replay when visible interface evidence is necessary and proportional to the purpose.
Masking is one stage of seven
1
Purpose
Decision, population, review trigger — written before capture is enabled
2
Capture scope
Allowlisted routes and states; everything else never starts
3
Masking
Values transformed before the payload leaves the browser
the stage most teams stop at
4
Storage
Private chunks, metadata, index, caches, exports, backups
5
Access
Server-side authorization on every search and view
6
Retention
Set from the purpose, automated expiry, drift monitored
7
Deletion
Chunks, index rows, clips, replicas, versions, backups
Applies across all seven
Sampling is not a control. A sampled replay can still hold a password, support message, token, customer name or private document. Per-record controls apply to every recording that survives sampling.
Prefer structured analytics when the question needs only counts, sequences, completion or error categories. Reach for replay when visible interface evidence is necessary and proportional.
Inventory data and choose the right control
Inspect the recorder's emitted payload, ingestion transformations, stored chunks, metadata database, search index, player, exports, clips, logs, caches, analytics integrations, and backups. List direct and indirect identifiers, visible content, attributes, URLs, input changes, files, canvas/media, console/network fields, errors, performance data, and custom plugins.
| Control | Effect | Use for | Limit |
|---|---|---|---|
| Allowlist | Recording is enabled only on approved routes/states/populations | Narrow investigations | Must handle SPA transitions and dynamic states |
| Exclude | Recorder stops or never starts | Billing, credentials, support, authentication, impersonation | Test transitions before protected content renders |
| Block | Element/subtree is omitted or replaced | Tables, editors, previews, documents, rich content | Dynamic components may escape selectors |
| Mask | Value is transformed while interaction may remain | Approved text or inputs where action evidence matters | Copies may appear in attributes, URLs, logs, or canvas |
| Drop/transform metadata | Unsafe URL, identifier, property, or diagnostic field is removed/normalized | Routes, query strings, identity, events | Separate from visual masking |
Start conservatively. Exclude passwords, tokens, API keys, payment data, authentication, impersonation, support messages, private documents, health/financial data, and other high-risk content unless a reviewed necessity and stronger control exists. Password-field defaults are not enough; ordinary text inputs, search, filenames, validation errors, copied content, and temporary reveal states can carry secrets.
Start at the strong end of the scale, not the permissive one
Allow
Recorded as rendered
Limit Only where nothing sensitive can render
Mask
Value transformed, interaction may remain
Limit Copies escape into attributes, URLs, logs and canvas
Block
Element or subtree omitted
Limit Dynamic components escape selectors
Exclude
Recorder never starts, or stops
Limit Test the transition before protected content renders
Separate systems — each its own opt-in, off by default
Metadata controls are not visual masking. Drop query strings and fragments by default; normalize dynamic paths; allowlist only the parameters the investigation needs.
Unsafe
/accounts/acme-corp/reports/8392?customer=confidential-name
Stored
/accounts/:account_id/reports/:report_id
Password-field defaults are not enough. Ordinary text inputs, search fields, filenames, validation errors, copied content and temporary reveal states all carry secrets.
Protect URLs, identity, and diagnostic layers separately
URLs can expose tenant names, email addresses, search terms, report IDs, tokens, filenames, and query parameters even when the page body is masked. Normalize dynamic paths and drop query strings/fragments by default. Allowlist only parameters required for the investigation.
Unsafe:
/accounts/acme-corp/reports/8392?customer=confidential-name
Safer stored route:
/accounts/:account_id/reports/:report_idAttach the minimum identity needed. Stable pseudonymous internal IDs can connect a Visit to a Company and User without storing names or emails in the replay. They are pseudonyms, not anonymity, when lookup is possible. Protect the lookup service and audit identified access.
Treat each diagnostic layer as a separate opt-in system:
- Console: objects, tokens, customer records, and developer-only text can leak through logs.
- Network: URLs, headers, bodies, GraphQL variables/results, and responses can contain extensive sensitive data.
- Errors: messages and stack traces can include values, file paths, or tenant context.
- Performance: resources and spans can expose endpoints and identifiers.
- Canvas/media/plugins: visual or custom data may bypass ordinary DOM masking.
Keep these disabled unless the purpose requires them and field-level allowlisting/filtering has been tested. A safe structured error category often supplies enough evidence without raw payloads.
Apply least privilege, short retention, and complete deletion
Authorize every replay search and view server-side by project and role. Use named groups, SSO/MFA where appropriate, time-limited elevated access, audit logs, periodic reviews, and separation between product research, engineering, support, and administration. Direct object-storage URLs must not bypass application authorization.
Set retention from the purpose, not a universal default. Detailed replay usually warrants shorter retention than lower-context structured aggregates. Automate expiry, monitor retention drift, and document archives, replicas, versions, exports, and backups.
Build deletion before launch
Build deletion before launch. Support lookup by User, Company, Visit, project, and time range as needed. Delete or make inaccessible:
- recording chunks and manifests;
- metadata and search-index rows;
- caches, generated clips, downloads, and exports;
- derived artifacts that can reconstruct the Visit;
- replicas and object versions;
- backup data under a documented expiry/restore-suppression process.
Test that a deleted recording cannot be found through any supported lookup, direct object reference, restored index, or backup restoration. Document legal/security hold behavior separately.
Treat legal and vendor review as implementation work
This guide is technical and organizational guidance, not legal advice. Qualified counsel should assess lawful basis, consent and storage/access rules, transparency, employee monitoring, data-subject rights, processor/controller roles, transfers, contracts, and sector requirements for the actual jurisdictions and deployment.
Do not assume “B2B” removes individual privacy obligations. Replays concern people using the product, including customer employees and administrators. Notice should describe actual collection and purposes in understandable language.
Review the operating model
For a managed vendor, verify recorder behavior, masking defaults, regional data flow, subprocessors, encryption, access, SSO/MFA, audit logs, retention, deletion, backups, exports, incident terms, support access, and contractual controls. Test claims against your configuration.
For self-hosting, verify collection credentials, private storage, tenant isolation, dependencies, vulnerabilities, secrets, backups, restoration, monitoring, administrator access, incident response, and deletion. Self-hosting changes who owns the risk; it does not remove it.
Test stored replay and prepare for incidents
Test realistic production-like pages and state transitions, including dynamically rendered text, validation errors, tables, modals, portals, shadow DOM, same/cross-origin iframes, canvas, rich editors, uploaded filenames, route changes, SPA account switching, mobile layouts, localization, and temporary reveal states.
- Capture a test Visit with seeded sensitive canaries.
- Inspect the network payload leaving the browser.
- Inspect ingestion logs and transformations.
- Inspect stored chunks, metadata, index, and exports.
- Play the replay and search by every identifier.
- Verify blocked/excluded routes during SPA navigation.
- Run deletion and restore tests.
- Repeat after SDK, selector, route, component, or plugin changes.
Monitor capture volume, newly observed routes, masking/blocking failures, unsafe URL patterns, console/network enablement, new attributes, access anomalies, retention drift, deletion backlog, export creation, and SDK/config versions. Treat privacy rules as production code with owners, tests, review, and rollback.
Prepare an accidental-capture playbook: stop or narrow collection, preserve only necessary incident evidence, block access, identify affected projects/Visits/fields, delete or quarantine data, assess notifications with legal/security owners, fix and validate controls, document the incident, and monitor recurrence.
Worked B2B example and production checklist
Fictional illustration: AtlasDesk sees a measured decline in Reporting setup completion for newly invited account administrators. Its purpose is to compare successful and unsuccessful Reporting setup Visits for visible interface states—not to record all customer behavior.
| Area | Decision | Implementation |
|---|---|---|
| Reporting | Allowlisted for the investigation | Normalize routes; mask report names; block data cells and export previews |
| User Management | Limited onboarding capture | Mask names/emails; block tables/drawers; exclude token/reset/impersonation states |
| Billing | Excluded | Stop before route entry; retain only safe structured events if needed |
| API Keys | Excluded entirely | Never record generate, reveal, copy, rotate, or delete states |
| Support Messages | Excluded or fully blocked | No bodies, editors, filenames, attachments, previews, or notes |
AtlasDesk uses pseudonymous User and Company IDs, disables console and network bodies, restricts access to assigned researchers/engineers, applies an illustrative 30-day investigation retention, and tests deletion across storage, indexes, clips, exports, and backups. The 30 days is not a universal recommendation.
Fictional AtlasDesk: two areas in the pipeline, three kept out
Inside the replay pipeline
Reporting
allowlisted for this investigation
User Management
limited onboarding capture
Outside the replay pipeline
Billing
excluded
Recording stops before route entry. Safe structured events only, if needed.
API Keys
excluded entirely
Never record generate, reveal, copy, rotate or delete states.
Support Messages
excluded or fully blocked
No bodies, editors, filenames, attachments, previews or notes.
Shared controls, applied to everything that is recorded
Identity
Pseudonymous User & Company IDs
Telemetry
Console and network bodies off
Access
Assigned researcher and engineer only
Retention
30 days illustrative, not a recommendation
Deletion tested across
storage · indexes · clips · exports · backups
Pseudonymous is not anonymous: while lookup is possible, the lookup service needs protection and identified access needs an audit trail.
Production privacy checklist
- Purpose, owner, decision, population, and stop condition documented
- Routes, states, fields, identifiers, and diagnostics inventoried
- Allowlist and exclusions tested across navigation
- Passwords, tokens, payment, credentials, support, and private documents excluded
- Dynamic text, inputs, attributes, canvas, iframes, editors, filenames, and errors tested
- URLs normalized; query strings/fragments dropped unless approved
- Console/network/performance/plugins reviewed separately
- Identity minimized and lookup protected
- Server-side authorization, least privilege, audit logs, and access review enabled
- Purpose-based retention automated and monitored
- Deletion verified across storage, index, cache, clips, exports, versions, and backups
- Legal, contract, transfer, notice, and worker-monitoring review completed
- Stored payload and player tested after relevant releases
- Regression monitoring and accidental-capture response exercised
How Hymetry approaches replay privacy
Hymetry connects Visits with Pages, Companies, and Users while providing privacy-control context for replay. Teams should still configure route scope, text/input handling, identity, retention, access, and deletion for their deployment and verify the emitted and stored data.
The open-source repository makes current tracker and filtering behavior inspectable. Inspect the exact version deployed; repository availability is not proof that a configuration meets a legal or organizational requirement.
Frequently asked questions
Is session replay GDPR compliant?
No tool is compliant in the abstract. Compliance depends on purpose, necessity, lawful basis, transparency, scope, security, rights handling, contracts, transfers, retention, and the actual implementation. Seek legal advice.
Does replay always require consent?
The answer depends on jurisdictions, storage/access technologies, purpose, exemptions, and implementation. Treat it as a legal-review question, not a product default.
Is masking every input enough?
No. Sensitive data can appear in text, attributes, URLs, filenames, console/network fields, canvas, metadata, indexes, exports, and temporary states.
Should B2B SaaS identify users in replay?
Only when the purpose requires it. Prefer stable pseudonymous IDs, protect lookup, limit access, and avoid names/emails in replay payloads.
How long should replay be retained?
Only as long as the documented purpose requires, subject to legal and contractual review. Detailed replay usually needs less retention than aggregate analytics.
Is self-hosted replay more private?
Not automatically. It changes infrastructure control but leaves collection, access, security, retention, deletion, backups, and incident responsibilities with the team.
How should masking be tested?
Seed realistic sensitive values, inspect browser payloads, stored chunks/metadata/indexes/exports, play the recording, search identifiers, test deletion, and repeat after changes.
What should never be recorded?
Start by excluding passwords, tokens, API keys, payment data, credentials, authentication/reset/impersonation states, and other high-risk content unless exceptional reviewed requirements say otherwise.
Sources
Source status reviewed . Sources include binding legislation, regulator guidance, a nonbinding draft, voluntary frameworks, security recommendations, technical documentation, vendor examples, and Hymetry references. Vendor examples are not endorsements or proof of equivalent behavior elsewhere.
Law and regulator guidance
- EU General Data Protection Regulation
- EDPB data protection by design/default
- EDPB consent guidelines
- UK ICO data protection by design/default
- UK ICO data minimisation
- UK ICO storage limitation
- UK ICO pseudonymisation
- UK ICO monitoring workers
- CNIL closed session-replay consultation
- CNIL nonbinding draft session-replay recommendation
Privacy, security, and incident frameworks
Replay, browser, and vendor implementation examples
Hymetry product context
Additional references from the original article
- ICO: What Are The Exceptions
- EDPB: Edpb Guidelines 201904 Dataprotection By Design And By Default V2.0 En
- ICO: Right To Be Informed
- ICO: About This Guidance
- ICO: Data Protection And Monitoring Workers
- ICO: What Needs To Be Included In The Contract
- ICO: A Guide To Data Security
- DOI: NIST.CSWP.01162020
- NIST: 800 63 4
- OWASP: Logging Vocabulary Cheat Sheet
- OWASP: Session Management Cheat Sheet
- OWASP: Multifactor Authentication Cheat Sheet
- GitHub: Plugin Api
- MDN: Location
- MDN: Data *
- MDN: Iframe
- MDN: To Data URL
- MDN: Clipboard API
- MDN: Paste Event
- docs.sentry.io: Configuration
- docs.datadoghq.com: Real User Monitoring





