Tealium’s “Universal Data Hub” (UDH) claims to be a central place for acting on real-time customer behaviour data. The promise: Get customer data into the “Hub” from anywhere, enrich it via rules, have it stitched and join it with data from other sources, and then send it server-side to wherever you need it, via connectors or APIs.
After a one-year test drive of UDH at a large E-Commerce platform, I wanted to share some of our experiences. This first part of this series looks at “Audience Stream“, one core component of UDH, and shows how we leveraged Visitor Stitching in combination with connectors (e.g. to Salesforce Marketing Cloud).
Tealium is an enterprise marketing technology vendor – mostly known through their Tag Management System (TMS) “Tealium iQ”. Some years back, Tealium released a technology called “Audience Stream“, which, together with “Event Stream” (stream raw hit-level data anywhere in real-time) and “Data Access” (Tealium saves the raw hit-level data, e.g. in a tabular format, e.g. in Amazon Redshift) is part of their “Universal Data Hub” (UDH) offering.
So What Does This Audience Stream Do Exactly?
What “Audience Stream” does is a bit hard to describe, but let’s say it is mostly a tool that can enrich customer data flowing in and act in real-time on the basis of that data. Since Audience Stream sits on top of Tealium iQ (you can use it with another TMS with some more work and caveats), you can leverage all the data that you manage in your TMS already anyway (= the “Data Layer” on your website). This makes the start faster because there is already so much data there to work with once you switch on Audience Stream.
Non-Data-Layer data can be pushed to Audience Stream as well, e.g. via several APIs and the so-called “Omnichannel Import”. We used that to upload additional customer data from our CRM. That can be simple stuff like the user’s gender or age, her lifetime revenue, or affinity scores created by the Data Science Team (e.g. to improve recommendations on the homepage). Note that Audience Stream does not support any data pulling mechanisms, so e.g. you cannot tell it to fetch data from a URL or a database, you have to push it to Audience Stream.
Based on that data and the rules you define in the interface, Audience Stream is then able to create “Audiences” (user lists, e.g. “Users Who Bought”) and Attributes (e.g. Metrics (lifetime revenue) or Strings/Arrays/Tallys etc. (e.g. “Last Category Bought”). These Audiences and their Attributes can then be sent in real-time to 3rd-party tools via “Connectors“. Later in this article, I will show an example where users are identifed as belonging to the “Cart Abandoners” audience and subsequently sent to the Salesforce Marketing Cloud (formerly known as “ExactTarget”).
It’s All Server-Side
One main difference to standard client-side data delivery is that the delivery to such connectors is all “server-side”, i.e. it does not bother or slow down your user’s browser with yet another script or network request – the only request from the browser that has to happen is the one from Tealium iQ to the Universal Data Hub (via the so-called Tealium “Collect” Tag). Everything from then on happens in Tealium’s UDH Cloud. I will write more on how we used this to do server-side tracking for Adobe Analytics in the third post of this series.
Visitor Stitching: “Bring Back” Historical Customer Attributes in Real-Time
What is very useful here is the so-called “Visitor Stitching“. It allows you to define multiple “Visitor IDs”, i.e. IDs by which a user can be identified (e.g. his phone number hash, email hash, his customer ID, a unique voucher code, a user ID from a third-party system, etc.). So whenever one of those IDs is available in the Data Layer, Audience Stream “brings back” all the other data for this user (including the other IDs if you have also defined them as a String Attribute).
Example 1: Stitched Cart Abandoners
- A registered, but not logged-in user, who, in his current browser is only known to your site through his anonymous cookie ID, receives a Push message on his phone with a link to a landing page URL that holds the user’s Registered User ID in a URL query string parameter, e.g. “https://example.com/url…?user_id=1234&…”.
- The URL parameter is automatically grabbed by Tealium iQ and written into the Data Layer as variable “qp.user_id=1234”.
- In Audience Stream, you have set up a Visitor ID Attribute for Registered User IDs, and your rule says to set it whenever the Data Layer Variable “qp.user_id” is populated with a value.
- Now, Audience Stream performs a real-time lookup for Registered User ID “1234” and retrieves all the Visitor Attribute data for this user (e.g. her gender, her lifetime revenue, the devices she used in the past, the Marketing Channels she has visited you from in the past, or the fact that she is an “unhappy customer” based on her last Happiness Score vote)
- This enriched data can now be sent basically anywhere. E.g. when user “1234” now puts products in her basket but does not check out within 2 hours (a so-called “cooldown” period), Audience Stream’s Salesforce Marketing Cloud connector sends 1234’s Salesforce ID (which was also retrieved via Visitor Stitching) and the last products in the basket) right into a Salesforce Data Extension.
- Salesforce then does the rest (e.g. checks if this user has opted in, generates the email etc.).
[Side Note: All this can be done without involving a single developer which means you can get ahead rather quickly. Learning Audience Stream and debugging it, however, is quite a time investment for you, the Marketing Technology Specialist. My experience is that people who do not already know their way around the Tag Management System are lost in Audience Stream, so don’t expect your online marketing regulars to be capable of working in it.]
We set up multiple Salesforce Marketing Cloud connectors like the one above. Other examples:
- Price-drop Reminder: Users view Products, but don’t buy them -> when the price of one of those products drops, they get a reminder email
- “Recommend us” for likely recommenders only: Sending “recommend us to your friends” emails to users who did something on the site which made us think their likelihood to give us a good recommendation is higher (can’t go into detail, sorry)
- Better targeted bulk emails: ensure that mass emails about offers in a certain category / brand are sent only to users who have shown an affinity in the respective category / brand according to their web behaviour
Example 2: Migration of User IDs
Visitor Stitching proved to be especially useful in combination with Omnichannel Imports. Because here, you add customer data from other sources, e.g. your CRM, and then this data becomes available in systems that usually don’t provide that data. E.g. this way you could get the gender of your users into the Data Layer even if that attribute is not provided in your Data Layer by your developers (more on this later).
In January, we had to migrate from the old shop system to a new one with a totally different User ID logic and a different Customer ID. In a normal scenario, we would have had to start at zero again. All the attributes of people using another browser or having deleted their cookies after the switch to the new platform would be treated like new users by all tools: Analytics for example would start at a Repeat Purchase rate of 0%. Another affected example would have been our logic in Tealium which uses historical customer data (e.g. his last Net Promoter Score vote) to decide which kind of feedback survey we want to show to a user. Here, all users would have been treated like newbies.
So we needed some way to tell Audience Stream that “Old User ID:1234” = “New User ID:abcd”. Then it would be able to bring back all the data of Old User ID “1234” as soon as the user authentifies himself with his New ID “abcd”. How we did that:
- We set up the new User ID as a new String Attribute and Visitor ID in Audience Stream.
- We did an Omni-Channel Import with a CSV file with a mapping of Old ID to New ID (actually several imports, because before we had two IDs depending on registered or guest purchaser, but let’s not get too complicated here).
- Now when the user authentified with his new ID, we could see the old customer data being stitched back and becoming available for connectors, Data Layer Enrichment, etc…

