Hacking Sitecore and Life one pipeline at a time!

List Manager: Contact Lists vs. Segment Lists

The Role of List Manager

When we think about mail delivery systems, we often think about the To: line. The list of people who will receive the eventual email. However, in Sitecore Email Experience Manager, the To: line is decided by choosing lists of contacts.  Which means, EXM doesn’t manage who is on those lists.

In fact, EXM relies on a relationship of other marketing functions of Sitecore. It starts with the fundamental construct: the Contact which can be viewed as a single object in the Experience Profile, whereas List Manager looks at collections of multiple contacts.

List Manager is the Grand Central Station of these functions. Contacts are loaded via List Manager and Contacts are sorted into lists via List Manager. It’s these lists, that EXM relies on, and which form the bases for list subscription.

Understanding Subscription

If someone is subscribed to an email, that means that are on a list that is managed by List Manager. If someone unsubscribes from a single email, that means the Contact is removed from the list. If someone globally unsubscribes, then this is a special action, where the contact is added to the Global Opt-Out list. On the Manager Root of EXM, there is a field for selecting which list is the global opt-out for that manager root. The common denominator is that List Manager is managing these functions, not EXM. 

This is the collection of lists that Corewarts uses to manage it’s subscribers.
Note the opt-out list that exists.

Type of Lists

As the image above shows, there are two types of lists: Contact List and Segmented List. There is a distinct difference between the two types of lists.

Contact Lists

The Contact List type is the default, standard list. This is a concrete list of contacts that can be managed manually. A tangible list of contacts is managed, that allows removal and addition of contacts to these types of lists.  In Sitecore 9, xConnect maintains and keeps track of which Contact List a Contact belongs to.

As an example, I have enrolled into Corewarts. Through the enrollment process, I was added to the Corewarts Enrollment List which is a Contact list.

In doing so, xConnect shows the following List Subscription.

  "ListSubscriptions": {
    "ConcurrencyToken": "99bfa36b-576e-4e34-8d61-1bfb7562d12f",
    "LastModified": "2018-12-15T14:52:50.7873975Z",
    "Subscriptions": [
        "Added": "2018-12-15T14:52:50.7348019Z",
        "IsActive": true,
        "ListDefinitionId": "6e72933a-c201-4d12-bb2c-34e710a25d97"

Note the ListDefinitionId which is the same as the List ID that shows up in List Manager’s URL.

Segmented Lists

On the other hand, Segmented Lists are very special, in that the author has little control over which contacts actually show up in the list. Instead, the author has the ability to curate a list of conditions that a contact must satisfy in order to be on the list. This means that Segmented Lists are making extremely good use of the xDB index and communication with xConnect.

To continue the Corewarts example once enrolled, the contact is sorted into a house of Corewarts. This sorting is visible in List Manager because I use a Segmented List.

Segmented Lists work off of the Rules Engine. In the example above the rule is specifying which contacts to show. The performance of this is fast, because it’s working off of the xDB index. The rule defined is as follows.

When conditions change on the contact, this Segmented List is immediately affected. In the event that this user is no longer in the Corewarts Enrollment List, per the rule, the contact is removed from the list. As such, if other contacts have conditions that change that would include them into this list, the contact is immediately added.

This means that there isn’t a concrete list of users on this list. This is going to be an important distinction when we get into EXM’s role of managing the unsubscribe, which happens to be the next mini-series.

Note below how the example contact is now in two different lists.

Another important distinction, is that because Segmented Lists are not a concrete list, xConnect does NOT keep track of the list on the contact profile. While it looks like a cut and paste of the above, this user, while in two lists, only shows up in one to xConnect.

  "ListSubscriptions": {
    "ConcurrencyToken": "99bfa36b-576e-4e34-8d61-1bfb7562d12f",
    "LastModified": "2018-12-15T14:52:50.7873975Z",
    "Subscriptions": [
        "Added": "2018-12-15T14:52:50.7348019Z",
        "IsActive": true,
        "ListDefinitionId": "6e72933a-c201-4d12-bb2c-34e710a25d97"

Managing Contact Lists

Aside from manually managing lists from with in the List Manager UI, there are two other ways to automate the management of lists.

Marketing Automation

There are two Marketing Actions within Marketing Automation that can control adding a contact to a list or removing them from a list (which in MA is called unsubscribe not to be confused with unsubscribe in EXM which is slightly different).

EXM Client API Service

The second way to manage lists is by using the EXM Client API Service. This allows a developer to leverage code to manage lists as needed.  On Day 1 of 25 Days of Christmas, I reviewed the API that is provided as part of Sitecore 9.1. You can also view Sitecore’s Documentation for Sitecore 9.1 Client API on their new doc site.

  public interface IClientApiService
    void SendAutomatedMessage(AutomatedMessage automatedMessage);

    void ConfirmSubscription(ConfirmSubscriptionMessage confirmSubscriptionMessage);

    void RegisterEmailOpen(EmailOpenMessage emailOpenMessage);

    void UpdateListSubscription(UpdateListSubscriptionMessage message);

The UpdateListSubscription method allows for a couple of different operations based on the UpdateListSubscriptionMessage options that are sent in through the parameter argument. One of the properties on the class is called ListSubscriptionOperation

These operations include:

  • Subscribe
  • Unsubscribe
  • UnsubscribeFromAll
  • AddToList
  • RemoveFromList

Each of these options uses different properties made available through the UpdateListSubscriptionMessage class.

Client API For Sitecore 9.0

There were substantial changes to the Client API in 9.1, which is covered here. However, it should be noted that the Client API for 9.0 is still valid. For more information about the 9.0 API please reference the Sitecore Documentation site.

Looking Ahead

Tomorrow, we’ll take a look at the Hostname Mapper, which is Sitecore’s solution for figuring out URL’s in complicated environments and multi-site setups.

Additionally, I’m preparing for the next major mini-series coming up Managing the Unsubscribe which is one of the most important pieces of managing a successful Sitecore EXM implementation.

Did You Miss EXM Live!?

You’re in luck!  You can now view EXM Live! On-Demand on YouTube!

Tagged as: ,

Categorised in: EXM, Sitecore

2 Responses »

  1. Lucidly explained and informative! Good article

    Liked by 1 person


  1. 25 Days of Sitecore EXM | Sitecore Hacker

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Enter your email address to follow this blog and receive notifications of new posts by email.

Join 1,238 other subscribers

Blog Stats

  • 132,847 hits
Follow Sitecore Hacker on WordPress.com
Sitecore® and Own the Experience® are registered trademarks of Sitecore Corporation A/S in the U.S. and other countries.  This website is independent of Sitecore Corporation, and is not affiliated with or sponsored by Sitecore Corporation.
%d bloggers like this: