Sign in

Blog · How-to guides

SMS marketing analytics: measure campaign performance

SMS marketing analytics connects message delivery and clicks with matched orders and contribution. Use a worked US retail example to compare campaigns, reconcile their exports and assign follow-up work.

The short answerSMS marketing analytics measures what happens between a campaign's attempted messages and its recorded business outcomes. Compare final delivery status, unique clicking recipients, matched buyers, orders and contribution within a stated window. Reconcile message and order exports before ranking campaigns, because a delivered message is not proof of attention and a matched order is not proof of incremental sales.

SMS marketing analytics compares delivery, engagement, matched orders and contribution for a defined campaign window. Start with message and order exports, then ask where the audience falls away and what the resulting orders leave after direct costs. A higher click rate does not necessarily mean a better commercial outcome.

Separate delivery from engagement and buying

Use a small chain of measures, each with a clear counting unit. Attempted recipients measure the intended audience. Delivered recipients measure confirmed delivery. Unique clicking recipients measure a qualifying link interaction. Purchasing recipients and orders describe what the matching rule connects to the campaign.

Preserve the distinction between a sent status and a final delivery result. Twilio's message-status documentation describes successful sending as a step before delivered or undelivered status. The reporting owner should wait for a stated cutoff and keep unresolved statuses visible rather than treating them as confirmed deliveries.

Clicks need a similar check. Twilio's link-event documentation distinguishes a customer click from a device-generated link preview. Exclude previews when the export identifies them, remove repeated clicks by the same recipient within the campaign, and describe any remaining uncertainty. A total of link events is not a count of distinct interested people.

This is a measurement exercise using existing exports. Message sending, consent administration and campaign setup sit outside this comparison.

Write the campaign window before opening the files

For an illustrative US home-goods retailer, compare two campaigns using orders placed within seven days of each message. Both campaigns were sent on September 1, 2026, giving them the same time to accumulate orders and refunds. Include refunds posted through September 30, 2026, and label that refund cutoff alongside the results. Both campaign windows have fully closed before the report is prepared.

The retailer uses its existing campaign assignment on each order. Every included order has a qualifying campaign click, and each purchasing recipient placed one included order in this example. Where campaigns overlap, the business's agreed assignment gives each order to one campaign; other plausible matches stay outside the campaign totals for review.

Bring four files or equivalent worksheets:

Export Required fields What it establishes
Message results Campaign key, message key, anonymous recipient key, send time, final status Attempted and delivered audiences
Link interactions Campaign key, recipient key, event time, event type Distinct qualifying clickers in the window
Orders and refunds Order key, assigned campaign, recipient key, order time, sales, refunds Matched buyers and recorded net sales
Campaign and order costs Campaign key, message charges, order key, net product cost, variable order cost Comparable contribution inputs

Use the recipient keys already supplied in approved exports. You do not need names or phone numbers to calculate the campaign totals. Retain unmatched orders as a separate reconciliation group rather than distributing them in proportion to clicks.

A worked delivery and conversion comparison

The retailer sent a restock offer and a bundle offer to separate audiences. Each campaign has one message attempt per recipient, so message counts and recipient counts coincide in this example. All attempts have final results by the cutoff.

Campaign Attempted recipients Delivered recipients Failed or undelivered Unique clickers Purchasing recipients Orders
Restock 10,000 9,600 400 480 72 72
Bundle 10,000 9,800 200 392 98 98
Total 20,000 19,400 600 872 170 170

Delivery rate = Delivered recipients / Attempted recipients

Delivered-recipient click rate = Unique clickers / Delivered recipients

Clicker-to-buyer conversion = Purchasing recipients / Unique clickers

The same counts give:

Campaign Delivery rate Delivered-recipient click rate Clicker-to-buyer conversion Delivered-recipient buyer rate
Restock 96.0% 5.0% 15.0% 0.75%
Bundle 98.0% 4.0% 25.0% 1.00%
Total 97.0% 4.5% 19.5% 0.88%

