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.
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.
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.
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
- Bounced — yellow: one or more bounces (soft or hard) are received for the subscriber
- Unsubscribed — red: unable to receive emails due to an unsubscribe
- Undeliverable/held — grey: deactivated due to repeated bounces. If the bounce was from a trusted domain, only one hard bounce is required.
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.
- 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: Active, Unsubscribed, Bounced and Held.
- The Active or Unsubscribed status of users in All Subscribers can vary across BUs and depends on unsubscribe settings of the BU.
- When the business unit is set to ‘Unsubscribe from this Business Unit Only’, the Active and Unsubscribed status of All Subscribers is maintained separately across BUs.
- The Bounced and Held status will be the same across all BUs in All
Subscribers list — irrespective of the settings — given bounce data is received from ISPs and is relevant across the enterprise account.
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.
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
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.
CONVERT(datetime, UnsubDateUTC AT TIME ZONE 'UTC'
AT TIME ZONE 'Aus Eastern Standard Time') as UnsubDateUTC,
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.
CASE WHEN EXISTS ( SELECT SubscriberKey
FROM ENT._BusinessUnitUnsubscribes b
WHERE b.SubscriberKey = x.SubscriberKey
ELSE ( SELECT [status]
FROM ENT._Subscribers s
WHERE s.SubscriberKey = x.SubscriberKey
END AS [SubscriberStatus]
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.