It's never great to have users unsubscribe from your service, but being able to track unsubscribes and attribute them to a particular campaign helps you monitor unsubscribes and gain insight into what may be causing them. Providing flexible subscription preferences and opt-out options for your users helps you comply with regulations and best practices. It also creates a better user experience for your brand by enabling users to control their subscription preferences.
This article explains how users can opt out or resubscribe to SMS and how Iterable attributes and tracks these actions.
# In this article
# Opting out and resubscribing to SMS
There are two ways to unsubscribe and resubscribe to SMS messages, depending on whether the sender ID is one-way or two-way enabled.
Users who receive SMS from a numeric sender ID (short code, long code, toll-free) can reply with a supported keyword to the phone number that sent them a message.
Users who receive SMS from an alphanumeric sender ID can visit the personalized unsubscribe by phone URL they receive in their SMS opt-out instructions to unsubscribe.
Iterable automatically includes opt-out instructions when sending SMS campaigns. The text and language of the instructions, as well as how often they're included, vary based on the country the message is sent to (determined by the user's phone number). To learn more about these settings and how to customize them, read Customizing SMS Opt-Out Instructions.
Whether a phone number is unsubscribed or resubscribed to the SMS channel overall or a single message type depends on whether you've bound a message type as part of your sender setup.
Users who opt-out are opted out in Iterable, and in your SMS provider, depending on the keyword used and how it is processed. Read more about Unsubscribe keywords for additional details.
IMPORTANT
Unlike how Iterable handles some email bounce events, Iterable doesn't interpret SMS bounce codes, and doesn't automatically unsubscribe users when their SMS bounces. To learn more, read SMS Bounces.
# Managing SMS unsubscribes and resubscribes in Iterable
You can unsubscribe or resubscribe users from your SMS channel in Iterable through:
- The user profile page
- A journey tile
- The API (such as with an API-driven subscription preference center)
When you update preferences through these methods (without keywords), Iterable updates the user's preferences locally but does not sync them to your SMS provider. This works fine in most cases—unless the user previously unsubscribed by sending a stop keyword.
# Resubscribing to SMS after a keyword unsubscribe
When a user unsubscribes by sending a stop keyword, they must resubscribe directly with the SMS provider. Updating their preferences in Iterable alone won't work—the SMS provider still has them marked as unsubscribed and rejects campaigns coming from Iterable.
In this scenario, the user must reply to your SMS sender ID with a resubscribe keyword.
TIP
Consider setting up a re-engagement campaign that emails users who attempt to resubscribe via your preference center, with instructions for resubscribing directly with the SMS provider.
# Unsubscribe keywords
Unsubscribe keyword processing varies by SMS provider. Each SMS provider has its own set of supported keywords and matching behavior. Iterable also processes keywords to unsubscribe users in their Iterable subscription preferences.
Iterable and SMS providers support these keywords for opt-out:
| Keyword | Iterable support | Twilio* support | Telnyx* support |
|---|---|---|---|
| ARRET | Default (all countries) | Canada shortcodes only | Custom keyword (optional) |
| CANCEL | Default | Default | Default |
| END | Default | Default | Default |
| OPT OUT | Default | Not supported (two words) | Custom keyword (optional) |
| OPTOUT | Default | Default | Custom keyword (optional) |
| QUIT | Default | Default | Default |
| REVOKE | Default | Default | Custom keyword (optional) |
| STOP | Default | Default | Default |
| STOP ALL | Supported as a loose match of "stop" | Not supported (two words) | Default |
| STOPALL | Default | Default | Default |
| UNSUBSCRIBE | Default | Default | Default |
* Twilio exceptions:
- Short code opt-out keywords aren't supported by default. To enable them, use Twilio's Advanced Opt-Out.
- Two-word opt-out keywords are not supported, even if Advanced Opt-Out is enabled.
* Telnyx exceptions:
- Toll-free sender IDs only support the
STOPkeyword. - Toll-free opt-out keywords cannot be customized. Learn more in Telnyx Support.
IMPORTANT
Always check the documentation for your SMS provider to see if there are any exceptions to the supported keywords as these are subject to change.
# Unsubscribe keyword matching
Iterable's SMS providers, Telnyx and Twilio, use strict matching for opt-out keywords. This means that if a user sends a message that doesn't match the exact keyword, the SMS provider doesn't interpret it as an opt-out request.
However, in contrast to your SMS provider, Iterable uses loose matching to interpret the user's intent. This is a best-effort approach to ensure that users can unsubscribe from your messages, even if they don't send the exact keyword.
For example, if a user sends stop, Iterable interprets that as an unsubscribe
keyword, as does the SMS provider. The user is unsubscribed from your messages
in Iterable and your SMS provider. However, if a user sends Please stop, Iterable
interprets it loosely as an unsubscribe keyword, but the SMS provider does not,
because the message was not an exact match. The user is unsubscribed from your
messages in Iterable, but not from your SMS provider.
Optionally, you can configure your Iterable project to use strict matching
instead. With strict matching, if a user sends Please stop, Iterable doesn't
interpret that inbound message as an unsubscribe request. This prevents accidental
unsubscribes, and matches the behavior of your SMS provider.
To enable strict matching in Iterable, ask your Iterable customer success manager for help.
# Resubscribe keywords
To resubscribe, Iterable supports these keywords:
STARTUNSTOP-
YES(Twilio only)
# Resubscribe keyword matching
Keyword matching is case-insensitive, but exact. For example, START and
start are both valid. However, Please start is not valid.
# Unsubscribe by phone URL (unsubscribeByPhoneUrl)
Users can't reply to SMS from an alphanumeric sender ID, so they can't use an opt-out keyword to unsubscribe. Instead, provide an opt-out link.
When you use Iterable SMS to send internationally from an alphanumeric sender
ID, Iterable includes a personalized unsubscribe link in the opt-out
instructions using the merge parameter {{unsubscribeByPhoneUrl}}.
This merge parameter works by sending a user to an unsubscribe page where they can confirm opting out their phone number.
To re-subscribe, users can visit this link again and confirm resubscription.
Currently the {{unsubscribeByPhoneUrl}} merge parameter is only available to
send in the body text of an SMS message.
# Alphanumeric opt-out landing page
The alphanumeric opt-out landing page is hosted by Iterable.
The page automatically loads in the language associated with the country of the user's phone number. There is a language selector at the top of the page if the user needs to change it.
You can customize the logo by updating it in your project settings. This page can't be customized otherwise.
# Help keywords
Help keywords are keywords that users can send to their SMS provider to get help with opt-out or resubscription. These keywords are only processed by the SMS provider, not Iterable.
# Iterable SMS help keywords
If you have Iterable SMS as your sender, ask your customer success manager for help configuring help keywords and their responses.
# Twilio help keywords
By default, Twilio sends help responses to these keywords:
HELPINFO
You can add additional help keywords and confirmation messages to your Twilio account.
# Telnyx help keywords
Telnyx does not have help keywords set by default, but you can set up custom help keywords for the messaging profile you use.
# Attributing SMS unsubscribes
When Iterable receives an opt out response (like STOP, or OPTOUT), the system
looks for all user profiles that have a phone number matching the one that
was used to unsubscribe. The system updates ListUnsubscribe with
messageMedium: SMS for all users who have this phone number.
Then, Iterable determines whether a campaign was sent to any of those users in the past three hours.
If a campaign was sent within three hours, Iterable attributes the SMS Unsubscribe event to that campaign using the
campaignIdandtemplateId.If more than one campaign was sent within the three hour window, the unsubscribe is attributed to the last campaign sent.
If no campaign was sent within the three hour window, the unsubscribe is not attributed to a campaign.
TIP
Identifying the campaigns that have higher unsubscribe rates can help you shape your future content so that it better serves your users, making them less likely to churn and fully opt out from your brand.
If a campaign has a higher unsubscribe rate than others, review its content, timing, and personalization options to identify possible causes, and use those insights to improve future campaigns.
# Tracking SMS unsubscribes
Iterable tracks unsubscribe requests with these metrics, which you can view in Campaign Analytics.
Total Unsubscribes tracks the total number of users, based on user profile, who unsubscribed from an SMS message sent with a campaign. This metric counts an unsubscribe each time a person unsubscribes. This can include multiple unsubscribes when, for example, a user resubscribes and then unsubscribes, again, from the same campaign.
Unique Unsubscribes tracks the number of unique users, based on user profile, who unsubscribed from an SMS message sent with a campaign. This metric counts a single unsubscribe for a single user profile. If a user resubscribes and then unsubscribes, again, from the same campaign, only one unsubscribe is counted.
SMS Unsubscribe Rate tracks the number of unique SMS unsubscribes divided by the total number of SMS messages delivered, where delivered messages are the number of messages sent minus the number of messages bounced. (SMS Unsubscribe Rate = Total Unsubscribe / Total SMS Delivered) (Total SMS Delivered = Total SMS Sends - Total SMS Bounce)
# Example: Tracking unsubscribes for a single user
Consider a simple case, where a user of your app unsubscribes once from one of your SMS messages. In Campaign Analytics, you'll see one unsubscribe added to the Total SMS Unsubscribes metric, and one added to the Unique SMS Unsubscribes metric.
If this user subscribes and unsubscribes more than once (for example, following a resubscribe), Total SMS Unsubscribes is incremented each time the user unsubscribes, but Unique SMS Unsubscribes is counted only once.
# Example: Tracking unsubscribes from one campaign for two users
In some cases, users might share a phone number, but have different user profiles. In these cases, the metrics used to track unsubscribes are incremented differently.
If one of two users with the same phone number receives a campaign (but the other user doesn't), and either user unsubscribes within three hours of its receipt, Campaign Analytics will add one unsubscribe for Total SMS Unsubscribes and one for Unique SMS Unsubscribes.
If both of these users receive the same campaign, and either user unsubscribes, Campaign Analytics will show two unsubscribes for Total SMS Unsubscribes (because two different users received the campaign), and one for Unique SMS Unsubscribes (because only one of them unsubscribed).
# Example: Tracking unsubscribes from two campaigns for two users
Now, let's consider a case where two users share a phone number and receive different campaigns from each other.
- If User A receives Campaign A, then User B receives Campaign B, and either user unsubscribes within three hours of receipt of the campaign that was sent last (Campaign B), Campaign Analytics will add one unsubscribe for each campaign to Total SMS Unsubscribes and one for Unique SMS Unsubscribes.
Next, let's consider a case where two users share a phone number and each receive the same two campaigns.
- If both of these users receive Campaign A, first, and then Campaign B, and either user unsubscribes within three hours of receipt of the campaign that was sent last (Campaign B), Campaign Analytics will show two unsubscribes for Total SMS Unsubscribes and two for Unique SMS Unsubscribes, because both users received both campaigns, and the last one received attribution.
# Want to learn more?
For more information about some of the topics in this article, check out this Iterable Academy course. Iterable Academy is open to everyone — you don't need to be an Iterable customer!