For restock, the click rate is 480 / 9,600 = 5.0%, and buyer conversion is 72 / 480 = 15.0%. Bundle has fewer clickers but more buyers: 98 / 392 = 25.0%. The total buyer rate uses 170 / 19,400, rounded to 0.88%; it does not average the two campaign percentages.

Rates are rounded to one decimal place except the delivered-recipient buyer rate, which uses two. Keep unrounded calculations in the working file.

Follow the orders through to contribution

Sales below exclude sales tax and are already after discounts, but before refunds. Product cost is net of the cost reversals for returned goods. Variable order cost includes the selected fulfillment and payment expenses. Message cost comes from the campaign charges export.

Campaign Sales (USD) Refunds (USD) Net sales (USD) Net product cost (USD) Variable order cost (USD) Message cost (USD) Contribution (USD)
Restock 7,200 600 6,600 3,000 600 300 2,700
Bundle 9,800 800 9,000 4,500 850 300 3,350
Total 17,000 1,400 15,600 7,500 1,450 600 6,050

Restock contribution is 7,200 - 600 - 3,000 - 600 - 300 = $2,700. Bundle contributes 9,800 - 800 - 4,500 - 850 - 300 = $3,350. The total checks both ways: 2,700 + 3,350 = $6,050, and 15,600 - 7,500 - 1,450 - 600 = $6,050.

That is contribution under the listed cost scope, not net profit or incremental campaign lift. The separate marketing ROI versus ROAS guide explains the broader margin test. If the decision concerns acquiring new customers, add the full cost scope in customer acquisition cost.

Assign decisions to the right owner

The campaign manager investigates the restock offer's stronger click rate but weaker buyer conversion. Merchandising checks whether landing-page availability and the offer match what recipients expected. Finance validates refunds and cost treatment before anyone ranks campaigns by contribution.

The next report should retain the same window and definitions so an apparent improvement has a comparable base. A deliberately held-out audience can support a separate incremental-effect analysis; this matched-order table cannot supply that conclusion by itself.

Keep different channel questions separate. Mobile marketing analytics follows acquisition cohorts through later use and revenue. Amazon marketing analytics reconciles seller campaign outcomes with marketplace fees and refunds.

Where SMS reporting goes wrong

  • Unresolved statuses treated as delivered. Preserve pending results and the reporting cutoff. Reconcile attempted recipients to delivered, unsuccessful and unresolved groups.
  • Preview events counted as people. Remove identifiable previews and deduplicate qualifying clicks before computing recipient rates.
  • One order credited repeatedly. A recipient may receive several messages. Use the agreed assignment and reconcile unique order keys across campaigns.
  • Refunds disappear after the campaign closes. Keep the original window and a separate refund cutoff, then revise comparable historical cohorts consistently.
  • Audience differences read as campaign lift. Offer, customer history and product availability may differ. Descriptive rankings establish where to investigate.

Compare your message and order exports in Covirage

Bring campaign delivery, qualified click, matched order and cost exports with the observation window stated. Covirage maps the columns; its tools compute and check the comparisons, and the external AI model explains the results with every figure traced to its rows. Create a free Covirage account, which takes about a minute, and bring a sample of your own data.

See Covirage for sales insights for the supporting business context.

Covirage is not affiliated with Twilio.

Questions people ask

What is a useful SMS campaign conversion rate?

Define conversion as unique purchasing recipients divided by a stated audience, such as delivered recipients. Use a fixed order window and a consistent matching rule. Compare your own campaigns on that basis rather than adopting a benchmark with an unknown denominator.

Should SMS click rate use sent or delivered messages?

Either denominator can describe a report, but the label must identify it. Delivered-recipient click rate separates engagement after delivery from delivery failures. A rate based on all attempted recipients includes both effects and should not be compared directly with the delivered-based rate.

Does SMS delivery mean the customer read the message?

No. Delivery status and reading are different observations. Keep the provider's final delivery result separate from qualified clicks and orders. If a report lacks a reliable attention measure, leave that question unanswered rather than labeling delivery as an open.

Can SMS revenue be treated as campaign profit?

No. Recorded sales still need refunds, product costs, variable order expenses and message charges deducted for a contribution comparison. Even that result excludes fixed overhead and does not establish how many sales would have happened without the campaign.