Skip to main content

SFMC Mobile Connect Data Views

Dive deep into SMS System Data Views - the backend Marketing Cloud data. Actionable pearls await.

System Data Views

Learn about SFMC System Data Views Basics and specific backend tables covering Email Studio, Journey Builder & Automation Studio data here.

MobileConnect Data Views

MobileConnect Data Views are unique, as most of them are no longer supported by Salesforce. But some still works. All those data views show data limited to a specific Business Unit.

You Should Know

Most of the MobileConnect data is assigned to Mobile Number, not Contact. It means that it might be shared by a few contacts (if multiple have the same mobile number set) or migrate between them (if the mobile number gets reassigned).

It shouldn't be a big problem in B2C environments, as most people will have their mobile number and keep it long. However, remember that unused numbers might be recycled after a few years by telecom and go back to the market and given to a new user.

Mobile number recycling is much more present in the B2B scenario, where there is a bigger chance for shared mobile numbers and much faster recycling of the numbers. Many companies reuse the phone number of the employees that left.

When working with Mobile Number history of engagement and subscription, take this into consideration.

_MobileAddress

_MobileAddress Data View is officially not supported by Salesforce. But it's too good not to use it. And there is no replacement for it. Why? Because Marketing Cloud still uses this Data View as a backend data source for the MobileConnect Demographics Data.

NameDescriptionData TypeNullable
_MobileIDMobileConnect Contact IDNumberX
_ContactIDGlobal Contact ID (not Contact Key)Number
_MobileNumberMobile number for the subscriberText
_StatusStatus of the ContactNumberX
_SourceSource of the ContactNumberX
_SourceObjectIdID of the object if _Source = 10TextX
_PriorityIn case the contact uses multiple mobile numbers, the Priority field's value establishes the order in which to use those mobile numbers. _Priority = 1 is first in orderNumberX
_ChannelCommunication channel. Used to be Mobile, now not in useTextX
_CarrierIDNumeric code for the mobile carrier used by the contactNumber
_CountryCodeTwo letter country codeText
_CreatedDateDate the subscription was createdDate
_CreatedByPerson responsible for contact creationDate
_ModifiedByPerson responsible for contact modificationTextX
_CityContact's CityTextX
_StateContact's StateTextX
_ZipCodeContact's Zip CodeTextX
_FirstNameContact's First NameTextX
_LastNameContact's Last NameTextX
_UTCOffsetThe number of hours from which the user's time zone deviates from UTC. Defaults to 0NumberX
_IsHonorDSTWhether the user's time zone observers Daylight Savings Time or not. Defaults to falseBooleanX

When working with _MobileAddress Data View:

  1. There is no guarantee of how long it will work and how long the data will be correct. Be sure you are checking it periodically or - even better - have validation in your code.
  2. The rule of thumb when working with MobileConnect is to use the official, supported solutions. Only when they cannot deliver - check whether _MobileAddress can help.
  3. Do not use the User Interface editor in MobileConnect Demographics part of the Contact to edit information in this Data View. It is broken and overwrites all connected Mobile Numbers with a change made to just one. However, the changes are possible with SSJS - including ContactID and MobileNumber changes and limited merging. It is the most significant selling point of this Data View.
  4. _MobileAddress Data View is available in Data Designer within MobileConnect Attribute Group. It allows you to add custom fields to it that you can later leverage in sends.
  5. Whenever creating a MobileConnect Contact, be sure to provide the _MobileNumber with the dialling code prefix (without the + or 00). For example, Poland has a +48 dialling code and nine-digit numbers, so the correct format is 48123456789. Double-check whether _CountryCode is an appropriate two-letter code (for example, PL).
  6. The Contact may have multiple Mobile Numbers assigned, but it will receive communication only to the one with the highest _Priority.
  7. Whenever you add a Mobile Number to a new Contact, for all other Contacts with this number, it gets lower _Priority (SFMC assumes that it was transferred).
  8. _ContactID makes this Data View useful for cross-channel applications. New Data Views (_SMSSubscriptionLog and _SMSMessageTracking) have Subscriber Key information, but if the Mobile Number is shared, it won't provide the data.

_MobileSubscription

_MobileSubscription Data View is officially unsupported by Salesforce. Marketing Cloud still fills it with data, but there is no guarantee of how long it will persist or whether it will be correct.

Worry not, there is a nearly identical Data View available and supported - _SMSSubscriptionLog.

