XDM ExperienceEvent is a standard Experience Data Model (XDM) class. Use this class to create a timestamped snapshot of the system when a specific event occurs or a certain set of conditions have been reached.
An Experience Event is a fact record of what occurred, including the point in time and identity of the individual involved. Events can be either explicit (directly observable human actions) or implicit (raised without a direct human action) and are recorded without aggregation or interpretation. For more high-level information on the use of this class in the Platform ecosystem, refer to the XDM overview.
The XDM ExperienceEvent class itself provides several time-series-related fields to a schema. Two of these fields (_id
and timestamp
) are required for all schemas based on this class, while the rest are optional. The values of some of the fields are automatically populated when data is ingested.
Property | Description |
---|---|
_id (Required) |
The Experience Event Class _id field uniquely identifies individual events that are ingested into Adobe Experience Platform. This field is used to track the uniqueness of an individual event, prevent duplication of data, and look up that event in downstream services.Where duplicate events are detected, Platform applications and services may handle the duplication differently. For example, duplicate events in Profile Service are dropped if the event with the same _id already exists in the Profile store.In some cases, _id can be a Universally Unique Identifier (UUID) or Globally Unique Identifier (GUID).If you are streaming data from a source connection or ingesting directly from a Parquet file, you should generate this value by concatenating a certain combination of fields that make the event unique. Examples of events that could be concatenated include primary ID, timestamp, event type, and so on. The concatenated value must be a uri-reference formatted string, meaning any colon characters must be removed. Afterwards, the concatenated value should be hashed using SHA-256 or another algorithm of your choice.It is important to distinguish that this field does not represent an identity related to an individual person, but rather the record of data itself. Identity data relating to a person should be relegated to identity fields provided by compatible field groups instead. |
eventMergeId |
If using the Adobe Experience Platform Web SDK to ingest data, this represents the ID of the ingested batch that caused the record to be created. This field is automatically populated by the system upon data ingestion. The use of this field outside of the context of a Web SDK implementation is not supported. |
eventType |
A string that indicates the type or category for the event. This field can be used if you want to distinguish different event types within the same schema and dataset, such as distinguishing a product view event from an add-to-shopping-cart event for a retail company. Standard values for this property are provided in the appendix section, including descriptions of their intended use case. This field is an extensible enum, meaning that you can also use your own event type strings to categorize the events you are tracking. eventType limits you to using only a single event per hit on your application, and therefore you must use calculated fields to let the system know which event is most important. For more information, see the section on best practices for calculated fields. |
producedBy |
A string value that describes the producer or origin of the event. This field can be used to filter out certain event producers if needed for segmentation purposes. Some suggested values for this property are provided in the appendix section. This field is an extensible enum, meaning that you can also use your own strings to represent different event producers. |
identityMap |
A map field that contains a set of namespaced identities for the individual that the event applies to. This field is automatically updated by the system as identity data is ingested. To properly utilize this field for Real-Time Customer Profile, do not attempt to manually update the field’s contents in your data operations. See the section on identity maps in the basics of schema composition for more information on their use case. |
timestamp (Required) |
An ISO 8601 timestamp of when the event occurred, formatted as per RFC 3339 Section 5.6. This timestamp must occur in the past, but must take place from 1970 onwards. See the section below on timestamps for best practices on the use of this field. |
The following sections cover best practices for designing your event-based Experience Data Model (XDM) schemas in Adobe Experience Platform.
The root timestamp
field of an event schema can only represent the observation of the event itself, and must occur in the past. However, the event must take place from 1970 onwards. If your segmentation use cases require the use of timestamps that may occur in the future, these values must be constrained elsewhere in your Experience Event schema.
For example, if a business in the travel and hospitality industry is modeling a flight reservation event, the class-level timestamp
field represents the time when the reservation event was observed. Other timestamps that are related to the event, such as the start date of the travel reservation, should be captured in separate fields provided by standard or custom field groups.
By keeping the class-level timestamp separate from other related datetime values in your event schemas, you can implement flexible segmentation use cases while preserving a timestamped account of customer journeys in your experience application.
Certain interactions in your experience applications can result in multiple related events that technically share the same event timestamp, and can therefore be represented as a single event record. For example, if a customer views a product on your website, this can result in an event record that has two potential eventType
values: a “product view” event (commerce.productViews
) or a generic “page view” event (web.webpagedetails.pageViews
). In these cases, you can use calculated fields to capture the most important attributes when multiple events are captured in a single hit.
Use Adobe Experience Platform Data Prep to map, transform, and validate data to and from XDM. Using the available mapping functions provided by the service you can invoke logical operators to prioritize, transform, and/or consolidate data from multi-event records when being ingested into Experience Platform. In the example above, you could designate eventType
as a calculated field that would prioritize a “product view” over a “page view” whenever they both occur.
If you are manually ingesting data into Platform via the UI, see the guide on calculated fields for specific steps on how to create calculated fields.
If you are streaming data to Platform using a source connection, you can configure the source to utilize calculated fields instead. Refer to the documentation for your particular source for instructions on how to implement calculated fields when configuring the connection.
The names of several field groups have changed. See the document on field group name updates for more information.
Adobe provides several standard field groups for use with the XDM ExperienceEvent class. The following is a list of some commonly used field groups for the class:
The following section contains additional information about the XDM ExperienceEvent class.
eventType
The following table outlines the accepted values for eventType
, along with their definitions:
Value | Definition |
---|---|
advertising.clicks |
This event tracks when an action to select an advertisement occurs. |
advertising.completes |
This event tracks when a timed media asset has been watched to completion. This does not necessarily mean that the viewer watched the whole video, as the viewer could have skipped ahead. |
advertising.conversions |
This event tracks a pre-defined action performed by a customer that triggers an event for performance evaluation. |
advertising.federated |
This event tracks whether an Experience Event was created through data federation (data sharing between customers). |
advertising.firstQuartiles |
This event tracks when a digital video ad has played through 25% of its duration at normal speed. |
advertising.impressions |
This event tracks the impressions of an advertisement to a customer with the potential of being viewed. |
advertising.midpoints |
This event tracks when a digital video ad has played through 50% of its duration at normal speed. |
advertising.starts |
This event tracks when a digital video ad has started playing. |
advertising.thirdQuartiles |
This event tracks when a digital video ad has played through 75% of its duration at normal speed. |
advertising.timePlayed |
This event tracks the amount of time spent by a user on a specific timed media asset. |
application.close |
This event tracks when an application was closed or sent into the background. |
application.launch |
This event tracks when an application was launched or brought into the foreground. |
click |
Deprecated Instead use decisioning.propositionInteract . |
commerce.backofficeCreditMemoIssued |
This event tracks when a notice of credit has been issued to a customer. |
commerce.backofficeOrderCancelled |
This event tracks when a previously initiated purchase process has been terminated before completion. |
commerce.backofficeOrderItemsShipped |
This event tracks when the purchased items have been physically shipped to the customer. |
commerce.backofficeOrderPlaced |
This event tracks the placement of an order. |
commerce.backofficeShipmentCompleted |
This event tracks the successful completion of the entire shipment process. |
commerce.checkouts |
This event tracks when a checkout event has occurred for a product list. There can be more than one checkout event if there are multiple steps in a checkout process. If there are multiple steps, the timestamp and referenced page/experience for each event are used to identify each individual event (step), represented in order. |
commerce.productListAdds |
This event tracks when a product has been added to the product list or shopping cart. |
commerce.productListOpens |
This event tracks when a new product list (shopping cart) has been initialized or created. |
commerce.productListRemovals |
This event tracks when a product entry has been removed from a product list or shopping cart. |
commerce.productListReopens |
This event tracks when a product list (shopping cart) that was no longer accessible (abandoned) has been reactivated by a customer, such as via a re-marketing activity. |
commerce.productListViews |
This event tracks when a product list or shopping cart has received a view. |
commerce.productViews |
This event tracks when a product has received one or more views. |
commerce.purchases |
This event tracks when an order has been accepted. This is the only required action in a commerce conversion. A purchase event must have a product list referenced. |
commerce.saveForLaters |
This event tracks when a product list has been saved for future use, such a product wishlist. |
decisioning.propositionDisplay |
This event is used when the Web SDK automatically sends information about what’s being displayed on a page. However, you don’t need this event type if you’re already including display information in other ways, like with top and bottom of page hits. For bottom of page hits, you can choose any event type you like. |
decisioning.propositionDismiss |
This event type is used when an Adobe Journey Optimizer in-application message or content card is dismissed. |
decisioning.propositionFetch |
Used to indicate that an event is primarily to fetch decisioning. Adobe Analytics will drop this event automatically. |
decisioning.propositionInteract |
This event type is used to track interactions, such as clicks, on personalized content. |
decisioning.propositionSend |
This event tracks when it has been decided to send to a prospective customer a recommendation or offer for consideration. |
decisioning.propositionTrigger |
Events of this type are stored in local storage by the Web SDK but are not sent to Experience Edge. Each time a ruleset is satisfied, an event is generated and stored in local storage (if that setting is enabled). |
delivery.feedback |
This event tracks feedback events for a delivery, such as an email delivery. |
directMarketing.emailBounced |
This event tracks when an email to a person bounced. |
directMarketing.emailBouncedSoft |
This event tracks when an email to a person soft-bounced. |
directMarketing.emailClicked |
This event tracks when a person clicked a link in a marketing email. |
directMarketing.emailDelivered |
This event tracks when an email was successfully delivered to a person’s email service. |
directMarketing.emailOpened |
This event tracks when a person opened a marketing email. |
directMarketing.emailSent |
This event tracks when a marketing email has been sent to a person. |
directMarketing.emailUnsubscribed |
This event tracks when a person unsubscribed from a marketing email. |
display |
Deprecated Instead use decisioning.propositionDisplay . |
inappmessageTracking.dismiss |
This event tracks when an in-app message was dismissed. |
inappmessageTracking.display |
This event tracks when an in-app message was displayed. |
inappmessageTracking.interact |
This event tracks when an in-app message was interacted with. |
leadOperation.callWebhook |
This event tracks when a webhook was called in response to a lead. |
leadOperation.changeCampaignStream |
This event signifies a shift in the marketing or engagement strategy for a particular business lead. |
leadOperation.changeEngagementCampaignCadence |
This event tracks when there has been a change in how often a lead is engaged with as part of a campaign. |
leadOperation.convertLead |
This event tracks when a lead was converted. |
leadOperation.interestingMoment |
This event tracks when an interesting moment was recorded for a person. |
leadOperation.mergeLeads |
This event tracks when information from multiple leads that refer to the same entity were consolidated. |
leadOperation.newLead |
This event tracks when a lead was created. |
leadOperation.scoreChanged |
This event tracks when the value of the lead’s score attribute was changed. |
leadOperation.statusInCampaignProgressionChanged |
This event tracks when a lead’s status in a campaign has changed. |
listOperation.addToList |
This event tracks when a person was added to a marketing list. |
listOperation.removeFromList |
This event tracks when a person was removed from a marketing list. |
media.adBreakComplete |
This event signals the completion of an ad break. |
media.adBreakStart |
This event signals the start of an ad break. |
media.adComplete |
This event signals the completion of an advert. |
media.adSkip |
This event signals when an advert has been skipped. |
media.adStart |
This event signals the start of an advert. |
media.bitrateChange |
This event signals when there is a change in the bit rate. |
media.bufferStart |
The media.bufferStart event type is sent when buffering begins. There is no specific bufferResume event type; buffering is considered to have resumed when a play event is sent following a bufferStart event. |
media.chapterComplete |
This event signals the completion of a chapter. |
media.chapterSkip |
This event is triggered when a user skips forward or backward to another section or chapter. |
media.chapterStart |
This event signals the start of a chapter. |
media.downloaded |
This event tracks when media downloaded content has occurred. |
media.error |
This event signals when an error has occurred during media playback. |
media.pauseStart |
This event tracks when a pauseStart event has occurred. This event is triggered when a user initiates a pause in the media playback. There is no resume event type. A resume is inferred when you send a play event after a pauseStart . |
media.ping |
The media.ping event type is used to indicate ongoing playback status. For main content, this event must be sent every 10 seconds during playback, starting 10 seconds after playback begins. For ad content, it must be sent every second during ad tracking. Ping events should not include the params map in the request body. |
media.play |
The media.play event type is sent when the player transitions to the playing state from another state, such as buffering, paused (when resumed by the user), or error (when recovered), including scenarios like autoplay. This event is triggered by the player’s on('Playing') callback. |
media.sessionComplete |
This event is sent when the end of the main content is reached. |
media.sessionEnd |
The media.sessionEnd event type notifies the Media Analytics backend to immediately close a session when a user abandons their viewing and is unlikely to return. If this event is not sent, the session will time out after 10 minutes of inactivity or 30 minutes without playhead movement. Any subsequent media calls with that Session ID will be ignored. |
media.sessionStart |
The media.sessionStart event type is sent with the session initiation call. Upon receiving a response, the Session ID is extracted from the Location header and used for all subsequent event calls to the Collection server. |
media.statesUpdate |
This event tracks when a statesUpdate event has occurred. The player state tracking capabilities can be attached to an audio or video stream. The standard states are: fullscreen , mute , closedCaptioning , pictureInPicture , and inFocus . |
opportunityEvent.addToOpportunity |
This event tracks when a person was added to an opportunity. |
opportunityEvent.opportunityUpdated |
This event tracks when an opportunity was updated. |
opportunityEvent.removeFromOpportunity |
This event tracks when a person was removed from an opportunity. |
personalization.request |
Deprecated Instead use decisioning.propositionFetch . |
pushTracking.applicationOpened |
This event tracks when a person opened an application from a push notification. |
pushTracking.customAction |
This event tracks when a person selected a custom action in a push notification. |
web.formFilledOut |
This event tracks when a person filled out a form on a web page. |
web.webinteraction.linkClicks |
The event signals that a link click has been automatically recorded by the Web SDK. |
web.webpagedetails.pageViews |
This event type is the standard method for marking the hit as a page view. |
location.entry |
This event tracks the entry of a person or device at a specific location. |
location.exit |
This event tracks the exit of a person or device from a specific location. |
producedBy
The following table outlines some accepted values for producedBy
:
Value | Definition |
---|---|
self |
Self |
system |
System |
salesRef |
Sales Representative |
customerRep |
Customer Representative |