Adobe Analytics & Experience Platform
Unlike Google Consent Mode, Adobe has no single industry-standard consent signal — Launch, AppMeasurement, and the Experience Platform Web SDK each expect consent expressed differently. Consenti doesn't auto-inject an Adobe snippet the way it does for GTM; instead it gives you a ready-made Adobe-shaped consent object and script-gating primitives so you wire it to whichever Adobe surface you run.
Reading consent in Adobe's shape
widget.getConsent('adobe')maps your visitor's consent onto the four Adobe product surfaces:
const adobeConsent = widget.getConsent('adobe')
// {
// analytics: 'granted', // Adobe Analytics / AppMeasurement — from cookies with purpose: 'analytics'
// target: 'denied', // Adobe Target — from cookies with purpose: 'preferences'
// manager: 'denied', // Audience Manager — from cookies with purpose: 'marketing'
// optimizer: 'denied', // Recommendations/Optimizer — from cookies with purpose: 'marketing'
// }adobe_analytics cookie ID baked into the widget — this rolls up whichever parameters carry that purpose in your profile. See API Methods for the full getConsent(type) reference.Option A — Gate the Launch/AppMeasurement library itself
The simplest integration: don't load Adobe Launch (or the standalone AppMeasurement script) until the relevant category is granted. Use CategoryScript so the library is only fetched — and any beacons it fires only happen — once consent exists. The categoryId here is your own authored category ID (see Category type) — use whichever id actually covers analytics/marketing in your profile:
import { CategoryScript } from '@consenti/ui'
// Analytics-only Launch property
new CategoryScript({
categoryId: 'analytics',
widget,
src: 'https://assets.adobedtm.com/YOUR_LAUNCH_PROPERTY/launch-EN.min.js',
})
// If the same Launch property also fires Target/Audience Manager rules,
// gate it on 'marketing' instead so it waits for the broader consent
new CategoryScript({
categoryId: 'marketing',
widget,
src: 'https://assets.adobedtm.com/YOUR_LAUNCH_PROPERTY/launch-EN.min.js',
})s.t()/s.tl() beacons. Pick the broadest category your property actually needs and gate on that.Option B — Adobe Experience Platform Web SDK (alloy)
If you're on the Experience Platform Web SDK, alloy('setConsent', …) is the real consent entry point — it accepts an explicit collect flag rather than needing the library itself gated. Load alloy.jsnormally, set a denied default before anything can send data, then update it from Consenti's events:
import { CategoryAction } from '@consenti/ui'
// Default to denied the moment alloy loads — mirrors Consenti's own
// deny-by-default posture before the visitor has made a choice
alloy('setConsent', {
consent: [{ standard: 'Adobe', version: '2.0', value: { collect: { val: 'n' } } }],
})
// Keep alloy's consent flag in sync with the 'analytics' category's rollup
new CategoryAction({
id: 'analytics',
widget,
onGrant: () => {
alloy('setConsent', {
consent: [{ standard: 'Adobe', version: '2.0', value: { collect: { val: 'y' } } }],
})
},
onDeny: () => {
alloy('setConsent', {
consent: [{ standard: 'Adobe', version: '2.0', value: { collect: { val: 'n' } } }],
})
},
})If your Experience Platform datastream also enforces IAB TCF, pass the tcfdata standard instead of/alongside Adobe— see Adobe's Web SDK consent documentation for the exact payload shape for your configured standard.
Verifying
- Install the Adobe Experience Platform Debugger browser extension.
- Before consenting, confirm no Analytics/Target/AEP network requests fire (Network tab, filter for
2o7.net,omtrdc.net, or your first-party CNAME, and for AEP,/ee/v2/interact). - Accept the relevant category on the Consenti banner and confirm the requests start appearing without a page reload.
- For alloy, the Debugger's “Events” panel shows the resolved consent object attached to each interact call — verify
collect.valmatches what you expect.