The new Data View contains nearly all the same fields (sans _CreatedBy and _ModifiedBy) and even adds three more (LogDate, SubscriberKey and MovileSubscriptionID).

NameDescriptionData TypeNullable
_SubscriptionDefinitionIDThe unique ID of the subscription recordText
_MobileNumberMobile number for the subscriberText
_OptOutStatusIDWhether the subscriber has opted out of SMS messagesTextX
_OptOutMethodIDMethod the subscriber used to opt-out of SMS messagesTextX
_OptOutDateDate, the subscriber, opted out of SMS messagesDateX
_OptInStatusIDWhether the subscriber has opted-in to the SMS messagesText
_OptInMethodIDMethod the subscriber used to opt-in to the SMS messagesTextX
_OptInDateDate, the subscriber, opted-in to the SMS messagesDateX
_SourceThe subscription sourceTextX
_CreatedDateDate the subscription was createdDate
_CreatedByPerson responsible for subscription creationTextX
_ModifiedDateDate the subscription was modifiedDate
_ModifiedByPerson responsible for the modificationTextX

You shouldn't be working with _MobileSubscription Data View. Use _SMSSubscriptionLog instead.


_SubscriberSMS

_SubscriberSMS Data View is a legacy table. It is neither supported nor updated, and you won't have records there. Marketing Cloud used it in pre-MobileConnect times, so I do not recommend using it for any projects.

NameDescriptionData TypeNullable
SubscriberIDThe subscriber ID for the affected subscriberNumber
SubscriberKeyThe subscriber key for the affected subscriberText
MobileNumberMobile number for the subscriberPhone
TransactionalOptInWhether the subscriber has opted-in to Transactional SMS messagesBoolean
TransactionalOptInDateDate, the subscriber, opted-in to Transactional SMS messagesDate
TransactionalOptOutDateDate, the subscriber, opted out of Transactional SMS messagesDateX
MarketingOptInWhether the subscriber has opted-in to Marketing SMS messagesBoolean
MarketingOptInDateDate, the subscriber, opted-in to Marketing SMS messagesDate
MarketingOptOutDateDate, the subscriber, opted out of Marketing SMS messagesDateX
SMSCarrierNameName of the SMS Carrier used for deliveryTextX

You shouldn't be working with _SubscriberSMS Data View.


_SMSSubscriptionLog

_SMSSubscriptionLog Data View stores complete information about subscription status for each Mobile Number. It replaced the unsupported _MobileSubscription Data View.

NameDescriptionData TypeNullable
LogDateThe date the subscription is loggedDateX
SubscriberKeyThe subscriber key for the affected subscriberText
MobileSubscriptionIDThe unique ID of the subscription recordNumber
SubscriptionDefinitionIDThe unique Keyword ID (GUID())Text
MobileNumberMobile number for the subscriberPhone
OptOutStatusIDWhether the subscriber has opted out of SMS messagesNumberX
OptOutMethodIDMethod the subscriber used to opt-out of SMS messagesNumberX
OptOutDateDate, the subscriber, opted out of SMS messagesDateX
OptInStatusIDWhether the subscriber has opted-in to the SMS messageNumber
OptInMethodIDMethod the subscriber used to opt-in to the SMS messagesNumberX
OptInDateDate, the subscriber, opted-in to the SMS messagesDateX
SourceThe subscription sourceNumberX
CreatedDateDate the subscription was createdDate
ModifiedDateDate the subscription was modifiedDate

When working with _SMSSubscriptionLog Data View:

  1. SFMC assigns subscription data to Mobile Number, not particular SubscriberKey or Contact. If you reassign the Phone Number to a different contact - Subscriptions will follow.
  2. SubscriberKey will be correctly populated if there is one (and only one) Subscriber with the same Mobile Number. Otherwise, it will have either have a No MobileAddress record has been found or this mobile number or Multiple subscriber keys found for this mobile number as a value.
  3. SubscriptionDefinitionID is a GUID, and there is no apparent connection to a specific Keyword. But there are two tricks.
    • JOIN _SMSMessageTracking Data View and use KeywordID and SharedKeyword columns to map the GUID to readable Keyword name. If you cannot find this information there, there is a second option:
    • Go to MobileConnect Contacts, open your test contact and make sure he is subscribed to all your Keywords. Click the Attributes tab and scroll to MobileConnect Data. Click on the Carrier ID value. It will open a MobileConnect Subscriptions view - the above Data View in User Interface format. If you check the Keyword column, you will see your MobileConnect Short or Long Code along with Keyword in a readable format. Write it down and click Edit. Now you will see the same data, but with Keyword GUID. With those two values, you can use a SQL CASE statement to convert this Data View to a more readable format.

