- The URL. The player shows it and the timeline lists it. Query strings carry auth tokens, emails, and user IDs, and no amount of text masking touches them.
- Network payloads. Request and response bodies and headers, if you've turned network capture on. One callback covers both these and the URL.
- Canvas. If you record canvas, you're recording pixels. No selector reaches inside one.
- Element attributes. A masked element can still ship a
title, analt, or avaluecarrying the thing you masked. Masking attributes costs replay fidelity, so it's off by default.
Protecting user privacy
Session Replay gives you insights into user behavior, but it can be invasive if misconfigured.
Here are the important privacy controls you should know for each platform, but don't sweat the implementation details, there's a skill you can copy at the end of the guide.
Mask first, allow explicitly
If a page could contain sensitive data, mask all text, then unmask safe content explicitly.
You should never allow captures by default. Trying to mask fields individually becomes a dangerous game of whack-a-mole. You'll only notice when you watch a replay with private user information, which is too late.
Where each platform starts
Each SDK has different default masking behavior and supports different masking rules.
| Platform | Masked out of the box | Can you unmask individual elements? |
|---|---|---|
| Web | Inputs masked, all other text recorded as it appears | Yes, but through a callback rather than a selector |
| Android | Text and images masked, recorded as a wireframe | Yes, and revealing beats masking |
| iOS | Text and images masked, recorded as a wireframe | Yes, and revealing beats masking |
| React Native | Text, inputs, and images masked, always a screenshot | No – only an app-wide default |
| Flutter | Text and images masked, always a screenshot | No – only an app-wide default |
Blocking is not masking
Masking asterisks the text and keeps the layout. Blocking replaces the element with a blank box, and also stops autocapture events firing from inside it – so you lose the clicks as well as the pixels.Mask unless you need the thing gone completely.
Blindspots
Mask every sensitive screen and you've covered what's visible. There are four things that still go out regardless of masking:
Take this skill with you
Pass it to your agent and implement masking before capturing session replays in production Fig. 1. Mask everything by default, then, based on what you need to see, reveal fields and components individually.