Privacy Controls
Adora takes privacy seriously and provides you with controls to allow or block what is captured in the end user’s browser. There are three primary privacy control features to manage data capture: masking, blocking, and URL management.
By default, the Adora snippet does the following:
- Masks all input fields, except for those with the CSS class
adora-unmask
. - Masks all HTML elements with the CSS class
adora-mask
. - Blocks all HTML elements with the CSS class
adora-block
. - Captures data only on pages where the snippet is installed, or where the URL is explicitly allowlisted. It also respects URL blocklists.
What does Adora capture?
When an end user’s browser loads with the Adora JavaScript snippet enabled, Adora begins capturing the HTML and CSS of the page. For example, consider the following page:
Adora’s snippet takes a snapshot of the page’s HTML, inlines any CSS, and removes JavaScript. The following is an example of the serialized HTML tree:
If the page changes—e.g., a button is clicked or JavaScript modifies the DOM—the changes are captured and sent to Adora’s servers using the MutationObserver API. This example shows incremental changes:
No screenshots or images are captured during this process. Only the changelog of HTML and CSS is sent, ensuring that unwanted data is filtered out on the client side before being sent to Adora.
Screenshots and recordings are generated by replaying the captured event data in a secure headless browser within Adora’s network. HTML and CSS changes are applied incrementally to a controlled web page, with specific events marked as screenshots.
Key privacy controls
Masking
Masking replaces text content with * characters, allowing text structure to remain visible while obscuring specific values. For example:
From a data capture perspective, we replace the textContent value of the element before it is sent to our servers.
To mask an element, add the adora-mask
CSS class to the HTML element. For example:
Results in:
If you prefer to use custom class names, contact us.
Masking all content
You can configure Adora to mask all content by default, allowing you to opt in to unmasking specific elements. This is useful for securing sensitive data, such as in health tech applications. To enable this feature, contact us.
With default masking, you can manually unmask elements by adding the adora-unmask
CSS class.
Unmasking
Unmasking allows you to see user input, which can be helpful for support request fields or search boxes. Apply the adora-unmask
CSS class to unmask input fields. For example:
Results in:
Blocking
Blocking replaces content with an empty transparent box while preserving the original spacing. This is useful for removing entire images or sections from recordings. Add the adora-block
CSS class to an element to block its content. For example:
Results in:
Examples of blocking an image:
If you wish to use your own class name, contact us.
URL Management
Adora offers both automatic and opt-in URL management for greater control of captured data. To manage URL controls for your organization, contact us.
Controlling What URLs Adora Captures
By default, Adora captures all URLs where the snippet is installed. To prevent Adora from capturing specific URLs, you can:
- Avoid adding the script to those pages (e.g., using rules in Google Tag Manager or your codebase).
- Install the snippet on all pages but configure a blocklist or allowlist for URLs. This is especially useful for single-page applications (SPAs) with dynamic routing, where managing snippet installation may be more complex.
Allowlists and blocklists use regex patterns. For instance, you could configure Adora to capture all pages except those matching /private-section/*
. When the Adora snippet loads, it checks with the server for blocked and allowed URLs. If the current URL matches a blocked pattern, data capture stops. When the URL matches an allowed pattern (default: all URLs), data capture resumes.
Redacting Path Data in URLs
URL aggregation is a key feature of Adora that simplifies your workflow by grouping similar paths. For example, URLs like /page/uuid1
, /page/uuid2
, and /page/uuid3
are aggregated into /page/*
in the UI. By default, this aggregation occurs server-side, meaning the full path (e.g., /page/uuid1
) is sent to Adora.
If sending full paths is not desirable—e.g., when paths include sensitive data like uuid1
—you can define client-side grouping rules using regex patterns. These rules allow Adora to strip or group paths before they are sent to the server. For example, you could provide the rule /page/*
to ensure all such URLs are captured as /page/*
.
Query Parameters
By default, Adora removes all query parameters to minimize the risk of unintentionally capturing sensitive information, such as authentication tokens. This default behavior provides peace of mind out of the box.
However, there are scenarios where query parameters are essential for differentiating steps within the same page. For example, a signup process might use /signup?step=1
. By default, Adora would treat all such pages as /signup
. To distinguish between steps, you can explicitly allow specific query parameters, such as step
, to be captured.