Audience Stream’s “Trace” helps debugging what happens behind the scenes (since all is server-side, you can’t see the data in the browser like with traditional HTTP debuggers). Here, a Visitor got stitched after a login (middle), he was then “enriched” = he was assigned several Audiences (top left, e.g. “Happiness Score 4 or 5”) from his previous history. See also the Visitor Attributes retrieved (right).
Next Part: Data Layer Enrichment – Gets Visitor Data Back Into the Browser
Did I say “Data Layer Enrichment”? Yes, and that is another useful component of Audience Stream (see the purple line in the diagram at the start of this article).
With Data Layer Enrichment, the attributes retrieved via Stitching or rules-based Enrichments are pushed back into the browser and become available like regular Data Layer variables! So you can use them e.g. to populate Custom Dimensions or Metrics of your Adobe or Google Analytics tags or improve the measurement of long-term Analytics metrics (where you are usually screwed if you depend on cookies), use it for a segmented A/B Test or offer someone to chat with for those customers that you are at risk of losing (e.g. for those unhappy users with a bad last Happiness Score) – and anything else you can usually do with JavaScript in a Tag Management System.
Don’t miss the next post on Tealium Audience Stream for real examples on what we did with the combo of Audience Stream Attributes, Visitor Stitching and Data Layer Enrichment!
Leave a Reply