Catchpoint RUM Tags — Publisher Consent Guide

Prev Next

To comply with privacy regulations such as GDPR, ePrivacy, and UK PECR, publishers may need to obtain explicit user consent before using cookies or local storage for analytics purposes.

Catchpoint RUM Tags now support this requirement by allowing you to pass the user's consent state — either 'granted' or 'denied' — so the tag can adjust its behavior accordingly. This implementation is designed to preserve compatibility with existing deployments while enabling future enhancements that will simplify integration.

How to Set Consent?

To pass the consent state you must add the script block below to our existing RUM tag either via your Consent Management Platform (CMP) or Tag Manager. To ensure proper behavior across all environments and different JavaScript conditions you must pass the setting in two different lines in the the code.

<!-- Tag from Catchpoint Portal -->
<script defer src='https://g.3gl.net/jp/NNNN/latest/InitialLoadScript.js'></script>

<!-- Tag for setting consent -->
<script language="javascript" type="text/javascript">
  if (window.CPRUM) {
    window.CPRUM('consentv2', {
      analytics_storage: 'granted' // set if granted or 'denied'
    });
  } else {
    window.addEventListener('GlimpseLoaded', () => {
      window.CPRUM('consentv2', {
        analytic_sstorage: 'granted' // set if granted or 'denied'
      });
    });
  }
  </script>
  • Replace 'granted' or 'denied' based on the user's actual consent.
  • This dual-path approach ensures the tag receives consent even if window.CPRUM is not immediately available due to JavaScript defer behavior

Default Behavior: If no consent is passed, Catchpoint RUM Tags will assume 'granted' after ~500 ms. This logic was done to not break existing customers and tags. We plan to announce a date by which customers need to implement consent, in order to change this logic without breaking existing functionality.

What Happens in Each Mode?

If Consent is Granted

  • RUM behaves normally.
  • Uses localStorage (or cookies as fallback) to store user/session IDs.
  • Enables tracking across page loads and sessions.
  • Sampling, session rules, and SPA behavior work as expected.

If Consent is Denied

  • No cookies or localStorage — no persistent storage of any kind.
  • Any previously stored data in cookies or localstorage is deleted.
  • Each page load is treated as a new session.
  • In SPAs, session data is kept in memory only until the tab reloads.
  • Sampling applies per pageview (not across sessions).

What This Means for Your Data?

When analytics_storage: 'denied' is used, the following changes will occur.

Sampling- Applies per pageview, not across sessions.
Sessions - Each pageview appears as a single session in records and waterfalls.

Impact on your analytics metrics:

Metric Impact
Pageviews per Visit Always 1 for denied users — each page load is treated as a separate visit. Total across all users will decrease.
Unique Visits Will increase — every pageview counts as a new visit for denied users.
Pages Per Visit Will decrease — visits consist of only one pageview for denied users.
Bounce Will increase — every pageview is treated as a bounce for denied users.
Bounce Rate Will increase — all visits are single-page and count as bounces for denied users.

Note: We have planned in the roadmap to add a filter to RUM on “Consent” which will allow users to just focus on the users that granted consent.


Setting Consent via Google Tag Manager (GTM)

Most CMPs push the user's consent state into GTM via variables or dataLayer events. Here's how to pass that state to Catchpoint RUM Tags:

Step 1: Create a GTM Variable

  • Go to Variables → New → User-Defined Variable → Data Layer Variable
  • Name it consentAnalytics
  • Set Data Layer Variable Name to match your CMP’s output (e.g., analytics_consent)
  • Ensure it resolves to 'granted' or 'denied'

Step 2: Create a Custom HTML Tag

  • Go to Tags → New → Custom HTML
  • Paste the tag from your RUM app configured on the Catchpoint portal along with the code and example is as below.
<!-- Tag from the Catchpoint Portal -->
<script defer src='https://g.3gl.net/jp/NNNN/latest/InitialLoadScript.js'></script>
 
<!-- Tag for setting consent -->
<script language="javascript" type="text/javascript">
  if (window.CPRUM) {
    window.CPRUM('consentv2', {
      analytics_storage: {{consentAnalytics}}
    });
  } else {
    window.addEventListener('GlimpseLoaded', () => {
      window.CPRUM('consentv2', {
        analytics_storage: {{consentAnalytics}}
      });
    });
  }
</script>

Replace {{consentAnalytics}} with the GTM variable created in Step 1.

Step 3: Trigger the Tag

  • Use a trigger that fires as soon as the consent state is known.
  • If your CMP pushes a consent_update event, use that.
  • Alternatively, use Page View → DOM Ready if consent is set synchronously.

Step 4: Test

  • Use GTM Preview Mode
  • Simulate both consent states (accept vs reject)
  • Confirm in the browser console:

window.CPRUM('consentv2', { analytics_storage: 'granted' });
or
window.CPRUM('consentv2', { analytics_storage: 'denied' });

Key Takeaways

  • Default: If no consent is passed, RUM assumes 'granted' after 500 ms.
  • Control: Use your CMP (via GTM or direct code) to explicitly pass 'denied' if the user opts out.
  • Impact: 'denied' mode disables persistent tracking and collapses sessions to single-page views, affecting key metrics like bounce rate and visit counts.
  • Billing: There will be no impact on your count of pageviews and billing, they will continue to work as today. Unlike other RUM vendors we do not price on count of sessions, which would be drastically impacted by denied consent.