Event Model
Amazon Advertising uses an event-based tracking model where specific user actions trigger conversion events. Events are categorized by funnel stage and business objective, enabling optimization algorithms to prioritize high-value conversions.
Event Types
- Page View Events: Track user navigation and content engagement
- Product Events: Capture product discovery and consideration behaviors
- Shopping Cart Events: Monitor cart interactions and checkout progression
- Conversion Events: Record completed transactions and lead submissions
- Custom Events: Track business-specific actions aligned with campaign goals
Core Events to Ship
Essential E-commerce Events
Product View
Fires when user views a product detail page.
aw('event', 'view_product', {
product_id: 'ASIN-12345',
product_name: 'Example Product',
category: 'Electronics',
price: 29.99,
currency: 'USD'
});
When to Fire: Product detail page load
Required Parameters:
product_id: Amazon ASIN or SKUprice: Product pricecurrency: ISO 4217 currency code
Add to Cart
Triggers when user adds item to shopping cart.
aw('event', 'add_to_cart', {
product_id: 'ASIN-12345',
product_name: 'Example Product',
quantity: 1,
price: 29.99,
currency: 'USD'
});
When to Fire: "Add to Cart" button click
Required Parameters:
product_id: Unique product identifierquantity: Number of items addedprice: Unit price (not total)
Begin Checkout
Tracks checkout initiation.
aw('event', 'begin_checkout', {
cart_value: 89.97,
currency: 'USD',
num_items: 3
});
When to Fire: First step of checkout process
Required Parameters:
cart_value: Total cart value before shipping/taxnum_items: Total quantity of items
Purchase
Captures completed transactions.
aw('conversion', {
transactionId: 'ORDER-67890',
value: 94.97,
currency: 'USD',
products: [
{
id: 'ASIN-12345',
name: 'Example Product',
quantity: 2,
price: 29.99
},
{
id: 'ASIN-67890',
name: 'Another Product',
quantity: 1,
price: 34.99
}
]
});
When to Fire: Order confirmation page load
Required Parameters:
transactionId: Unique order identifier (for deduplication)value: Total order value including tax/shippingcurrency: Transaction currencyproducts: Array of purchased items with details
Lead Generation Events
Lead Submission
For non-transactional conversion goals.
aw('conversion', {
conversionType: 'lead',
value: 25.00, // Estimated lead value
currency: 'USD',
leadType: 'contact_form'
});
When to Fire: Form submission confirmation
Use Cases:
- Contact form submissions
- Quote requests
- Newsletter signups
- Webinar registrations
Account Creation
Tracks new user registrations.
aw('event', 'sign_up', {
method: 'email', // or 'social', 'phone'
value: 10.00 // Optional lifetime value estimate
});
When to Fire: Account creation success
Engagement Events
Search
Captures on-site search behavior.
aw('event', 'search', {
search_term: 'wireless headphones',
num_results: 24
});
When to Fire: Search results page load
Video Interaction
Tracks video engagement for content-heavy sites.
aw('event', 'video_complete', {
video_id: 'product-demo-123',
video_duration: 120, // seconds
completion_rate: 100 // percentage
});
When to Fire: Video playback milestones (25%, 50%, 75%, 100%)
Payload Rules
Required Fields for Conversion Events
Every conversion event must include:
{
transactionId: 'UNIQUE-ID', // Required: Prevents duplicate tracking
value: 49.99, // Required: Numeric value
currency: 'USD', // Required: ISO 4217 code
timestamp: 1703419800 // Optional but recommended: Unix timestamp
}
Product Array Schema
When tracking product-level data:
products: [
{
id: 'SKU-123', // Required: Must match Amazon catalog
name: 'Product Name', // Required: For reporting
category: 'Category/Subcategory', // Recommended: For segmentation
price: 29.99, // Required: Unit price
quantity: 1, // Required: Number of units
brand: 'Brand Name', // Optional: For brand reporting
variant: 'Color: Blue' // Optional: For variant tracking
}
]
Dynamic Parameter Mapping
Use data layer or DOM scraping to populate parameters dynamically:
aw('conversion', {
transactionId: dataLayer.orderId,
value: dataLayer.orderTotal,
currency: dataLayer.currency,
products: dataLayer.products.map(function(product) {
return {
id: product.sku,
name: product.name,
price: product.price,
quantity: product.quantity
};
})
});
Naming & Conventions
Event Naming Standards
- Use lowercase snake_case for custom event names (e.g.,
download_guide,request_demo) - Match Amazon's standard event names when possible (
purchase,add_to_cart,sign_up) - Avoid spaces, special characters, or overly long names
- Document all custom events in tracking plan
Parameter Naming
- Follow Amazon's reserved parameter names for standard fields
- Use descriptive names for custom parameters (e.g.,
lead_sourcenotls) - Maintain consistency across all events (e.g., always use
product_id, not mixing withproductIdorsku)
Value Formatting
- Numeric values: Pass as numbers, not strings (
value: 49.99notvalue: "49.99") - Currency codes: Always uppercase ISO 4217 (
USD,EUR,GBP) - Dates/Times: Use Unix timestamps or ISO 8601 format
- Product IDs: Match format used in Amazon product catalog exactly
QA Notes
Testing Conversion Events
Browser Developer Tools
- Open DevTools Network tab and filter for "amazon-adsystem"
- Trigger conversion action (e.g., complete purchase)
- Verify pixel request fires with correct parameters
- Check response status (200 = success)
- Inspect payload to confirm all required fields present
Example network request verification:
Request URL: https://s.amazon-adsystem.com/iu3/conversion/12345.js
Status: 200 OK
Query Parameters:
- tid: ORDER-67890
- cv: 94.97
- cc: USD
- pr: [{"id":"ASIN-12345","qty":2,"pr":29.99}]
Amazon Ads Console Validation
- Navigate to Amazon Ads > Measurement & Reporting > Conversion Tracking
- Check "Recent Conversions" table (updates within 12-24 hours)
- Verify conversion count matches test transactions
- Review conversion value accuracy
- Check that product IDs match catalog entries
Tag Manager Preview Mode
For GTM implementations:
- Enable Preview Mode in GTM workspace
- Navigate site and trigger conversion events
- Verify tag fires in Preview pane
- Check "Variables" tab for correct parameter values
- Confirm no errors in "Errors" tab
Attribution Validation
When using Amazon Attribution tags:
- Append attribution parameters to test URLs (e.g.,
?tag=test-campaign_123) - Click through and complete conversion
- Wait 12-24 hours for attribution reporting
- Check Amazon Attribution dashboard for attributed conversion
- Verify campaign parameters captured correctly
Cross-Device Testing
- Test conversion tracking on desktop, tablet, mobile web
- Validate mobile app SDK event tracking
- Verify events fire correctly on iOS and Android
- Check that device-specific parameters populate (OS version, app version)
Edge Case Testing
- Repeat purchases: Verify different transaction IDs for deduplication
- Multiple currencies: Test conversion tracking with various currency codes
- High-value orders: Validate large transaction values don't cause overflow errors
- Product arrays: Test with 1, 5, 20+ products in single transaction
- Special characters: Test product names with quotes, ampersands, unicode
Event Enrichment
User Context
Enhance events with user attributes when available:
aw('conversion', {
transactionId: 'ORDER-123',
value: 49.99,
currency: 'USD',
// User context
userId: 'USER-456', // For logged-in users
customerType: 'returning', // New vs. returning
lifetimeValue: 249.95, // Total customer value
loyaltyTier: 'gold' // Customer segment
});
Campaign Context
Include campaign parameters for attribution:
aw('conversion', {
transactionId: 'ORDER-123',
value: 49.99,
currency: 'USD',
// Campaign context from URL parameters
campaignSource: getUrlParam('utm_source'),
campaignMedium: getUrlParam('utm_medium'),
campaignName: getUrlParam('utm_campaign')
});
Session Context
Capture session-level information:
aw('conversion', {
transactionId: 'ORDER-123',
value: 49.99,
currency: 'USD',
// Session context
sessionDuration: 420, // Seconds on site
pageViews: 8, // Pages viewed in session
referrer: document.referrer // Entry point
});
Performance Optimization
Event Batching
For high-frequency events, batch to reduce network overhead:
var eventQueue = [];
function queueEvent(eventData) {
eventQueue.push(eventData);
if (eventQueue.length >= 5) {
flushEvents();
}
}
function flushEvents() {
// Send batched events
aw('events', eventQueue);
eventQueue = [];
}
Conditional Event Firing
Only fire events when necessary:
// Only track product view if user spends >3 seconds on page
var viewStartTime = Date.now();
window.addEventListener('beforeunload', function() {
var timeOnPage = (Date.now() - viewStartTime) / 1000;
if (timeOnPage > 3) {
aw('event', 'view_product', productData);
}
});
Deferred Event Tracking
For non-critical events, defer until page is idle:
if ('requestIdleCallback' in window) {
requestIdleCallback(function() {
aw('event', 'page_engaged', engagementData);
});
} else {
setTimeout(function() {
aw('event', 'page_engaged', engagementData);
}, 1000);
}