Expand my Community achievements bar.

Never miss an update of the Adobe Journey Optimizer Community Lens! Subscribe now to get the latest updates, insights, and highlights delivered straight to your inbox every time a new edition drops.

What’s the best way in AJO to pull a list of customers who received a specific journey message (email or SMS)?

Avatar

Level 2

Hi,

I’m struggling to get an accurate count of customers who actually received a specific journey message. I tried creating an audience using the journey version ID or journey action ID, but the numbers are always wrong. I was told this happens because if the journey has multiple comms (e.g., 2 emails + 3 SMS), customers who receive more than one get counted multiple times.

I’m working with both one-off campaigns and journeys that trigger regularly (e.g., every 15 days), and I just need a clean list of customer IDs who received the communication.

Is running a Query Service query against the tracking datasets (email/SMS) really the only reliable way to do this? And is there any way to turn this into a reusable audience in AEP?

I have access to SFTP and using that to get csv file..

Any advice or examples would be appreciated.

1 Reply

Avatar

Level 2

Hi @ShushmitPa 

 

You need an accurate, deduplicated list of customers who received a specific journey communication and want to turn this into a reusable audience in AEP without relying solely on tracking datasets.

Solution: Log Custom Experience Events for Each Communication

Instead of querying raw tracking datasets (which are great for reporting but not for segmentation), you can create a custom schema and dataset to capture communication delivery events. This approach makes the data actionable inside AEP and reusable for downstream journeys.

Step 1: Create a Custom Experience Event Schema

  • Base class: XDM ExperienceEvent: ORG_Journey_Action
  • Add a custom Field Group (e.g., _tenantId.journeyCommunicationAction) with fields like:
    • journeyCommunicationAction.journeyName – Human-readable name (e.g., "Abandoned Cart").
    • journeyCommunicationAction.channel – email, sms, push, etc.
    • journeyCommunicationAction.subject – Email subject line.
    • journeyCommunicationAction.offerId / offerName – If offers are included.
    • journeyCommunicationAction.messageName – Friendly name for the message.
    • journeyCommunicationAction.sendDateTime – When the comm was sent.
    • eventType – e.g., "journeyEmail/SMS.sent".
    • _id – Unique UUID for deduplication.
  • Include identityMap with primary identity (email, phone, ECID, etc.).
  • Enable it to profile

Step 2: Create a Dedicated Dataset

  • Type: Experience Event dataset: ORG_Journey_Action
  • Bind it to the schema above.
  • This dataset will store all communication events triggered from journeys.
  • Enable it to profile

Step 3: Create an HTTP API Ingestion Flow (Streaming Pipeline)

Before adding the custom action, you need a way to ingest the event data into AEP:

  • Create an STPL (Source Template) request to define the ingestion pipeline.
  • Configure:
    • Source: HTTPS API endpoint that will receive the payload from AJO.
    • Target Dataset: The dataset created above: ORG_Journey_Action
    • Mapping: Map JSON fields from the custom action payload to schema fields.
  • This creates a streaming ingestion pipeline so that every event from AJO flows directly into AEP in near real-time.
  • Test ingestion with sample payloads to ensure data flows correctly and schema mapping is valid.

Step 4: Add a Custom Action in Each Journey Step

  • After each Email/SMS action, add a Custom Action that POSTs a JSON payload to your ingestion endpoint.

 

Step 5: Build Audiences in AEP

Once events are ingested:

  • Use Segment Builder with conditions like:
    • eventType = "journeyEmail/SMS.sent"
    • communication.journeyName = "Abandoned Cart"
    • communication.channel = "email"
    • Within last X days
  • This gives you a deduplicated audience because segmentation works at the profile level.

Step 6: You can event Trigger Subsequent Journeys if you have such a use case

  • Create a Unitary entry event that listens for:
    • eventType = "journeyEmail/SMS.sent"
    • communication.journeyName = "Abandoned Cart"
  • Add a Wait step (e.g., 7 days), then check for purchase or redemption before sending the next comm.

Why This Works

  • Creates a single source of truth for communication delivery.
  • Enables reusable audiences and downstream triggers.
  • Works for both one-off campaigns and recurring journeys.

Please review and let me know if this helps.

 

Thanks a lot.

Sashanka B