Required Fields
- Persist conversion-specific parameters: transaction value, order ID, currency, product IDs for e-commerce events.
- Include Adobe Experience Cloud ID (ECID) for cross-device tracking and visitor identification.
- Capture conversion tag IDs and advertiser IDs for proper event routing.
- Normalize e-commerce objects: currency (ISO 4217 code), revenue (decimal), order ID (string), product data.
- Attach campaign attribution data (AMO ID, utm parameters, click IDs) for proper performance tracking.
- Include custom parameters (ev1-ev10) for business-specific dimensions and segmentation.
Data Layer Structure for GTM
Use a standard dataLayer push format to trigger Adobe Advertising Cloud conversion tags in Google Tag Manager:
dataLayer.push({
'event': 'advertising_cloud_conversion',
'conversion_type': 'purchase',
'transaction': {
'order_id': 'ORDER12345',
'revenue': 149.99,
'currency': 'USD',
'products': [
{
'product_id': 'SKU_67890',
'product_name': 'Premium Widget',
'category': 'Widgets',
'quantity': 2,
'price': 74.99
}
]
},
'advertising_cloud': {
'advertiser_id': 'ADVERTISER_ID',
'conversion_id': 'CONVERSION_ID',
'custom_params': {
'ev1': 'customer_segment',
'ev2': 'purchase_channel',
'ev3': 'promo_code'
}
},
'visitor': {
'ecid': 'MCMID|12345678901234567890',
'email_hash': 'hashed_email_sha256',
'customer_id': 'CUST_789'
}
});
Map dataLayer variables to Adobe Advertising Cloud conversion tag parameters in GTM:
- transaction.order_id → ev_transaction_id
- transaction.revenue → ev_transaction_value
- transaction.currency → ev_currency
- advertising_cloud.advertiser_id → ev_advertiser_id
- advertising_cloud.conversion_id → ev_conversion_id
- advertising_cloud.custom_params.ev1 → ev1
Adobe Experience Cloud ID (ECID) Integration
Implement Adobe Experience Cloud ID Service for cross-solution visitor identification:
// Initialize Adobe Experience Cloud ID Service
var visitor = Visitor.getInstance("YOUR_ORG_ID@AdobeOrg", {
trackingServer: "YOUR_TRACKING_SERVER",
trackingServerSecure: "YOUR_SECURE_TRACKING_SERVER",
marketingCloudServer: "YOUR_TRACKING_SERVER",
marketingCloudServerSecure: "YOUR_SECURE_TRACKING_SERVER"
});
// Retrieve ECID and add to dataLayer
visitor.getMarketingCloudVisitorID(function(ecid) {
dataLayer.push({
'visitor_ecid': ecid
});
});
Benefits of ECID integration:
- Cross-device conversion tracking across desktop, mobile, and tablet
- Unified visitor profiles across Adobe Analytics, Advertising Cloud, and other Adobe solutions
- Improved attribution accuracy for multi-touch customer journeys
- Enhanced audience activation from Adobe Audience Manager
User Data Hashing
Hash personally identifiable information (PII) before adding to the dataLayer or sending to Advertising Cloud API. Use SHA-256 hashing and normalize data before hashing:
- Email: Lowercase, trim whitespace, hash with SHA-256.
- Phone: Remove spaces, dashes, parentheses; use E.164 format (+1234567890); hash with SHA-256.
- Customer ID: Use your internal ID consistently; hash if contains PII.
Example hashing function (JavaScript):
async function hashSHA256(value) {
const normalized = value.toLowerCase().trim();
const encoder = new TextEncoder();
const data = encoder.encode(normalized);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
// Usage
const emailHash = await hashSHA256(userEmail);
Server-Side API Payload
When sending conversions from your server to Adobe Advertising Cloud API, structure the payload:
{
"advertiser_id": "ADVERTISER_ID",
"conversion_id": "CONVERSION_ID",
"transaction_id": "ORDER12345",
"transaction_value": 149.99,
"currency": "USD",
"timestamp": "2025-01-15T14:30:00Z",
"visitor_data": {
"ecid": "MCMID|12345678901234567890",
"email_hash": "hashed_email_sha256",
"customer_id": "CUST_789",
"ip_address": "192.0.2.1",
"user_agent": "Mozilla/5.0..."
},
"product_data": {
"product_ids": ["SKU_67890"],
"categories": ["Widgets"],
"quantity": 2
},
"custom_params": {
"ev1": "customer_segment",
"ev2": "purchase_channel",
"ev3": "promo_code"
},
"attribution_data": {
"amo_id": "AMO_CLICK_ID",
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "summer_sale"
}
}
Adobe Analytics Integration Data
When using Adobe Analytics for Advertising integration, capture additional tracking parameters:
- AMO ID (s_kwcid): Adobe Media Optimizer click ID for attribution.
- AMO EF ID: Enhanced tracking ID for cross-channel attribution.
- Analytics Variables: Map advertising dimensions to eVars (campaign, ad group, keyword, placement).
Data layer structure for Analytics integration:
dataLayer.push({
'adobe_analytics': {
'amo_id': 'AMO_CLICK_ID',
'amo_ef_id': 'AMO_EF_ID',
'campaign': 'Summer_Sale_2025',
'ad_group': 'Premium_Widgets',
'keyword': 'buy premium widget',
'placement': 'Google_Search'
}
});
Governance Notes
- Document how consent modifies the dataLayer structure (e.g., do not send hashed PII if user rejects marketing cookies).
- Version the dataLayer schema to keep GTM variables, conversion tags, and API payloads aligned after code releases.
- Maintain a mapping document between your internal dataLayer and Adobe Advertising Cloud required parameters.
- Establish data retention policies for transaction IDs to support deduplication (30-day window).
- Coordinate dataLayer updates with Adobe Analytics implementation to maintain consistent tracking.
Validation Steps
- Check browser developer tools to confirm dataLayer push occurs before conversion tag fires.
- Use Adobe Experience Cloud Debugger to verify ECID presence and advertising cloud tag parameters.
- Review Adobe Advertising Cloud Reports to confirm conversion data matches expected values.
- Use GTM Preview mode to inspect dataLayer contents before and after conversion events.
- Screenshot dataLayer snapshots and conversion reports for compliance and audit documentation.
- Test hashing functions with known inputs to confirm SHA-256 output matches expected values.
- Validate Adobe Analytics integration by checking AMO dimensions in Analysis Workspace.