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
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/monthNote 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
| Business | One outcome | Outcomes needed to break even |
|---|---|---|
| Dental practice | $180 cleaning | Under 1 |
| HVAC contractor | $450 service call | Under 1 |
| Salon | $85 appointment | About 1.2 |
| Restaurant | $140 four-top | Under 1 |
| Med spa | $400 treatment | Under 1 |
| Ecommerce, $60 AOV, 40% margin | $24 margin | About 4 |
| Gym, $60/mo membership | $720 annual value | Under 1 retained member |
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