SMS: metrics

We record metrics for every SMS/MMS message you send, so you can measure the success of your automations and segment your audience based on the messages you've sent them in the past.

SMS/MMS metrics

We record the same metrics for every SMS message, no matter which provider delivers it:

MetricWhere it comes from
sentWe sent the message to your provider.
deliveredYour provider confirmed delivery to the recipient’s device.
bouncedYour provider reported that the message couldn’t be delivered. The failure_message contains your provider’s error details.
clickedThe recipient tapped a tracked link in your message.
convertedThe recipient performed your conversion goal.
droppedWe didn’t send the message. This happens when the recipient opted out or when their number is flagged as unsendable. Dropped messages don’t reach your provider.

SMS doesn’t support open tracking—there’s no opened metric.

These metrics flow to reporting webhooks and data warehouse exports: webhook events use the sms_ prefix and exports use the sms delivery type. Payloads don’t say which provider delivered the message.

Delivery outcomes and failure reasons come from your provider, so the failure_message on a bounced or failed delivery uses your provider’s error language. We receive these delivery reports automatically for every provider—we attach a delivery-report callback to each message we send, so there’s no delivery webhook to configure on your provider’s side.

SMS/MMS delivery logs

When you send an SMS or MMS message, you can view the delivery logs for that message in the automation’s sent messages page.

Here you can correct and retry failed messages. Message failures are sometimes related to problems with liquid in your message (missing attributes, etc).

image.png

In delivery logs, you’ll see:

  • The recipient
  • The name of the message
  • The status of the message (sent or failed)
  • Date and time sent
  • Conversions after receiving the message
image.png

Create a segment based on SMS/MMS messages

As with an email, you can create a segment for SMS’s that have been sent, converted, etc. When you create a segment, select Message Data > SMS as the condition you want to match. You can then use the names of your messages to filter your audience by who has received, or not received, messages. You might do this to send follow-up messages to engage with people depending on how they responded to a previous message. One SMS condition covers your messages from every provider.

You can also create segments based on messages that bounced, failed to send, or were suppressed. See SMS error-code conditions.

image.png

SMS segments for error codes

When an SMS message bounces, fails to send, or is suppressed, your SMS provider usually reports an error code that explains why. You can narrow an SMS condition to specific codes. For example, you might create a segment of people whose numbers bounced multiple times with a temporary carrier error and exclude them from your SMS messages. Learn more about unsendable numbers.

  1. In your segment, add an SMS condition.
  2. Select the message you want to check for error codes; if you want to check any SMS message, select any SMS message.
  3. Set the behavior to has ever bounced, has ever failed to send, or has ever been suppressed.
  4. Choose how to match the error code:
    • with any error code (the default): the condition matches every message with that behavior, whatever the code.
    • with error code or without error code: the code is, or isn’t, one of the codes you enter. To match more than one code, separate them with commas, like 30003, 30006. You can enter up to 50 codes.
    • with error code containing or with error code not containing: the code includes, or doesn’t include, the text you enter.
  5. (Optional) To match people who got the error more than once, click Refine. Then set at least a number of times, and choose ever or within the last a number of days. For example, “at least 5 times within the last 30 days.”

Error codes come from your SMS provider, not from Customer.io, so their format depends on the provider that sent the message:

ProviderBouncedFailed to send
TwilioA numeric error code, like 30003A numeric error code
VonageA numeric error code, like 1170Usually a numeric error code
InfobipAn error name, like EC_UNKNOWN_SUBSCRIBERA status name, like REJECTED_DND
SinchA numeric delivery-report codeAn API status, like INVALID_ARGUMENT
BirdAn error code, like invalid_destinationAn API error name

For numeric codes, use with error code rather than with error code containing. Containing matches any part of the code, so 300 matches 63003 as well as 30003.

Customer.io started recording SMS error codes on October 5, 2026. Messages that bounced, failed, or were suppressed before then don’t have an error code, so they don’t match a condition that names one. See conditions that only match activity after a certain date.

Updated October 6, 2026