Consenti

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:

typescript
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'
// }
ℹ️There's no fixed 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:

adobe.ts
typescript
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',
})
⚠️Only use one of these — injecting the same Launch property twice under two different categories creates duplicate 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:

adobe-alloy.ts
typescript
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

  1. Install the Adobe Experience Platform Debugger browser extension.
  2. 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).
  3. Accept the relevant category on the Consenti banner and confirm the requests start appearing without a page reload.
  4. For alloy, the Debugger's “Events” panel shows the resolved consent object attached to each interact call — verify collect.val matches what you expect.

Frequently asked questions