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.

4 Replies

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

Avatar

Community Advisor

@ShushmitPa Yes, you can set up an audience to target customers who have received communication from a specific journey or campaign, and a query service is not required for this. For example, you can create an audience of customers who have successfully delivered a message from a journey in the last 30days. This method can also be applied to campaigns and the SMS channel.Screenshot 2025-11-17 at 1.12.43 PM.png

 

Thanks, Sathees

Avatar

Level 2

Hi @SatheeskannaK 

The audience-builder option looks much simpler, but I’m still struggling because when a journey has multiple comms (e.g., 2 emails + 3 SMS), I end up with inflated counts due to multiple events per profile. Is there a clean way to dedupe within the audience builder without relying on Query Service? Please see SS below

I’m mainly dealing with:

  • one-off campaigns

  • journeys that fire periodically (e.g., every 15 days)

…and I just need a reliable way to get unique customers who actually received the comm.

Do you recommend sticking with the simpler audience-builder method for this use case, or is the custom event logging approach the more reliable long-term solution?

Thanks again, really appreciate the help.

 

I report section showed around 1m received email or SMS from the journey but when I create the audience it goes ove 2.4 m, during exporting the audience using sftp in mapping I even selected deduplication to remove any duplicates but no change:

Note: I have tried it with Message execution id, Journey version id, but count remains same

ShushmitPa_0-1763416332603.pngShushmitPa_1-1763416387735.png


If I remove feedback status, the count actually drops but not sure if its the right way:

ShushmitPa_0-1763417625539.png

 

 



Avatar

Level 2

any idea why this is happening @SatheeskannaK ?