Skip to content
iMessage APIs
Measurement8 min read

Calculating the ROI of an iMessage line

The calculation is genuinely simple. What is hard is not fooling yourself with the inputs.

Per-line pricing makes this easier than most marketing ROI questions, because the cost side is a single fixed number. The whole difficulty sits on the benefit side, and specifically in avoiding three ways of counting that produce impressive numbers meaning nothing.

The model

text
Monthly cost
  line                          $99
  time to run it (2 hrs @ $40)  $80
  ─────────────────────────────────
  total                        $179

Monthly benefit
  no-shows prevented       4  ×  $180  =  $720
  cancellations refilled   3  ×  $180  =  $540
  reactivated customers    2  ×  $180  =  $360
  ─────────────────────────────────────────────
  gross                                  $1,620

Net: $1,441/month

Note the second cost line. Almost every ROI calculation in this category omits the time to run the thing, and for a small business the owner's two hours are not free. Include them or the number is fiction.

The three mistakes

1. Counting outcomes that would have happened anyway

This is the big one. If your no-show rate was 12% and it is now 8%, the *lift* is four points — not the 92% of appointments that showed up. Attributing every kept appointment to the reminder is the most common way businesses convince themselves a channel works.

The only clean fix is a holdout

Send the reminder to 80% of your bookings and deliberately not to 20%. Compare no-show rates between the two groups for a month. That difference is your real lift, and it is usually smaller and far more trustworthy than the headline number. This is the single highest-value test a small business can run — see A/B testing at small volume.

2. Using revenue instead of margin

A recovered $180 appointment is not $180 of benefit. It is $180 minus the cost of delivering it. For a service business with a 60% margin that is $108, which changes the arithmetic considerably. Use contribution margin, not top line.

3. Untagged links, so nothing is attributable

If the links in your messages are untagged, taps arrive as direct traffic and your analytics credits the channel with nothing. You will then be arguing for a budget on the basis of a report that shows zero. This is the most common reason messaging programmes get cancelled while working — see UTM tracking for messaging.

Break-even by business type

BusinessOne outcomeOutcomes needed to break even
Dental practice$180 cleaningUnder 1
HVAC contractor$450 service callUnder 1
Salon$85 appointmentAbout 1.2
Restaurant$140 four-topUnder 1
Med spa$400 treatmentUnder 1
Ecommerce, $60 AOV, 40% margin$24 marginAbout 4
Gym, $60/mo membership$720 annual valueUnder 1 retained member
Assuming a $99/month line and ignoring time cost.

For most service businesses the bar is one outcome a month, which is low enough that the interesting question is not whether it breaks even. It is whether you will measure well enough to know — and whether the channel is still working in month six.

The number that actually decides it

What did this line produce last month that would not have happened otherwise?

Track that monthly, with a holdout group, using margin rather than revenue, on tagged links. If it is positive and stable for three months, the line is not a cost — it is one of the cheaper pieces of revenue infrastructure you own. If you cannot answer it at all, the problem is your measurement, and no amount of message optimization will fix that.

Set this up before month one

  • A holdout group of 15–20%, chosen at random, not by convenience
  • Every link tagged with a stable utm_campaign
  • Contribution margin per outcome written down, not guessed monthly
  • Time cost included in the cost side
  • A single named outcome metric per play — see the use cases
ROIbudgetinganalytics