Skip to main content

Enhanced Consent

This plugin is the recommended way to track marketing consent events on your website. Functions, usage and a complete setup journey is showcased on the Consent Tracking for Marketing accelerator.

Installation

  • npm install @snowplow/browser-plugin-enhanced-consent
  • yarn add @snowplow/browser-plugin-enhanced-consent
  • pnpm add @snowplow/browser-plugin-enhanced-consent
note

The plugin is available since version 3.8 of the tracker.

Initialization

import { newTracker } from '@snowplow/browser-tracker';
import { EnhancedConsentPlugin } from '@snowplow/browser-plugin-enhanced-consent';

newTracker('sp1', '{{collector_url}}', {
appId: 'my-app-id',
plugins: [ EnhancedConsentPlugin() ],
});

Functions

APIUsed for:
trackConsentAllowTrack an acceptance of user consent.
trackConsentSelectedTrack a specific selection of consented scopes.
trackConsentPendingTrack the unconfirmed selection about user consent.
trackConsentImplicitTrack the implicit consent on user consent preferences.
trackConsentDenyTrack a denial of user consent.
trackConsentExpiredTrack the expiration of a consent selection.
trackConsentWithdrawnTrack the withdrawal of user consent.
trackCmpVisibleTrack the render time of a CMP banner.

Usage

trackConsentAllow

To track the complete acceptance of a user consent prompt, you can use the trackConsentAllow method with the following attributes:

import { trackConsentAllow } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentAllow({
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackConsentSelected

To track the specific selection of scopes of a user consent preferences, you can use the trackConsentSelected method with the following attributes:

import { trackConsentSelected } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentSelected({
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackConsentPending

Some consent management platform installations, allow the user to take website actions or/and navigating to other pages without accepting the consent prompt. To track the unconfirmed selection of user consent, you can use the trackConsentPending method with the following attributes:

import { trackConsentPending } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentPending({
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackConsentImplicit

Some consent management platforms have a configuration which allows the setting of consent implicitly after a set of user interactions like clicks, scroll etc. To track the implicit selection of a user consent, you can use the trackConsentImplicit method with the following attributes:

import { trackConsentImplicit } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentImplicit({
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackConsentDeny

To track the complete denial of a user consent, you can use the trackConsentDeny method with the following attributes:

import { trackConsentDeny } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentDeny({
consentScopes: ["necessary"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackConsentExpired

To track the expiration of a user consent, you can use the trackConsentExpired method with the following attributes:

import { trackConsentExpired } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentExpired({
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackConsentWithdrawn

To track the withdrawal of a user consent, you can use the trackConsentWithdrawn method with the following attributes:

import { trackConsentWithdrawn } from "@snowplow/browser-plugin-enhanced-consent";

trackConsentWithdrawn({
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});

trackCmpVisible

Consent management platform banners are an important part of a website’s first impression and performance. Snowplow provides a way to track what we call elapsedTime, which is the timestamp of the consent management platform banner becoming visible on the user’s screen.

import { trackCmpVisible } from "@snowplow/browser-plugin-enhanced-consent";

trackCmpVisible({
/* Using the performance.now API to retrieve the elapsed time from the page navigation. */
elapsedTime: performance.now(),
});

Entities

Below is main entity used for tracking consent in the Snowplow Enhanced Consent implementation.

An consent entity can have the following attributes:

attributetypedescriptionrequired
basisForProcessingstringGDPR lawful basis for data collection & processing.
consentUrlstringURI of the privacy policy related document.
consentVersionstringVersion of the privacy policy related document.
consentScopesstring[]The scopes allowed after the user finalized his selection of consent preferences. E.g ['analytics', 'functional', 'advertisement'].
domainsAppliedstring[]The domains for which this consent allows these preferences to persist to.
gdprAppliesbooleanDetermine if GDPR applies based on the user's geo-location.
Relevant Iglu schema
Was this page helpful?