Here's the trap a lot of agencies walk into: you decide SMS is going to be your profit center, you mark it up, and then a client who actually knows the going rate asks why your per-message price is double what they'd pay buying a CPaaS API themselves. You defend it, they churn, or you cave and cut the markup until there's nothing left.

The problem isn't the markup. The problem is that SMS is a commodity, and commodities have a visible price. The margin you want isn't hiding in a fatter per-segment rebill, it's hiding in the line items your client can't easily price-shop: dialer minutes and list scrubbing. Bundle those alongside the SMS and your blended margin stops looking like a guilty 8% and starts looking like a defensible 40%.

Full disclosure: I work for Ready, an SMS and voice platform. So I'm obviously biased toward the "bundle it" conclusion. But the math below works on anyone's numbers: I'll show you the actual arithmetic so you can plug in your own.

Why the SMS line item can't carry your margin

A client sending 20,000 segments a month is sending a commodity. On Ready's Standard tier that's $0.02/segment plus a $0.0045 carrier pass-through, call it $0.0245 all-in, which is $490/month of actual cost.

If you rebill that at, say, $0.03, you've made $110. Feels fine until the client googles "SMS price per message" and sees numbers starting with a zero and a lot of zeros after it. Now you're defending a 22% markup on something they perceive as should-be-free infrastructure.

I've written before about how high you can actually rebill GHL SMS before clients start auditing the line item, the ceiling is lower than most agencies hope. The honest read: SMS markup is thin and fragile. Lean on it as your whole margin story and one price-conscious client collapses the whole model.

So stop asking SMS to carry the package. Make it the anchor, the thing that gets the client sending, and build margin on the pieces around it.

The three-line package

A clean outbound package has three billable components. One is a commodity (SMS). Two are not (voice minutes, scrubbing). Here's the shape:

ComponentYour costRebill to clientGross margin
SMS (per segment, Standard)~$0.0245 all-in$0.0318%
Dialer minutes (Pro tier)$0.05/min$0.10/min50%
Litigator/DNC scrub (per contact)$0.005$0.01567%

Three things to notice before we run the blended number.

Ready has no per-seat platform fee. The CRM, pipeline, unified inbox, automations, and AI reply agent come with the account, you're not paying $30/seat to ten clients' worth of users before a single text goes out. That matters because per-seat fees are pure margin drain; I ran that math separately and ten seats at $30 is $3,600/year gone before you send anything.

Dialer is billed per agent, not per client-seat. Power Dialer Pro is $29/agent/month with minutes at $0.05 (6-second increments). Team is $69/agent for unlimited agents and $0.0375/min plus speed-to-lead auto-dial. You pass minutes through at a markup your client happily pays because they're not pricing voice minutes the way they price texts.

The carrier pass-through is a real $0.0045, billed separately and transparently, not baked into a rounded number. That transparency is a selling point, not a leak, as long as you present it as its own line. Here's why a transparent pass-through actually protects your margin story.

The blended-margin worked example

Take a mid-sized outbound client. Monthly usage:

  • 20,000 SMS segments
  • 4,000 dialer minutes (say two agents, moderate outbound)
  • 8,000 contacts scrubbed once before the campaign

Your costs:

  • SMS: 20,000 × $0.0245 = $490
  • Dialer: 4,000 × $0.05 = $200, plus 2 agents × $29 = $58 → $258
  • Scrub: 8,000 × $0.005 = $40
  • Total cost: $788

Your rebill:

  • SMS: 20,000 × $0.03 = $600
  • Dialer: 4,000 × $0.10 = $400, plus you bundle the agent fee into a package price (or pass it at $58) → call it $400
  • Scrub: 8,000 × $0.015 = $120
  • Total rebill: $1,120

Gross profit: $1,120 − $788 = $332. Blended margin: $332 / $1,120 = 29.6%.

Now notice what happens if you shift the client's mix toward more calling, which most outbound clients will, because voice closes deals SMS only warms up. Bump dialer to 8,000 minutes:

  • Dialer cost: 8,000 × $0.05 + $58 = $458
  • Dialer rebill: 8,000 × $0.10 = $800
  • New total cost: $988, new total rebill: $1,520
  • Gross profit: $532, blended margin: 35%

Push to Team-tier dialer economics ($0.0375/min) at higher volume and rebill still at $0.10, and the voice component alone runs 62% margin. That's what drags the blend toward 40%, the SMS stays an honest commodity while the voice and scrub lines do the lifting. I broke the pure dialer rebill case down further in the per-minute rebill model agencies aren't offering yet.

Why scrubbing is the quiet winner

The litigator/DNC scrub is $0.005 per contact. Rebill it at $0.015 and you've tripled a line the client never questions, because the alternative is explaining to them what a TCPA litigator is.

And they should pay for it. A single text to a known litigator or a DNC-complainer can run $500 to $1,500 in statutory exposure. One scrub checks each number against both lists and auto-suppresses the matches before send. At $0.015/contact you're charging the client $120 to screen 8,000 numbers against a risk that's four figures per bad text. That's not a markup they audit. That's cheap insurance you're reselling at a fair margin.

It also quietly answers the liability question that trips up a lot of agency contracts: if a client's bad list gets texted, the exposure is real and it's shared. Running the scrub as a standard line item on every campaign means you've got a documented, billable risk-reduction step. That's good practice and good margin at the same time.

To be clear, scrubbing isn't a lawsuit force field, consent and quiet-hours enforcement and the sender's own list hygiene all still matter, and the sender carries ultimate responsibility. But as a cheap, high-margin, genuinely useful line item, it's hard to beat.

Where the margin leaks if you're not careful

A few honest warnings, because a package built on bad assumptions fails on a heavy month:

  • Idle agents destroy dialer margin. You're paying $29/agent whether they dial or not. If a client's reps sit idle, your blended voice margin craters. The utilization math here is unforgiving, price the agent fee into the package or make sure the minutes justify it.
  • Segment counting bites you. A 175-character message with an emoji is three unicode segments, not one. If you bill the client for "22,000 messages" and the carrier bills you for 38,000 segments, your SMS margin inverts. Run the segment reconciliation every month, not at renewal.
  • The pass-through is per segment, not per message. The $0.0045 rides every segment. On multipart messages that compounds. Include it in your cost model explicitly.

The crossover that fattens the whole thing automatically

One more lever. Ready's per-segment rate drops from $0.02 to $0.016 automatically once an account passes 50,000 segments in a calendar month, you don't pick a plan, it just applies. If you're aggregating multiple clients' volume under one account, you may be crossing that line without realizing it, and your SMS margin widens with no change to what you rebill. The tier breakpoint math is worth planning around if your combined volume is anywhere near 50K.

The practical takeaway

Rebilling SMS at cost makes you nothing, and rebilling it at a fat markup makes you a churn risk. The move is to stop treating SMS as the profit center and start treating it as the anchor on a three-line package:

  1. SMS, thin, honest markup. It's the commodity that gets the client sending.
  2. Dialer minutes, 50%+ margin, billed per agent with no per-seat platform tax.
  3. Scrubbing, $0.005 in, $0.015 out, selling real risk reduction the client won't price-shop.

Run the blend and you land in the 30 to 40% range without ever defending a scary per-text number. The SMS looks fair because it is; the margin lives where the client can't easily comparison-shop.

If you want to model your own client mix, see what a text costs. Your first 20 texts are free with a card on file, so you can test the package on one client before you roll it out. Sign up and build the three-line offer before your next renewal conversation.