Business Unit Subscriber Status in Salesforce Marketing Cloud

Photo by Rob Curran on Unsplash

There is a lot of confusion surrounding how to access subscriber opt-in status for specific business units within Salesforce Marketing Cloud enterprise accounts. The situation is made complex by the fact that the _Subscribers data view holds Parent BU information which often causes discrepancies for marketers trying to discern the opt-in count for their BU or Brand.

This article will discuss first the background of subscriber management within the platform, and then point you towards some solutions for retrieving the business level status of a subscriber.

All Subscribers

The All Subscribers list is considered the master list of records for the Marketing Cloud Email Studio account. Every subscriber in your account appears in the All Subscribers list.

The All Subscribers list is shared by all Business Units in your account. When you send an email to a data extension, the contacts will be added to All Subscribers at the Parent Level. This means that a Subscriber added to All Subscribers in Business Unit A will be visible in the All Subscribers list in Business Units B and C along with all the profile attributes populated in Business Unit A.

More on this here

Business Unit Filters

You can hide/filter subscribers so only specific subscribers appear at the Child business unit level. This is done using ‘Business Unit Subscriber Filters’. When you configure a filter on the business unit, only the subscribers who match the rule will appear in All Subscribers of the child business unit — but they will always live on the parent business unit.

Subscriber Status

The subscriber status in Marketing Cloud is indicated by the shirt colour of the icon to the left of the subscriber’s email address. The available statuses in Marketing Cloud are as follows:

  • Active — green: able to receive emails with no issues

https://help.salesforce.com/articleView?id=mc_ds_subscribers.htm&type=5

https://help.salesforce.com/articleView?id=mc_es_bounce_mail_management.htm&type=5

Subscriber Status in Business Units

Enterprise 2.0 admins can manage how their accounts handle business-level unsubscribes in Email Studio. You can choose one of two options:

1. Subscribers will be unsubscribed from this business unit only

2. Subscribers will be unsubscribed from ALL business units in the Enterprise

When a business unit uses the option “Subscribers will be unsubscribed from this business unit only”, a contact’s subscriber Status is specific to each Business Unit, despite all residing in the Parent BU’s All Subscribers list. A shortcoming of the platform is that the subscriber status of a user relative to that specific business unit is not easily accessible.

When a contact is created (or imported) to All Subscribers for any Child Business Unit for the first time the ENT.All Subscribers will retain that status in the parent level. And this ‘active’ status does not change even when the subscriber opts-out from the Child BU. As per documentation:

If you unsubscribe a subscriber in the All Subscribers list at the Business Unit Level via an Automation Studio import activity, the subscriber is not unsubscribed in the All Subscriber list at the Enterprise Level.

Quick Recap

  • The subscriber status in Marketing Cloud is indicated by the shirt colour of the icon to the left of the subscriber’s email address.

How can we retrieve business unit level subscription status within the business unit?

All Subscribers represents every subscriber in the entire Enterprise 2.0 account, not just a single business unit.

Typically, we would revert to the backend system Data Views to query this information. You may be tempted to use _ListSubscribers or even _Subscribers. However, business unit membership and subscriber status are maintained in a hidden data view.

Consequently, the ENT._Subscribersdata view does NOT accurately reflect business unit status or membership. Similarly, the _ListSubscribers view does not accurately reflect business unit status even when you use a “filter” WHERE clause that defines the listID of the All Subscribers list. It still shows you the status of the parent level because the All Subscribers list is the same across the account.

Shortfall: the All Subscribers List ID is common across the enterprise account

Option 1 — Tracking Extract

The most accurate business unit membership and status come from a tracking extract that specifies the business unit. In the Child Business Unit, create an automation with a Tracking Extract activity and ensure to tick ‘Include All Subscribers’ checkbox. The resulting subscribers.txt file will contain their status relative to that business unit.

Extract Subscribers. Include All Subscribers.

Include all subscribers in the Subscribers file of the tracking extract.
If unchecked, the extract will only include subscribers with activity corresponding to the events selected to include in the extract (ie, clicks, bounces, opens).
Reference

Option 2 — Mock All Subscribers

In a detailed post by Brad Sapkota on the Salesforce Stack Exchange, he shares a workaround to get the right status in the BU level. The setup takes an automation build and is limited to 1-hour repeated schedule (unless using an API to call the automation more frequently). You can view the original post here.

When you create the “Mock All Subs” list and import subscribers into this list, the correct BU Subscriber status will auto-populate via the import activity. You can then read the BU level subscriber status by querying the _ListSubscribers data view for the newly created “Mock All Subs” list.

Option 3 — BusinessUnitUnsubscribes Data View

The _BusinessUnitUnsubscribes data view will also show the current BU-wide subscription status, as long as the current status is “unsubscribed”. In other words, records returned when querying this DV will only ever be currently unsubscribed contacts for the business unit. When a subscriber is reactivated (their status is set back to ‘active’ in All Subscribers) and their ‘old’ unsubscribe entry in the DV is no longer returned.

SELECT 
SubscriberKey,
BusinessUnitID,
CONVERT(datetime, UnsubDateUTC AT TIME ZONE 'UTC'
AT TIME ZONE 'Aus Eastern Standard Time') as UnsubDateUTC,
UnsubReason
FROM
_BusinessUnitUnsubscribes

This will NOT reveal ‘held’ or ‘bounced’ Subscriber status — only unsubscribed. Now, depending on your use case and why you need BU subscriber status, consider the Mock All Subs solution if a more complete picture is required, as this will return statuses ‘active’ ‘held’ ‘bounced’ ‘unsubscribed’ for the subscriber relative to the business unit. Alternatively, the below SQL snippet should also do the job.

SELECT 
x.SubscriberKey,
CASE WHEN EXISTS ( SELECT SubscriberKey
FROM ENT._BusinessUnitUnsubscribes b
WHERE b.SubscriberKey = x.SubscriberKey
)
THEN 'unsubscribed'
ELSE ( SELECT [status]
FROM ENT._Subscribers s
WHERE s.SubscriberKey = x.SubscriberKey
)
END AS [SubscriberStatus]
FROM
[your_data_extension] x

As a side point, but somewhat related, note that the _Unsubscribe DV holds unsubscribe events that are tied to a specific send job. Thus it will not log an event when a subscriber’s status is changed due to import, Subscriber update API request, or when changed via UI.

I am a certified Salesforce Marketing Cloud Consultant at Bower House Digital in Melbourne, Australia.