_SMSMessageTracking

NameDescriptionData TypeNullable
MobileMessageTrackingIDUnique Tracking ID - one for each SMS sentNumber
EIDEnterprise ID number for the senderNumberX
MIDMember ID (Business Unit ID)NumberX
MobileMobile number for the subscriberPhone
MessageIDUnique Mobile Message IDNumber
KeywordIDUnique identifier for the keyword (GUID)TextX
CodeIDUnique identifier for the SMS code (GUID)TextX
ConversationIDUnique identifier for the SMS conversation. Currently always null.TextX
CampaignIDThe SMS campaign tied to the recordNumberX
SentIf the message was sentBoolean
DeliveredIf the message was deliveredBooleanX
UndeliveredWhether the message was delivered successfully or notBooleanX
UnsubIf the subscriber unsubscribed. Currently always null.BooleanX
OptInWhether the subscriber has opted-in to the SMS messages. Currently always null.BooleanX
OptOutWhether the subscriber has opted out of SMS messages. Currently always null.BooleanX
OutboundIf the message was outgoingBooleanX
InboundIf the message was incomingBooleanX
CreateDateTimeThe date and time the tracking record was createdDate
ModifiedDateTimeThe date and CST time the tracking record was modifiedDate
ActionDateTimeThe actual date/time the Marketing Cloud received a delivery or non-delivery event. Timestamps for delivery receipts are not indicative of when a message was received on a handset. The SMS industry does not support read receipts, and the data returned in this view are based on when a delivery receipt is returned to our system.Date
MessageTextThe text of the messageTextX
IsTestIf the message was a test messageNumberX
MobileMessageRecurrenceIDThe ID of the recurrence schedule for the message. Can be used for troubleshooting send issues.NumberX
ResponseToMobileMessageTrackingIDThe tracking ID of the response to the messageNumberX
IsValidPopulates to 1 for inbound message and 0 for Outbound messageNumberX
InvalidationCodeInvalidation code for the message. Currently always null.NumberX
SMSJobIDGUID with JobID matching value in SMS Send Log. Filled only for sends since Spring 2023.StringX
SMSBatchIDBatchID matching value in SMS Send Log. Filled only for sends since Spring 2023.NumberX
SendIDThe send ID number for the SMS sendNumberX
SendSplitIDIf the message was split, the ID of the splitNumberX
SendSegmentIDThe ID of the segment tied to the messageNumberX
SendJobIDThe job ID for the SMS sendNumberX
SendGroupIDThe group ID for the SMS sendNumberX
SendPersonIDThe sendperson ID for the SMS sendNumberX
SubscriberIDThe subscriber ID for the affected subscriber. This number represents the unique ID for each subscriber recordNumberX
SubscriberKeyThe subscriber key for the affected subscriberTextX
SMSStandardStatusCodeIdSFMC delivery status codeNumberX
DescriptionDetailed description of the status codeTextX
NameThe SMS Message or Journey Activity nameTextX
ShortCodeThe short code or long code used to send your messageTextX
SharedKeywordThe keyword used in your messageTextX
OrdinalRepresents the parts in a multi-part message. Represented in ascending order starting at 0.NumberX
FromNameFrom Name that an individual message was deployed with. Maximum length: 11 charactersTextX
JBDefinitionIDUnique identifier for the related journeyTextX
JBActivityIDUnique identifier for the related journey activityTextX

When working with _SMSMessageTracking Data View:

  1. If you send one SMS to multiple Subscribers, you will have multiple rows of data with different MobileMessageTrackingID but the same MessageID. Apart from MessageID you may also use the Name field that contains the asset name from MobileConnect.
  2. KeywordID and CodeID are GUIDs, but the same table also has the readable versions of those columns - ShortCode and SharedKeyword. ShortCode, despite the name, also displays Long Codes.
  3. The fields marked above as boolean (like Sent, Delivered, IsTest, Outbound) have the value in the form of a number: 0 = false, 1 = true. Some might also be null - for example, if a message was outbound, Outbound will have the value of 1, whereas Inbound will be null.
  4. MessageText will not only show you the text you sent in your SMS - it will also display it after personalisation is applied. On the one hand, it is great for debugging, as it allows you to check the final content the user received. On the other hand, you won't be able to assess personalisations used across your messaging.
  5. ResponseToMobileMessageTrackingID is an excellent way to check customer response. You can make Self-Join between inbound ResponseToMobileMessageTrackingID and outbound MobileMessageTrackingID to output response data in the same line.
  6. Some fields in this Data View are filled only under specific conditions:
    • CampaignID is populated only when an SMS is sent to Data Extension as Audience or send type is Send to Data Extension. SMS must be connected to a Campaign for the field to be populated.
    • SendID, SendJobID are populated only for SMS messages sent via Automation Studio's Send SMS Activity or when an SMS is sent to Data Extension as Audience.
    • SendSplitID, SendSegmentID, SendGroupID, SendPersonID are populated only when SMS is sent to Data Extension as Audience.
    • ConversationID is populated only when a conversation is created with a MO user using AMPScript CreateSMSConversation.
  7. Unsub, OptIn, OptOut are currently not populated at all. You should pull that data from _SMSSubscriptionLog.
  8. JBDefinitionID and JBActivityID let you cleanly match SMS data to Journey and _JourneyActivity Data Views using VersionID and ActivityID respectively. However, it won't work for old (created before October 2020) SMS Activities - for those you can make a JOIN using Name field: ON smsTracking.Name = journeyActivity.ActivityName.
  9. SMSStandardStatusCodeId and Description are great for understanding your SMS send's current status.
  10. SMSJobID and SMSBatchID are the only way to connect _SMSMessageTracking Data View to SMS Send Log. You can JOIN ON smsTracking.SubscriberID = sendLog.SubID AND smsTracking.SMSJobID = sendLog.SMSJobID AND smsTracking.SMSBatchID = sendLog.BatchID.

SMS Status Codes

CodeStatusDefinition
1000QueuedToSfmcSendServiceMessage queued to internal send service.
1500QueueFailureToSfmcSendServiceMessage failed to queue to internal send service. Retry your send.
1501ValidationErrorInternal validation error. Retry your send.
2000DeliveredToAggregatorMessage delivered to the aggregator. The status will be updated when the delivery confirmation comes from the carrier or mobile device. For shared codes, this is the final status.
2500FailedToAggregatorMessage not delivered to the aggregator. Retry your send.
2501UnknownToAggregatorUnknown aggregator error.
2600ThrottledToAggregatorMessage not accepted by aggregator due to capacity issues. Send will be retried automatically.
3000EnrouteMessage is en route to carrier. Waiting on carrier confirmation.
3001SentToCarrierMessage sent to carrier. Waiting to be accepted by carrier.
3002AcceptedByCarrierMessage accepted by carrier. Waiting for delivery confirmation.
3400UnknownUnknown error
4000DeliveredMessage delivered to mobile device.
4500UndeliverableMessage not delivered to mobile device.
4501ExpiredMessage expired. Message exhausted the carrier retry process. Mobile device may be out of carrier range.
4502DeletedMessage deleted by the carrier.
4503RejectedMessage rejected. Carrier may have detected a loop or assumed that message is spam. This status can indicate an administrative or financial problem between the operator and the end-users.

_UndeliverableSMS

Stores information about failed message deliveries from MobileConnect.

There might be multiple reasons for the SMS to be undelivered, for example:

  • The mobile device is powered off.
  • The user is out of range of cellular networks
  • The number is for a landline
NameDescriptionData TypeNullable
MobileNumberMobile number for the subscriberText
UndeliverableWhether the subscriber is eligible for future deliveriesBoolean
BounceCountNumber of times message was not deliveredNumber
FirstBounceDateDate of the first unsuccessful deliveryDate
HoldDateDate when the subscriber can be used in sends againDateX

When working with _JourneyActivity Data View:

  1. If Undeliverable is TRUE, check HoldDate to know when the number will be reachable again.
  2. Monitor this data view and blocklist numbers with significant BounceCount values to clean up your database, save money and protect from spamming potential future owners of the recycled phone number.
  3. It's impossible to know the actual delivery status for SMS sends - Marketing Cloud reports only whether the SMS carrier accepted the message. It does not know what happens with it after the carrier takes over. However, most of the SMS messages accepted by carriers are delivered.