Track consent and GDPR on web
Track user consent preferences selection events using the Enhanced Consent plugin.
Enhanced consent events must be manually tracked.
Install plugin
- JavaScript (tag)
- Browser (npm)
| Tracker Distribution | Included |
|---|---|
sp.js | ✅ |
sp.lite.js | ❌ |
Download:
| Download from GitHub Releases (Recommended) | Github Releases (plugins.umd.zip) |
| Available on jsDelivr | jsDelivr (latest) |
| Available on unpkg | unpkg (latest) |
window.snowplow(
'addPlugin',
'https://cdn.jsdelivr.net/npm/@snowplow/browser-plugin-enhanced-consent@latest/dist/index.umd.min.js',
['snowplowEnhancedConsentTracking', 'EnhancedConsentPlugin']
);
npm install @snowplow/browser-plugin-enhanced-consentyarn add @snowplow/browser-plugin-enhanced-consentpnpm add @snowplow/browser-plugin-enhanced-consent
import { newTracker } from '@snowplow/browser-tracker';
import { EnhancedConsentPlugin } from '@snowplow/browser-plugin-enhanced-consent';
newTracker('sp1', '{{collector_url}}', {
appId: 'my-app-id',
plugins: [ EnhancedConsentPlugin() ],
});
The plugin is available since version 3.8 of the tracker.
Events
| API | To track |
|---|---|
trackConsentAllow | Acceptance of user consent |
trackConsentSelected | A specific selection of consented scopes |
trackConsentPending | The unconfirmed selection about user consent |
trackConsentImplicit | The implicit consent on user consent preferences |
trackConsentDeny | A denial of user consent |
trackConsentExpired | The expiration of a consent selection |
trackConsentWithdrawn | The withdrawal of user consent |
trackCmpVisible | The render time of a consent management platform banner |
With the exception of the CMP visible event, these methods use the same consent_preferences event schema.
Consent allow
To track the complete acceptance of a user consent prompt, you can use the trackConsentAllow method with the following attributes:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentAllow:{trackerName}", {
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
Consent selected
To track the specific selection of scopes of a user consent preferences, you can use the trackConsentSelected method with the following attributes:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentSelected:{trackerName}", {
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
Consent pending
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:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentPending:{trackerName}", {
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
Consent implicit
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:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentImplicit:{trackerName}", {
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
Consent deny
To track the complete denial of a user consent, you can use the trackConsentDeny method with the following attributes:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentDeny:{trackerName}", {
consentScopes: ["necessary"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
Consent expired
To track the expiration of a user consent, you can use the trackConsentExpired method with the following attributes:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentExpired:{trackerName}", {
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
Consent withdrawn
To track the withdrawal of a user consent, you can use the trackConsentWithdrawn method with the following attributes:
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackConsentWithdrawn:{trackerName}", {
consentScopes: ["necessary", "marketing", "personalization"],
basisForProcessing: "consent",
consentUrl: "https://www.example.com/",
consentVersion: "1.0",
domainsApplied: ["https://www.example.com/"],
gdprApplies: true
});
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
});
CMP visible
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.
- JavaScript (tag)
- Browser (npm)
window.snowplow("trackCmpVisible:{trackerName}", {
/* Using the performance.now API to retrieve the elapsed time from the page navigation. */
elapsedTime: performance.now(),
});
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(),
});
The CMP visible event uses this schema.