Event Object
Overview
The event object is the core structure for all tracked events. It captures the event type, monetary value, currency, unique identifier, and custom properties for tracking and analytics.
The name field determines how the event is processed and which destination APIs receive it. The id field is required for events that need deduplication (e.g. checkout_completed, order_canceled). Only events that are mapped in your account configuration will be accepted.
Complete Reference
event object
name string required
Name of the event to be sent.
name: "event_name"
value number required
Event value in decimal format. Represent the final total order amount, including all costs and discounts.
value: 123.99
currency string required
Currency code that specifies the currency in which all monetary values from any object associated with this event are expressed.
Note: This value can be overridden in nested objects if they contain their own value key with a currency specified.
currency: "USD"
exchange_rate number
Custom exchange rate for multi-currency. Default has value 1.
Note: This value can be overridden in nested objects if they contain their own value key with a currency specified.
exchange_rate: 1
id string required-if-applicable
Event ID — required for transactions or any actions that require deduplication or uniqueness. Represents the unique identifier of a transaction, order, or lead. This can be the unique order, transaction, or action ID used in your system.
id: "ord_abc123"
reason string
Short human-readable reason associated with a lifecycle event — the cancellation reason for order_canceled, or the disqualification reason for lead_disqualified. Free-form string; keep it short and consistent across your implementations so it can be grouped for reporting.
reason: "out_of_stock"
properties object recommended
Custom Event Properties Examples
- Ecommerce Order
- B2B Lead
- Subscription Service
properties: {
fulfillment_method: "delivery",
gift_wrap: "true"
}
properties: {
lead_status: "converted",
sales_stage: "proposal"
}
properties: {
subscription_tier: "premium",
billing_cycle: "annual",
trial_user: "false",
renewal_date: "2025-06-30",
support_level: "priority",
usage_frequency: "daily"
}
Examples
- Checkout Completed
- Lead Created
- Product Viewed
- Order Canceled
- Minimal
{
"name": "checkout_completed",
"value": 299.99,
"currency": "USD",
"exchange_rate": 1,
"id": "ord_abc123",
"properties": {
"payment_method": "credit_card",
"shipping_method": "express",
"items_count": 3
}
}
{
"name": "lead_created",
"value": 250.00,
"currency": "USD",
"id": "lead_abc123",
"properties": {
"lead_source": "contact_form",
"form_name": "request_demo"
}
}
{
"name": "product_viewed",
"value": 149.99,
"currency": "USD"
}
{
"name": "order_canceled",
"value": 0,
"currency": "USD",
"id": "ord_abc123",
"reason": "customer_request"
}
{
"name": "page_viewed",
"value": 0,
"currency": "USD"
}
Event ID
The id field serves different purposes depending on the event type:
- Transaction events (
checkout_completed,order_canceled) —idis required and used for deduplication. Events with duplicate IDs are not processed again per destination. - Non-transaction events (
product_viewed,page_viewed, etc.) —idis optional. If not provided, a unique ID is generated automatically.
Event Value
The value field is the monetary impact of the event. For most events it is simply the amount involved (lead value, product price, etc.), but two events have a strict, canonical composition the framework depends on:
checkout_completed—valueMUST always equal products + shipping + any other costs − order-level coupons, with tax INCLUDED.order_canceled—valueMUST always equal only the value of the returned/canceled products, with tax INCLUDED — no shipping, no other costs.
These compositions are a hard contract. The framework uses them to correctly derive tax-excluded and shipping-excluded values per destination (GA4 value overrides, Google Ads conversion values, refund adjustments). Sending anything else (net values, totals with shipping on refunds, tax-excluded amounts) produces wrong destination values — fix the integration, never expect the framework to compensate.
Event Reason
The optional reason field is a short, human-readable string that captures the why behind a lifecycle event. Prefer it over a custom property so the value lands in a predictable, queryable place across destinations.
Common values:
order_canceled→"customer_request","out_of_stock","payment_declined"lead_disqualified→"out_of_icp","no_budget","no_authority","duplicate"
Keep the value short (snake_case recommended) and consistent across implementations so it can be grouped for reporting.
Custom Properties
The properties object allows you to attach any custom key-value data to an event. Use it for business-specific attributes that enable segmentation and analytics in your destinations.
{
"properties": {
"payment_method": "credit_card",
"customer_type": "returning",
"coupon_code": "EXAMPLE_COUPON",
"checkout_duration": 180
}
}
Keep custom properties focused — limit to 5-10 key properties per event for optimal performance across destinations.
Currency and Exchange Rate
The currency field applies to all monetary values in the event and its nested objects (products, shipping, coupons). Nested objects can override currency and exchange_rate individually when they use a different currency.
{
"name": "checkout_completed",
"value": 1299.99,
"currency": "USD",
"exchange_rate": 0.22
}
Best Practices
- Consistent event names — use the same event names across all implementations for accurate tracking
- Accurate values — ensure
valuereflects the actual monetary impact (order total, lead value, etc.); forcheckout_completedandorder_canceledfollow the canonical composition in Event Value - Unique IDs for transactions — always provide a unique
idforcheckout_completedandorder_canceledto prevent duplicate processing - Focused properties — include only properties that enable actionable insights in your destinations
- Currency consistency — use the same currency code across related events when possible