Open tracking for multiple journey entries in Marketing Cloud


If you happen to have a use case where a subscriber runs through a journey multiple times and you want to check if the email has been opened you are going to have a hard time without knowing how engagement splits work in Salesforce Marketing Cloud.

The basics

Launching something without being sure if everything works as you expect it to do is never a good idea. And this is also true for engagement splits in Salesforce Marketing Cloud. These to my knowledge work as designed, but with multiple sends of the same email/journey to one single subscriber they don’t behave the way I supposed they would.

A basic scenario where multiple sends to one subscriber are necessary is sending offers to customers where you want to send a different follow-up if the initial email has been opened.

Engagement split behavior

The described scenario works perfectly fine if you only send one offer to a customer while one journey version is running. But if multiple entries occur, this changes as the open tracking pixel inserted to the email isn’t based on the very email-send but rather the email activity/triggered send. Therefore if one of your offer emails has been opened by a customer, every subsequent offer sent to the customer will be treated as if it was opened, even if your customer never actually saw the offer.

Possible solutions

If you definitely need this functionality there are two options:

  1. Wait for the functionality to be added (I talked to Salesforce and they already have an internal ticket for adding this functionality to open tracking and engagement splits. Currently scheduled to be released on August 25, 2017.)
  2. Build your own tracking pixel and custom engagement split

Custom tracking pixel and engagement split

If you choose to go for option two: I’m sorry, but at this time I can’t add a complete code example for this. However if I got time I’ll add a code example in the future. Until then I’ll explain the necessary steps/parts for this solution:

  1. Create a tracking pixel that takes the subscriberId, jobId, etc. as query parameters
  2. Write a backend for your pixel that writes the data from the query parameter (and any additional information like a timestamp for example) to either your database or a data extension within Salesforce Marketing Cloud.

To check the results in Marketing Cloud you’ll need a custom split activity that checks the database or data extension you wrote your pixel’s tracking information to, and sends the contact to the desired path in your journey (opened or not).

Like for the pixel, I haven’t published the complete code for this custom engagement split yet, but for another custom split I already have a working example. You can find the code on my github account: Salesforce Marketing Cloud - Service Cloud Custom Split Activity. Starting from this code, you just need to change the inArguments to include the needed information to query the tracking data (subscriberId, jobId, etc.) and the execute-route of the backend to check your tracking information in the database or data extension.