8

What ways could you create a data extension that contains all the subscribers (SubscriberKeys) that are currently “in” a Journey (Journey Builder)?

The Journey I would like to do this for is a complex activity with multiple decision branches resulting in multiple possible journey durations. For example; if the customer didn’t open Email1 after 2 days, then send Email2; else Exit Journey. If the customer didn’t open Email2 after 2 days, then send Email3; else Exit Journey. Wait 2 more days, then End Journey. The minimum journey duration for the above example is 2 days, while the maximum is 6 days.

Note that I don’t want a list of subscribers that “entered” a Journey, but a list of the ones that are “currently in” a Journey and have not yet exited. Answer must account for non-standard Journey exits including Unsubscribes/Contact Deletes, etc.

4
  • Does this help? gortonington.com/journey-history-for-last-30-days-via-api
    – zuzannamj
    Commented Feb 4, 2020 at 13:36
  • Maybe i am just dull but you can just do that with engagement splits inside a journey and select opens or clicks or whatever... then wait 2 days and send the next email. Where is the need for the dataextension? Commented Feb 4, 2020 at 13:44
  • Thanks Zuzannamj, however I’m look for a “currently in journey”, not a log of events after a subscriber has complete each journey activity - since it’s possible for a subscriber to complete an activity in the journey, and then be deleted/unsubscribed/etc shortly after; which will not show up in that API (to my understanding). Commented Feb 4, 2020 at 13:47
  • Hi Johannes, I’m looking for a DE of subscribers in a complex journey where the “journey duration” is not fixed. I used the engagement split example above to exemplify how this “unknown journey duration” could operate in a complex, multi-decision branching journey. Commented Feb 4, 2020 at 13:52

2 Answers 2

11

Update May 2021:

Due to recent changes in the internal table structure of Marketing Cloud Journey Builder, it is no longer possible to request this custom data view. I will provide an update as soon as there is a way of gaining insights into Contact journey presence.

END of update

My best advice is to ask Salesforce for a custom data view. This is something that can easily be done, however it will have a cost, as it is a custom development. However, it will let you achieve exactly what you are after. Here is some sample data from such a custom data view, fetched in Query Studio: enter image description here

select JourneyVersionNumber
      ,JourneyName
      ,JourneyStatus
      ,ContactKey
      ,ContactID
      ,ContactStatus
      ,EntryDate
      ,ExitDate
from _ContactJourneyPresence

You can also use a WHERE clause, showing only those contacts who currently are a part of a journey:

select JourneyVersionNumber
      ,JourneyName
      ,JourneyStatus
      ,ContactKey
      ,ContactID
      ,ContactStatus
      ,EntryDate
      ,ExitDate
from _ContactJourneyPresence
where ContactStatus
= 'Active'

Here you will see all these records have an empty ExitDate, meaning they still are part of a journey:

enter image description here

Given that such a task is custom development, it is more or less up to you to define which fields you need to have as part of such a data view, as long as the information is available within the platform.

Any "exit" (regular exit, exit criteria, goal criteria) will be reflected in ExitDate. It is afaik also possible to provide the type of exit, kicking the contact out of the journey, as a separate column.

17
  • 4
    How on bloody earth shall a customer know that salesforce can provide something like that. It is just really stupid that they do not share this info. Atleast i did not know that they offer these services. Great advice though ;) Can you give an estimate of the cost? Again your answer "competes" against Jonas :D Commented Feb 4, 2020 at 15:02
  • 2
    Custom Data Views, who would have thought :-) And yes please do tell how much something like this could cost?
    – zuzannamj
    Commented Feb 4, 2020 at 15:07
  • 2
    @zuzannamj I'm an architect, not a salesman ;-) Commented Feb 4, 2020 at 15:10
  • 1
    @AnonWonderer - yes, see my updated answer Commented Feb 4, 2020 at 15:16
  • 3
    My recommendation I give every client and user I run into is if you have an idea on something but can't think of a good way to do it with the current toolset then put in a case in support or reach out to your account rep. Worst they can say is that it is not possible, but a lot of time (for a price) they can give you an option. Commented Feb 4, 2020 at 15:58
2

Sounds like a usecase for a journey tracking data extension:

Sendable DE: SubscriberKey, Status, Timestamp

On entering the journey use an update contact event to track a field "status" with value "entered" and set timestamp to "current date". You do not need to fill anything into the SubscriberKey field, this is populated automatically if it has that name.

On all exits, track the value "exit" in the same DE.

Then, build an SQL query that filters down all records in the tracking DE that do NOT have status "exit". Join this with your All Subscribers List, or wherever you track unsubscriptions to account for those. Since the tracking DE MUST be sendable anyway to use Update Contact, contact deletion will affect records in that DE and they won't be listed.

Limitation: Exit tracking doesn't work with Goal-based-exits or Exit criteria. These cannot really be tracked, so my suggestion is, refrain from using those.

5
  • Thanks Jonas, this is my current solution that I’ve been using since Journey Builder was released. I can confirm it works, however with limitations such as timing (how often you refresh the SQL) and goal based exits - as you mentioned. I’m glad that others have defaulted to this method of subscriber tracking! Commented Feb 4, 2020 at 18:41
  • 1
    We do something similar to this, except we have a sweeper that sweeps updates to a log with a proper primary key, since update contact doesn't respect PKs. Commented Feb 5, 2020 at 14:02
  • Just do understand it correctly: You use the updatecontact activity like jonas said and you defined another dataextension with properly configured contraints like primary keys and then you use a sql query or something like this to get it to the log dataextension? Whats your schedule on the sweeper and what actually is your sweeper? Actually the schedule would be the most interesting part i guess. Commented May 19, 2020 at 13:29
  • @JohannesSchapdick - If you want more info on Adam's solution, he posted a blog post on this - sprignaturemoves.com/journey-logging-using-update-contact Commented Feb 8, 2021 at 20:59
  • This was a good read. We do something similar. It hasn't been mentioned so worth pointing out that to get around the exist criteria issue, you can instead put your exit criteria in decision splits and then have your Update Contact activity down that path to mark people as exited. It can make the canvas a bit messier but at least you get 100% coverage. One caveat: won't work with Goals :(
    – Ben
    Commented Mar 2, 2021 at 3:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .