Skip to main content
Level 1
September 16, 2026
Question

Email Opens and clicks not displaying in CJA despite data availability

  • September 16, 2026
  • 3 replies
  • 79 views

The customer Journey Management > message Execution field group physically exists in both the AJO message feedback schema and the AJO email tracking schema. I can see the field in the tracking schema and build a CJA report against it. But at runtime, the value is never actually populated on tracking events.

Since opens are tracking events, and tracking events never carries messageExecution. metadata, any CJA report keyed on that metadata for opens/clicks will be blank.

I tried identity stitching for tracking and feedback events datasets in CJA with an Identity Map as EID in both datasets. But still unable to see engagement metrics (email opens and email clicks) when using the metadata LOB value filter for email opens and clicks in Email Journey Reporting in CJA. Is anyone facing a similar issue in CJA?

 

 

 

 

 

 

 

3 replies

Prasanth
Level 2
September 17, 2026

Hi ​@Ram_KK ,

The underlying problem stems from the fact that messageExecution metadata is generated during the delivery phase. While the _experience.customerJourneyManagement.messageExecution field exists in the AJO Email Tracking Schema, tracking events generated dynamically via redirect links/tracking pixels often lack this full metadata payload at runtime. As a result, applying a filter based on messageExecution or Line of Business (LOB) metadata drops the tracking events, leaving Opens and Clicks blank in Customer Journey Analytics (CJA).

Root Cause Analysis

  1. Missing Metadata on Tracking Events: Opens and Clicks occur downstream from delivery. The AJO tracking engine often populates messageID, actionID, or journeyVersionID, but omits custom execution metadata like LOB metadata on tracking hits.

  2. Strict Component Filtering: When you apply your LOB filter, CJA evaluates each event line-by-line. Because the Tracking dataset lacks those specific metadata fields, all open/click events are filtered out.

  3. Identity Stitching Limit: Identity Stitching merges profile timelines based on standard person IDs (e.g., ECID, IdentityMap), but it does not copy over event-level execution metadata from Feedback events to Tracking events.

Recommended Solutions

Option 1: Use Derived Fields in CJA (Best Practice)

Instead of relying on the raw event field, create a Derived Field inside your CJA Data View to infer or copy the LOB metadata across the session.

  1. Go to CJA Data View Settings > Derived Fields.

  2. Create a new field that sets a Session-level or Person-level persistence for the LOB value.

  3. Set the condition so that when messageExecution.LOB is present (from the Message Feedback Event), it persists across subsequent Tracking Events within the same session/journey.

Option 2: Join Datasets via CJA Lookup or Derived Key

If you need exact reporting based on messageExecutionID or actionID:

  1. In your Data View, bring in the key messageExecution.messageID or actionID present on both schemas.

  2. Map your LOB metadata filter to Feedback Events or pass LOB via URL tracking parameters (UTM parameters) mapped in tracking schemas.

  3. Build your Workspace report using Attribution Models (e.g., Last Touch or Participation) so that the Open/Click metrics inherit the LOB dimension from the antecedent Feedback Event.

Option 3: Query Service / Data Prep Transformation

If you require this metadata natively in the dataset:

  1. Create a Data Prep mapping rule in Adobe Experience Platform (AEP) to pass LOB metadata into link tracking parameters (e.g., custom URL parameters on email links).

  2. Ensure the Email Tracking Schema extracts this parameter into the tracking event payload.

Ram_KKAuthor
Level 1
September 21, 2026

Hi ​@PrasanthThank you for your feedback. I have tried all the 3 options. Enabled persistence on the metadata events dimension as recommended. As this approach helps associate metadata values from the message feedback event dataset with email engagement events coming from the email tracking dataset, we are observing an unintended side effect. Because metadata events is now persisted dimension, metadata lob values from a previously qualified journey can continue to be associated with the profile's subsequent events. Due to persistence, the previous lob metadata value is carried forward and becomes associated with events from the subsequent journey. As a result, the second journey is also returned when filtering on the lob metadata value, even though it is not actually. 

Prasanth
Level 2
September 22, 2026

Hi ​@Ram_KK ,

To stop the previous LOB metadata from overwriting or contaminating subsequent journeys, you need to restrict the lifetime of the dimension so it resets as soon as a new message or journey starts.

Solution 1: Use a "Journey Reset" Trigger in Derived Fields / Persistence

Instead of using standard Session or Person persistence, bind the persistence strictly to the Message/Journey boundary:

  1. In your Data View, go to the settings for your LOB Dimension.

  2. Under Persistence Settings, set the allocation model to Most Recent (Last Touch).

  3. Change the persistence expiry limit to Event-Based Expiration or configure a Derived Field with conditional logic:

    • Define the rule: Set LOB to messageExecution.LOB when present.

    • Add a Reset Condition: Force the dimension to clear/reset whenever a new messageID or journeyVersionID is evaluated, or when a delivery feedback event fires without that specific LOB.

Solution 2: CJA Workspace Attribution Models (No Persistence at Dimension Level)

Rather than persisting the dimension globally in the Data View (which permanently alters how data is aggregated across all reports), keep the dimension unpersisted at the schema/Data View level, and handle the association in Analysis Workspace using Attribution:

  1. Turn off global persistence on the LOB dimension in the Data View.

  2. In Analysis Workspace, add your Email Opens and Email Clicks metrics.

  3. Right-click the metric > Modify Attribution Model.

  4. Set the model to Custom / Participation or Last Touch.

  5. Set the lookback window or scope to Lookback Window: Exact Journey / Action Level or bind it using a Journey ID / Action ID container:

    • Create a Hit-level segment: Where Journey ID / Action ID exists.

    • Apply this inside a Container scoped at the Message Execution level, preventing the attribution model from looking back to previous journey instances.

Solution 3: Join via AJO Journey ID + Action ID (Composite Key)

If you need exact 1:1 attribution without any risk of lookback bleed:

  1. Use journeyVersionID + actionID (or messageID) as your primary joining key, which is present on both Feedback and Tracking hits.

  2. In CJA Workspace, break down Journey / Action ID by Email Opens / Clicks.

  3. Apply LOB at the Feedback / Delivery level as a lookup context for that specific journeyVersionID + actionID combination rather than attaching LOB directly to the person/profile timeline.