SMS analytics comes down to seven numbers: delivery rate, failure reasons, click rate, reply rate, opt-out rate, conversions and cost per conversation. The first two tell you whether carriers let your texts through, the middle three tell you whether people cared, and the last two tell you whether the campaign paid for itself.
Most text message analytics dashboards show all seven on one screen, which makes them look equally important. They aren't. A campaign with a 70% delivery rate has no meaningful click rate, because a third of your audience never saw the message. This guide goes through the metrics in the order you should diagnose them. For each one it covers what the metric means, a rough benchmark, and what to check when it looks wrong. Ready's delivery receipts and campaign reporting serve as the worked example throughout.
The seven SMS metrics at a glance
The benchmarks below are rough industry ranges for opted-in, registered traffic, not guarantees. Your own baseline after three or four sends is a better yardstick than any published average.
| Metric | Formula | Rough range (opted-in list) | First thing to check if it's off |
|---|---|---|---|
| Delivery rate | Delivered ÷ sent | High 90s % | Registration status, content filtering, list hygiene |
| Failure reasons | Count by failure type | A small, stable minority | Which type is growing |
| Click rate | Unique clicks ÷ delivered | Varies widely by offer | Link format, offer, timing |
| Reply rate | Replying contacts ÷ delivered | Highest for conversational, opted-in lists; far lower for promos | Whether the message asks a question |
| Opt-out rate | STOP replies ÷ delivered | Many senders treat 1 to 2% per send as a warning line | Frequency, relevance, consent source |
| Conversions | Goal completions ÷ delivered | Depends on the goal | Landing page, offer, follow-up speed |
| Cost per conversation | Total spend ÷ replying contacts | Depends on segment count | Segments per message |
Delivery rate and SMS delivery reports
Delivery rate is delivered messages divided by messages sent. Every other number depends on it, so start here.
How delivery receipts work
After a message leaves your account, the receiving carrier sends back a delivery receipt saying whether the handset got it. Ready records that receipt against the message. You can see it in the app's campaign reporting, or read it from the API with GET /v1/messages, paging back through history with before_id. Webhooks are built in if you would rather have status changes pushed to you. The exact status fields and event names are listed in the messages docs, so we won't paraphrase them here.
Two details change how you read SMS delivery reports on Ready:
- Refused sends never reach the carrier. Texts to opted-out numbers, numbers on your Ban list and known landlines are refused up front and not charged. They shouldn't count against your delivery rate. They're list hygiene, not deliverability.
- Quiet hours delay messages without failing them. A text that would land during the recipient's quiet hours is held and sent later. It's charged only when it sends. If you check a campaign an hour after launch and see messages still pending, check the recipients' time zones before you assume something broke. Campaigns, drip campaigns and automations wait up to 24 hours for the window; a one-to-one or API text is held only if the window opens within 6 hours, otherwise it is refused and must be resent; a one-to-one reply to someone who texted you in the last 24 hours goes out at any hour.
When the SMS delivery rate drops
A sudden drop usually has one of three causes.
- Registration. Carriers filter unregistered 10DLC traffic. If the drop coincides with new numbers, or a campaign still in review, check registration first. Ready handles brand and campaign registration in-app, and most approvals take 2 to 7 days.
- Content filtering. An approved campaign can still have individual messages filtered for content: link shorteners, wording that looks like spam, or copy that drifts from your registered use case. We cover this in why approved campaigns still get filtered.
- Volume caps. T-Mobile caps daily volume per brand by trust score. The lowest tier is roughly 2,000 messages a day, and higher tiers run to roughly 200,000. If failures cluster late in a big send, you may have hit the cap. Brand vetting can move you up a tier, but it only helps when it actually crosses one.
Failure codes: read the type, not the total
A single "failed" number hides the diagnosis. Group failures into buckets and watch which bucket moves:
- Invalid or unreachable numbers. These are disconnected or mistyped numbers, so the cause is your data. Fix it at capture, or validate first. Ready's number validation (
GET /v1/validate/:phone, $0.003 for each number that gets an answer) checks a number before you text it. - Landlines. A landline can't receive SMS. On Ready, known landlines are refused before send. You can also switch on landline validation, which adds $0.003 per segment and is off by default.
- Carrier filtered or blocked. This points to registration or content. It's the bucket that should make you stop and investigate before your next send.
- Temporary failures. These include a handset that's off or a full inbox. Some of these are normal on any large list.
A stable failure rate on an old list is normal background. A failure type that doubles from one send to the next is a signal.
Click rate in text message analytics
Click rate is unique clicks divided by delivered messages. It's the one metric where your SMS platform shouldn't be the source of truth. Your website analytics already knows who landed and what they did next.
To measure it well, put a tracked link with UTM parameters on your own domain in the message. Don't use a public link shortener, because carriers commonly filter shared shortener domains. Then read clicks and downstream behavior in your analytics tool. This is also how you connect clicks to conversions without stitching two systems together by hand.
When click rate is low but delivery rate is fine, check these four things in order:
- Is the link in the first line, or buried at the end of a 3-segment message?
- Does the offer make sense without context?
- Did you send at a reasonable hour? See our post on the best time to send SMS marketing texts.
- Is this the third promo this week?
Reply rate: the metric texting does best
Reply rate is the number of contacts who replied divided by the number of messages delivered. Count contacts, not total inbound messages: one person sending five replies is still one conversation.
For conversational texts sent to opted-in lists, such as appointment confirmations or "still interested?" follow-ups, reply rates are at their highest. One-way promotional sends land far lower, because they don't ask for a reply. If your reply rate is low, look at the message itself: does it end with a question someone can answer in one word?
On Ready, replies land in the Inbox, and in GoHighLevel too for connected accounts. Every reply sits next to the campaign that triggered it, which makes reply rate easy to count per send. Remember that replies cost money. An inbound reply is billed like a sent text, at the per-segment rate plus the carrier fee. That matters for the cost math below.
Opt-out rate: your early warning system
Opt-out rate is STOP-type replies divided by messages delivered. On Ready, an inbound STOP or UNSUBSCRIBE is honored automatically. The opt-out then applies across every campaign, so that contact can't be messaged again. You can pull this account's opted-out contacts with GET /v1/opt-outs, or check one number with GET /v1/opt-outs/:phone.
Many senders treat anything above roughly 1 to 2% on a single send as a warning, though the right line depends on your list and cadence. A rising opt-out rate usually has one of three causes:
- Frequency. You're texting more often than people expected when they signed up.
- Relevance. The message went to a broad segment instead of the people it was written for.
- Consent source. A batch of contacts came from somewhere they didn't knowingly opt in.
The third cause is the one that turns a metric problem into a legal one. Opt-out spikes and complaints are also what carriers watch, so a bad opt-out trend tends to show up in your delivery rate a few sends later.
Conversions and cost per conversation: the SMS campaign analytics that pay the bills
Conversions are whatever the campaign was for: a booking, a purchase, a confirmed appointment, a reply of "YES." Define the goal before you send. Otherwise you'll count whatever looks best afterwards.
Cost per conversation is total messaging spend divided by the number of contacts who replied. It's the most useful number in SMS campaign analytics because it brings in what most dashboards leave out: segment count and inbound billing.
Worked example
Here are the assumptions. These are illustrative, not benchmarks.
- The list is 5,000 opted-in contacts.
- The message is a plain 140-character, 1-segment text.
- 8% of contacts reply, which gives 400 conversations.
- Each conversation adds 2 inbound replies and 2 outbound follow-ups, all 1 segment each.
- Ready's Standard rate is $0.0075/segment plus a $0.0045 carrier fee per segment.
The math:
- The initial send is 5,000 segments.
- The conversations add 400 × 4 = 1,600 segments.
- The total is 6,600 segments.
- Ready's rate comes to 6,600 × $0.0075 = $50, plus 6,600 × $0.0045 = $29.70 in carrier fees, so $79.20 all-in.
- Cost per conversation is $79.20 ÷ 400 = about $0.20.
Now add one emoji and stretch the copy to 175 characters. An emoji drops the per-segment limit to 70 characters, or 67 for multipart messages. A 175-character message then needs 3 unicode segments instead of 2 GSM segments. The initial send alone becomes 15,000 segments, which is 15,000 × $0.0075 = $113 at the Standard rate, plus 15,000 × $0.0045 = $67.50 in carrier fees, so $180.00 all-in. Unless the emoji lifts replies a lot, your cost per conversation has roughly doubled. On Ready, curly quotes, long dashes and ellipses are swapped for plain ones before sending, so they won't trigger this. Emojis will. The segment-count audit post covers how to find this in a bill.
These "all-in" figures exclude the compliance surcharge. If you switch on scrubbing or landline validation for an account, each adds $0.003 per segment, and both are off by default. Full rates are on the pricing page.
To get cost per conversion, divide the same spend by conversions. If 40 of those 400 conversations booked, the 1-segment version costs $79.20 ÷ 40 = about $1.98 per booking, rate and carrier fee included.
Benchmarking: compare against yourself
Published SMS metrics are averaged across industries, list ages and message types, which makes them a loose guide at best. A better method:
- Set a baseline. Record all seven metrics for your next three or four sends of the same message type.
- Change one variable per send. Change the time, the copy length, the link position or the segment. Not all four at once.
- Separate message types. Reminders, promos and follow-ups behave differently. Averaging them together hides problems in each.
- Watch trends, not single sends. One bad send is noise. Three in a row is a pattern.
Platforms sending on behalf of many customers should track these per sub-account. One customer with a bad list can look fine in a blended average while its own opt-out rate climbs.
What to do with this
Diagnose in order: delivery, then failure types, then engagement, then cost. If delivery is below your baseline, nothing downstream is worth tuning yet. If delivery is healthy, cost per conversation is the number that tells you whether the campaign is worth repeating. Segment count is the cheapest thing to fix.
If you want to see delivery receipts and reply tracking on your own traffic, the first 20 texts on Ready are free one-to-one sends. Use them before you register, and keep in mind that a card on file is required to send. You can start here, or read the quickstart first.
FAQ
What is a good SMS delivery rate?
For registered traffic to a clean, opted-in list, delivery rates commonly land in the high 90s as a rough range. A rate well below your own baseline usually points to registration, content filtering or list quality, roughly in that order.
What's the difference between sent and delivered?
"Sent" means the message left your account. "Delivered" means the carrier's delivery receipt confirmed the handset received it. Only delivered messages should count toward engagement metrics.
Do refused or held messages count as failures?
Not on Ready. Texts to opted-out numbers, numbers on your Ban list and known landlines are refused up front and not charged. Campaign texts held for quiet hours are sent when the window opens and charged only when they send.
How do I track clicks on SMS links?
Use tracked links with UTM parameters on your own domain, and read the results in your website analytics. Avoid public link shorteners, which carriers often filter.
Why does cost per conversation matter more than cost per message?
Because segments and replies are both billed. A 3-segment message costs 3x what a 1-segment message costs to send, and every inbound reply is billed like a sent text. Cost per conversation captures both and ties spend to an outcome.