Adobe Analytics Event Tracking
Overview
Adobe Analytics uses a sophisticated tracking model based on server calls that capture user interactions through a combination of variables, events, and props. Unlike simple event-based systems, Adobe Analytics organizes data into a hierarchical structure that provides enterprise-grade flexibility for complex analysis.
At its core, Adobe Analytics sends image requests (beacons) to Adobe's collection servers with each interaction, carrying data about what happened, who did it, and contextual information. This approach has powered some of the world's largest digital properties for decades, offering unmatched depth and customization.
Event Model
How Adobe Analytics Events Work
Adobe Analytics uses three primary data types:
- Events (Success Events): Numeric metrics that count or measure (purchases, sign-ups, downloads)
- Props (Traffic Variables): Pathing and traffic analysis (page names, search terms)
- eVars (Conversion Variables): Persist values across hits (campaign codes, product categories)
Key Differences from Other Platforms:
- Events are metrics, not individual occurrences
- Supports both counter events (counts) and numeric events (revenue, quantity)
- Can serialize events to prevent duplication
- Events can have custom allocation and expiration rules
Event Types
Counter Events:
// Increments by 1
s.events = "event1"; // Custom event
s.events = "purchase"; // Built-in purchase event
Numeric Events:
// Event with specific value
s.events = "event10=4.99"; // Revenue of $4.99
s.products = ";Product Name;;;;event10=4.99";
Currency Events:
// Purchase with revenue
s.events = "purchase";
s.purchaseID = "ORDER_12345"; // Prevents duplicates
s.products = ";Product Name;1;29.99";
Serialization
Prevent duplicate event counting:
s.events = "event1:ABC123"; // Only counted once per unique ID
s.events = "purchase";
s.purchaseID = "ORDER_123"; // Built-in serialization
Standard Events
Adobe Analytics includes predefined events optimized for common business needs.
Built-in Conversion Events
prodView: Product viewsscOpen: Shopping cart opensscAdd: Items added to cartscRemove: Items removed from cartscCheckout: Checkout initiatedscView: Shopping cart viewspurchase: Completed purchases
Built-in Download & Link Events
download: File downloads (automatically tracked)exit: Exit link clickscustom: Custom link clicks
Using Standard Events
// Product view
s.events = "prodView";
s.products = ";Product Name;1;29.99;event1=5"; // 5 units available
s.eVar1 = "Electronics"; // Product category
// Add to cart
s.events = "scAdd";
s.products = ";Product Name;2;29.99"; // 2 items added
s.eVar2 = "Homepage Banner"; // How they found it
// Purchase
s.events = "purchase";
s.purchaseID = "T_" + Date.now();
s.products = ";Product A;1;29.99,;Product B;2;19.99";
s.transactionID = "ORDER_12345";
Custom Events
Adobe Analytics supports up to 1,000 custom events (event1 through event1000), though most implementations use far fewer.
Creating Custom Events
1. Define Events in Admin Console:
- Navigate to Admin > Report Suites
- Select your report suite
- Go to Edit Settings > Conversion > Success Events
- Configure event number, name, type, and polarity
Event Types:
- Counter: Simple count (page views, clicks)
- Numeric: Custom numeric value (time spent, items in cart)
- Currency: Monetary value (revenue, discounts)
2. Implement in Code:
// Counter event
s.events = "event1"; // Newsletter signup
// Multiple events
s.events = "event1,event2,event3";
// Numeric event
s.events = "event5=120"; // Video seconds watched
// Currency event
s.events = "event10=15.99"; // Discount amount
// Serialized event
s.events = "event1:USER123"; // One signup per user
Event Incrementors
For events that should count differently than 1:
// Count by specific value
s.events = "event20=3"; // 3 items added
// Multiple events with different values
s.events = "event1,event5=240,event10=29.99";
Event Syntax Examples
// Download tracking
s.linkTrackVars = "events,eVar1";
s.linkTrackEvents = "event2";
s.events = "event2";
s.eVar1 = "Whitepaper Q4";
s.tl(this, 'd', 'PDF Download');
// Video engagement
s.events = "event15"; // Video start
s.events = "event16=180"; // Seconds watched
s.eVar20 = "Product Demo Video";
s.prop20 = "Homepage";
// Form tracking
s.events = "event25"; // Form start
s.events = "event26"; // Form complete
s.eVar30 = "Contact Form";
Ecommerce Events
Adobe Analytics provides a robust ecommerce implementation model using the s.products variable and merchandise events.
Products String Syntax
s.products = "category;product;quantity;price;events;eVars"
Multiple products separated by commas:
s.products = "Electronics;TV;1;499.99,Electronics;Soundbar;1;299.99";
Ecommerce Implementation Examples
Product View:
s.events = "prodView";
s.products = ";Samsung TV 55\";;;;eVar1=Electronics";
s.eVar1 = "Electronics"; // Category
s.eVar2 = "Brand:Samsung";
Add to Cart:
s.events = "scAdd";
s.products = ";Samsung TV 55\";1;499.99;;;;";
s.eVar10 = "Homepage Carousel"; // Finding method
Cart View:
s.events = "scView";
s.products = ";Samsung TV 55\";1;499.99,;Soundbar;1;299.99";
Checkout:
s.events = "scCheckout";
s.products = ";Samsung TV 55\";1;499.99,;Soundbar;1;299.99";
s.eVar25 = "Guest Checkout"; // Checkout type
Purchase:
s.events = "purchase";
s.purchaseID = "ORDER_" + transactionId; // Unique order ID
s.products = ";Samsung TV 55\";1;499.99;event20=50,;Soundbar;1;299.99";
s.transactionID = "TXN_12345";
// Revenue breakdown
s.eVar40 = "799.98"; // Subtotal
s.eVar41 = "64.00"; // Tax
s.eVar42 = "15.00"; // Shipping
s.eVar43 = "50.00"; // Discount
Merchandise Events:
// Binding events to products
s.events = "event30"; // Product review submitted
s.products = ";Samsung TV 55\";;;;event30=1";
// Product-level metrics
s.events = "purchase,event50";
s.products = ";Samsung TV 55\";1;499.99;event50=5"; // 5-star rating
Cross-Sell & Upsell Tracking
// Track recommendation impressions
s.events = "event40"; // Recommendation shown
s.products = ";Recommended Product;;;;event40=1";
s.eVar50 = "Cross-sell:Related Items";
// Track recommendation clicks
s.events = "event41"; // Recommendation clicked
s.products = ";Recommended Product;;;;event41=1";
User Properties
In Adobe Analytics, user-level attributes are tracked through eVars (conversion variables) and Props (traffic variables) with specific expiration and allocation settings.
eVars for User Attributes
eVars persist values across multiple hits based on expiration rules:
// User type
s.eVar5 = "Premium Member";
// Expiration: Visit or custom (configured in Admin)
// Customer segment
s.eVar6 = "High Value";
// Expiration: 90 days
// Login status
s.eVar7 = "Logged In";
// Expiration: Visit
// User ID (hashed)
s.eVar8 = "USER_ABC123XYZ";
// Expiration: Never (persists until overwritten)
User Identification
// Marketing Cloud Visitor ID (automatic)
s.visitor = Visitor.getInstance("YOUR_ORG_ID");
// Custom user identifier
s.eVar9 = sha256(userEmail); // Hash PII
s.prop9 = "authenticated";
Visitor Segmentation
// Acquisition source (persists)
s.eVar10 = "Google Ads";
s.eVar11 = "Brand Campaign";
s.eVar12 = "Spring Sale";
// User preferences
s.eVar15 = "Dark Mode"; // UI preference
s.eVar16 = "Email:Weekly"; // Notification setting
Cross-Device Tracking
Adobe Analytics supports cross-device tracking through:
- Device Co-op (deprecated)
- Private Device Graph
- Custom implementation using authenticated user IDs
s.eVar20 = hashedUserId; // Cross-device identifier
s.prop20 = deviceType; // Current device
Event Parameters
Adobe Analytics doesn't use "parameters" in the traditional sense. Instead, context is provided through variables that fire alongside events.
Context Variables (Recommended)
Context Data provides a flexible way to send data that gets mapped to props/eVars server-side:
// Define context data
s.contextData['video.name'] = 'Product Demo';
s.contextData['video.duration'] = '180';
s.contextData['video.player'] = 'YouTube';
s.contextData['video.percentWatched'] = '75';
// Map in Processing Rules (Admin Console)
// video.name → eVar20
// video.duration → eVar21
// video.percentWatched → event15 (numeric)
Benefits:
- Changes don't require code deployment
- Clean separation between collection and reporting
- Easier to maintain and audit
- Version control in Adobe interface
List Variables
Capture multiple values in a single variable:
// Configuration in Admin: delimiter = ","
s.list1 = "Red,Blue,Green"; // Product colors
s.list2 = "Featured,On Sale,New Arrival"; // Product badges
s.list3 = "Size:Large,Material:Cotton,Season:Summer"; // Attributes
Hierarchy Variables
Track content structure:
s.hier1 = "Home/Products/Electronics/TVs";
s.hier2 = "Company/About/Team/Engineering";
Linking Events with Variables
// Always link relevant variables with events
s.events = "event1"; // Newsletter signup
s.eVar30 = "Footer Form"; // Where signup occurred
s.prop30 = document.referrer; // Previous page
s.events = "purchase";
s.eVar35 = "First Purchase"; // Purchase type
s.eVar36 = checkoutTimeSeconds; // Time to purchase
s.prop40 = paymentMethod; // How they paid
Implementation Methods
1. AppMeasurement.js (Legacy Standard)
The traditional Adobe Analytics JavaScript library:
<!-- Load AppMeasurement -->
<script src="https://yoursite.com/s_code.js"></script>
<script>
var s = s_gi('yourReportSuiteID');
// Configure
s.trackDownloadLinks = true;
s.trackExternalLinks = true;
s.linkInternalFilters = "javascript:,yoursite.com";
// Track page view
s.pageName = "Homepage";
s.channel = "Homepage";
s.eVar1 = "Visitor Type:New";
s.t(); // Page view call
// Track event
s.linkTrackVars = "events,eVar5";
s.linkTrackEvents = "event1";
s.events = "event1";
s.eVar5 = "Button:CTA";
s.tl(this, 'o', 'Button Click'); // Custom link call
</script>
2. Adobe Experience Platform Web SDK (Recommended)
Modern, unified data collection for Adobe Experience Cloud:
// Initialize
alloy("configure", {
datastreamId: "YOUR_DATASTREAM_ID",
orgId: "YOUR_ORG_ID@AdobeOrg"
});
// Track page view
alloy("sendEvent", {
xdm: {
web: {
webPageDetails: {
name: "Homepage",
URL: window.location.href
}
}
},
data: {
__adobe: {
analytics: {
events: "event1",
eVar1: "Homepage",
contextData: {
"page.section": "hero"
}
}
}
}
});
// Track custom event
alloy("sendEvent", {
xdm: {
eventType: "web.formFilledOut"
},
data: {
__adobe: {
analytics: {
events: "event5",
eVar10: "Contact Form",
contextData: {
"form.name": "contact",
"form.location": "footer"
}
}
}
}
});
3. Adobe Launch (Adobe Experience Platform Tags)
Tag management system for deploying Adobe Analytics without code changes:
Setup:
- Create property in Adobe Launch
- Add Adobe Analytics extension
- Configure report suites and variables
- Create rules for events
- Publish library
Data Elements:
- Pull data from dataLayer, cookies, URLs
- JavaScript variables
- CSS selectors
- Custom code
Rules:
Trigger: Click on .cta-button
Actions:
- Set Variables: eVar1 = "CTA Click", events = "event1"
- Send Beacon: s.tl() custom link
4. Mobile SDKs
iOS (Swift):
// Track state (page view)
ACPCore.trackState("Home Screen", data: [
"user.type": "premium",
"content.category": "featured"
])
// Track action (event)
ACPCore.trackAction("Button Tap", data: [
"button.name": "cta_signup",
"button.location": "hero"
])
Android (Kotlin):
// Track state
MobileCore.trackState("Home Screen", mapOf(
"user.type" to "premium",
"content.category" to "featured"
))
// Track action
MobileCore.trackAction("Button Tap", mapOf(
"button.name" to "cta_signup",
"button.location" to "hero"
))
5. Server-Side (Data Insertion API)
For server-side tracking, offline data, or system integrations:
import requests
import hashlib
from datetime import datetime
def send_adobe_event(report_suite, visitor_id, events_data):
url = f"https://yoursite.sc.omtrdc.net/b/ss/{report_suite}/0"
params = {
'vidn': visitor_id,
'ndh': '1', # No header
'events': events_data['events'],
'products': events_data.get('products', ''),
'purchaseID': events_data.get('purchase_id', ''),
'pageName': events_data.get('page_name', ''),
'v1': events_data.get('evar1', ''), # eVar1
'c1': events_data.get('prop1', '') # prop1
}
response = requests.get(url, params=params)
return response.status_code
Debugging & Validation
1. Adobe Experience Cloud Debugger
Browser extension (Chrome/Firefox):
- Real-time beacon inspection
- Variable values
- Report suite verification
- Processing rule validation
- Marketing Cloud ID verification
Usage:
- Install extension
- Navigate to your site
- Open debugger
- Perform actions
- Inspect image requests
2. Adobe Analytics Debugger (Legacy)
Older Chrome extension:
- Shows all s.t() and s.tl() calls
- Displays all variables in each call
- Highlights warnings and errors
3. Charles Proxy / Fiddler
Network debugging tools:
- Capture HTTPS traffic
- Filter for Adobe beacons (*.omtrdc.net)
- Inspect full request parameters
- Save sessions for analysis
Filter for:
*.sc.omtrdc.net(standard collection)*.adobedc.net(Experience Platform SDK)
4. Browser Developer Tools
Network Tab:
Filter: /b/ss/
Look for: Image requests to Adobe collection servers
Inspect: Query parameters (events, eVars, props)
Console Debugging:
// Enable debugging
s.debugTracking = true;
// Log AppMeasurement version
console.log(s.version);
// Check configuration
console.log(s.account); // Report suite
console.log(s.trackingServer);
// Inspect before send
s.registerPreTrackCallback(function(requestObject) {
console.log('Outgoing beacon:', requestObject);
});
5. Workspace Real-Time Reports
In Adobe Analytics interface:
- Reports > Metrics > Real-Time
- Configure metrics to watch
- See events within seconds
- Validate data flow
6. Data Feeds & Logs
For deep validation:
- Data Feeds: Raw clickstream data
- Activity Map: Visual click tracking
- Segment IQ: Anomaly detection
Best Practices
Event Configuration
✅ Do:
- Give events descriptive names in Admin Console
- Use counter events for simple counts
- Use numeric events for measurable values
- Use currency events for revenue/cost
- Document event purposes and usage
- Serialize purchase events with purchaseID
- Set appropriate polarity (up/down is good)
❌ Don't:
- Reuse events for different purposes
- Create events you won't analyze
- Send events without context (eVars/props)
- Forget to configure event types in Admin
Variable Usage
✅ Do:
- Use eVars for values that should persist
- Use props for path analysis and traffic patterns
- Implement context data with processing rules
- Keep variable naming consistent
- Document all variable mappings
- Use list variables for multi-value dimensions
❌ Don't:
- Hard-code business logic in JavaScript
- Send PII without hashing
- Use the same eVar for multiple purposes
- Exceed character limits (255 for eVars, 100 for props)
Products String
✅ Do:
- Include category when relevant
- Use consistent product naming
- Bind merchandise events appropriately
- Escape special characters (semicolons, commas)
- Track quantity and price accurately
❌ Don't:
- Send empty product strings
- Use inconsistent delimiters
- Forget to URL encode when necessary
Implementation
✅ Do:
- Use Adobe Launch/Experience Platform Tags
- Implement processing rules for flexibility
- Version control your implementation
- Test in dev/staging before production
- Monitor data quality regularly
- Use context data for future-proofing
❌ Don't:
- Hard-code report suite IDs in multiple places
- Skip tagging plan documentation
- Deploy untested code to production
- Ignore Adobe's recommended practices
Performance
- Load AppMeasurement asynchronously
- Minimize custom code in Adobe Launch rules
- Use s.tl() for non-navigation events (faster)
- Batch server-side calls when possible
- Avoid sending duplicate data
Data Quality
- Filter internal traffic (IP exclusion)
- Set bot filtering in Admin Console
- Use VISTA rules for data cleanup
- Implement data validation logic
- Regular audits of implementation
- Monitor for data anomalies
Privacy & Compliance
✅ Do:
- Hash or encrypt user identifiers
- Respect opt-out preferences
- Configure data retention policies
- Implement consent management
- Document data collection practices
- Use Adobe's Privacy Service API for GDPR/CCPA requests
❌ Don't:
- Collect PII in plain text
- Ignore regional privacy laws
- Assume default settings are compliant
- Send sensitive data in URLs
Organizational
- Maintain a comprehensive tagging plan (Solution Design Reference)
- Use consistent naming conventions
- Create data dictionaries
- Document business requirements for each metric
- Regular stakeholder reviews of analytics needs
- Establish governance for variable usage
Additional Resources: