A client emails you three days before renewal. "We sent 22,000 texts last month. Why does the invoice say 38,000?" You don't have a good answer ready, because you've never actually reconciled the bill โ€” you rebilled at a flat per-message rate and assumed the numbers lined up. They don't. They almost never do.

Full disclosure: I work for Ready, and we bill per outbound segment, not per message, precisely because the two words describe different things and pretending they're the same is where agency margin quietly leaks. This post is about running the audit nobody runs until a client forces it.

A "message" is a marketing word. A "segment" is a billing unit.

When your client says they sent 22,000 messages, they mean they hit send on 22,000 conversations. When the carrier bills, it counts segments โ€” the actual packets that crossed the network. One message can be one segment or five.

The split point is character encoding:

  • GSM-7 (plain text): 160 characters in a single segment. Longer messages split into 153-character chunks, because the carrier steals 7 characters per part for reassembly headers.
  • Unicode (any emoji, curly quote, em dash): the ceiling drops to 70 characters per segment, 67 once it's multipart.

So a 175-character plain-text promo isn't "one long text." It's two segments (153 + 22). Add a single ๐Ÿ˜Š and the whole message downgrades to Unicode โ€” now 175 characters needs three 67-character segments. Same message, triple the bill. We wrote up that exact trap in The Hidden Emoji Tax and the 160-vs-153 cliff if you want the character-counting mechanics.

That's the whole 22,000-to-38,000 mystery. The messages averaged 1.7 segments each. Nobody was overcharged โ€” the invoice was just measuring the thing that actually got sent.

Where the 73% overage actually came from

Let's rebuild the client's month. Say they ran four campaigns:

CampaignMessagesCharsEncodingSegments/msgTotal segments
Welcome flow6,000148GSM-716,000
Weekend promo (has ๐ŸŽ‰)8,000132Unicode216,000
Appointment reminder5,000210GSM-7210,000
Restock alert3,000289GSM-726,000
Total22,00038,000

The weekend promo is the killer. It's a short 132-character message โ€” should be one segment โ€” but that party emoji dropped the ceiling to 70 and forced it to two. Strip the emoji and it's one segment: 8,000 instead of 16,000. That single character cost 8,000 segments.

At Ready Standard, 8,000 segments is 8,000 ร— ($0.02 + $0.0045) = $196 of pure encoding waste, on one campaign, for one emoji. If you're rebilling that to your client at $0.03, they paid $240 for a decoration.

The appointment reminder is a subtler leak โ€” 210 characters is just over the 160 line, so every reminder is two segments. Trim it to 155 and you halve that line. We covered that exact rewrite in Trimming 12 Characters Took This Campaign From 2 Segments to 1.

Running the audit: five columns you need

You can't reconcile a bill that only reports dollars. You need a per-campaign export with these fields:

  1. Message count โ€” how many sends fired.
  2. Total segments billed โ€” the number the invoice actually charges on.
  3. Segments per message (2 รท 1) โ€” anything above 1.0 is a compression opportunity.
  4. Encoding flag โ€” GSM-7 or Unicode per campaign. A Unicode flag on a short message is an instant red flag.
  5. Carrier pass-through โ€” the $0.0045/segment carrier fee, itemized separately.

That fifth column is the one resellers hide. Most providers bake the carrier fee into a rounded per-message number, so you literally cannot see what's platform margin and what's a carrier cost you have no control over. Ready itemizes it โ€” $0.0045 per segment, billed straight through, not marked up. That's the whole point of The $0.0045 Carrier Pass-Through Your Reseller Bakes In: if you can't see the line, you can't reconcile the bill.

MMS is a different billing unit entirely

If any of those "22,000 messages" included an image, they're not segments at all. MMS is billed as its own unit โ€” one MMS is one MMS regardless of caption length, but it costs meaningfully more than a single SMS segment.

So a client who ran a picture campaign will see a bill that looks nothing like segment math, because it isn't. When you audit, split MMS into its own bucket first. Otherwise you'll try to explain a $400 line with segment counting and the numbers won't close.

Why transparent per-segment pricing makes this auditable at all

Here's the reconciliation problem with flat-rate and bundled plans: they average the pain away. A subscription plan that gives you "X messages for $Y" silently absorbs the difference between a 1-segment and a 3-segment message, which sounds convenient until you realize you can never see which campaigns are burning your allotment. The bill is a black box.

Per-segment billing is the opposite. Every number on the invoice maps to a physical thing that crossed the carrier. Ready's math is fixed and public:

  • Standard: $0.02/segment + $0.0045 carrier = $0.0245 all-in, 0โ€“50,000 segments/month.
  • Growth: $0.016/segment + $0.0045 carrier = $0.0205 all-in, applied automatically once you pass 50,000 segments in a calendar month.

That 38,000-segment month costs 38,000 ร— $0.0245 = $931. If you'd optimized encoding down to ~26,000 real segments, it's $637 โ€” a $294 difference you can hand a client as a concrete win. And if this client and three others together push you past 50,000 segments, the Growth rate kicks in automatically and drops your cost per segment 20% with no plan to switch. That tier crossover is worth watching โ€” here's the margin math on it.

The pre-renewal checklist

Run this the week before renewal, not the week the client asks:

  • Export segments per campaign, not just totals. Sort by segments-per-message descending.
  • Flag every Unicode campaign under 160 characters โ€” those are usually an accidental emoji or a curly apostrophe pasted from a Google Doc. One curly quote does the same damage as an emoji; the GSM-vs-Unicode tax post has the full list of trigger characters.
  • Flag every GSM-7 campaign between 161 and 320 characters โ€” trimming a handful of words drops those from 2 segments to 1.
  • Split MMS into its own line so you're not counting it as segments.
  • Confirm the carrier pass-through is itemized, not baked into the per-message rate. If your provider won't show it, you can't audit them.
  • Check your monthly total against the 50,000 breakpoint โ€” if you're close, small volume shifts change your per-segment cost.

Twenty minutes of this turns "why is the bill higher than I expected" from a renewal-threatening ambush into a report you send proactively, with a savings number attached.

The practical takeaway

Message count is what your client remembers hitting send on. Segment count is what actually got sent and billed. The gap between them is entirely explained by encoding and length โ€” a party emoji, a message that runs 15 characters past 160, an image that's really MMS. None of it is a mystery once you have a per-campaign, per-segment export in front of you.

The reason most agencies get ambushed is structural: flat-rate and reseller pricing hides the segment math, so you literally can't run the reconciliation. Transparent per-segment billing with the carrier fee on its own line makes the audit possible โ€” and turns it into a client-retention tool instead of a renewal-day fight.

If you want to see what your own numbers look like against a fully-itemized bill, Ready starts with 2,500 free credits, no card required โ€” take a look at ReadySMS or sign up and run one campaign through the export. The first time you sort by segments-per-message, you'll find money.