Journey Builder 'Journey Tracking Data Extensions'

Has anyone implemented Journey Tracking Data Extensions. Where the progress of a Journey is tracked in an Data Extension.

Are there any best practices? Gotchas? My assumption is each Journey has to have it's own Journey Tracking DE because the Contact Update Activity does an add/insert and keys off of a Contact:ID.

What types of things are tracked? Entry/Exist, last activity/date, etc

2 Answers 2


Asked a while ago, but I'll offer a few of my best practices:

  • Always insert a date/time stamp for an activity
  • Track progress within Journey
  • Use the DE as an exclusion source from Marketing email (ie, if subscriber receive a Journey email, exclude from regular Marketing email)
  • Other than UPDATE CONTACT you can also use an UPSERT in the email HTML to mark Journey progress
  • Journeys can share a DE to update, and I have but...

The one "gotcha" I've had is when trying to update the "On/Off switch" for marketing exclusions from multiple journeys using a single DE is making sure the order of the updates occurs such that the final value reflects current exclusion state.


Sorry for domant update - I found this question will looking for another answer.

We've solved this by creating an "InJourney" Data flow that holds the "Active" data for a given journey; which allows us to track the progress of customer through that journey.
The image below shows the 4-step Automation to achieve this (5th step is the Journey event trigger).

enter image description here
Lets assume the activity above is for a Birthday Campaign (in Journey Builder)

  1. Using an SQL Query, we select the new/eligible subscribers each day. Where Birthday Anniversary is Today. To ensure we are not re-adding subscribers, we also exclude the currently "in journey" subscribers. We then add these Subscribers to a DE called [NewToday] with a field called "JourneyFlag" set to 0. Important for later.
  2. Next, we append these "new today" subscribers to the [InJourney] DE. This is the primary Journey DE, and needs to be connected to All Subscribers in the Contact Builder.
  3. Now the [InJourney] DE has existing subscribers (JourneyFlag == 0) and existing subscribers (from previous days/run, where JourneyFlag != 0). So we update another DE called [JourneyLOG], which is like a Logging DE for all subscribers that have ever been in the journey (great for reporting, etc).
  4. Lastly, we need to remove subscribers from the [InJourney] DE, since we want subscribers to re-enter the Journey next year on their Birthday! So we run an SSJS activity to delete records where the "JourneyFlag" == -1 (we chose -1 as our "ended" flag).

    The Journey listens to "New Records" in the [InJourney] DE, with a contact entry filter condition of "JourneyFlag == 0".
    The first activity of the Journey is to update the JourneyFlag to 1, using a Update Contact activity, targeting the [InJourney] DE. This ensures subscribers in the Journey aren't re-entered, and also tracks the progress of the record.

    The Birthday Journey we use has 3 emails during a 2 week period. After each email activity, a "Update Contact" activity updates the subscriber's "JourneyFlag" to 2, 3, 4 and so on. At the end of the Journey, an Update Contact activity updates their flag to -1, which is the signal for the SSJS activity to remove them on the next run.

    This is a very complex way to use a native Salesforce function; however it gives us full reporting and control of a customer's Journey progress.

You must log in to answer this question.

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