The Hidden Emoji Tax: How One π Triples Your SMS Bill
You write a clean, friendly 158-character promo. You proofread it. You drop in one smiley to warm it up. You hit send to 5,000 contacts. The bill comes back roughly three times what you expected, and nobody on your team can explain why.
That smiley did it. Not because emojis are expensive β they aren't β but because of how SMS encodes characters under the hood. One emoji silently changes the encoding of the entire message, which slashes how many characters fit in a single billable segment from 160 down to 70. Your "one text" quietly became three.
Full disclosure: I work for ReadySMS, so I bill per segment and I have a direct interest in you understanding segments. But this particular problem isn't a ReadySMS thing β it bites you on every SMS platform on earth, because it's baked into the carrier protocol. The difference is whether your platform shows you the math or hides it in an aggregate "messages sent" number.
Why a text message has a character budget at all
SMS predates smartphones. The original spec gives each message a fixed payload of 140 bytes. How many characters that buys you depends entirely on the encoding used to pack them in.
There are two encodings that matter:
- GSM-7 β the default 7-bit alphabet. Covers basic Latin letters, digits, common punctuation, and a small extension set. At 7 bits per character, 140 bytes holds 160 characters. This is the happy path.
- UCS-2 (Unicode) β used the moment your message contains any character GSM-7 can't represent. At 16 bits per character, 140 bytes holds only 70 characters.
The carrier doesn't mix encodings. If even one character in your message falls outside GSM-7, the entire message switches to UCS-2. There's no partial penalty. One offending character drops your whole budget from 160 to 70.
Multipart math makes it worse
Longer messages don't fail β they split into multipart segments, and each segment is billed separately. The split itself eats a few characters for the reassembly header, so the per-segment limits shrink:
| Encoding | Single segment | Each multipart segment |
|---|---|---|
| GSM-7 | 160 chars | 153 chars |
| UCS-2 (emoji/unicode) | 70 chars | 67 chars |
So a message that's perfectly fine as one GSM-7 segment can balloon into three UCS-2 segments after a single emoji forces the switch. You pay for all three.
The characters that secretly aren't GSM-7
Emojis are the obvious culprit, but they're not the sneakiest one. The sneakiest characters are the ones that look completely normal and get inserted automatically by the tools you write in.
Watch for these:
- Smart / curly quotes β
"and"instead of straight", or'instead of'. Word, Google Docs, Notes, and most CMS editors do this conversion silently as you type. - Em dashes and en dashes β
βandβinstead of a plain hyphen-. - Ellipsis character β the single-glyph
β¦instead of three periods.... - Accented letters β
Γ©,Γ±,ΓΌ, etc. (Some are in the GSM-7 extension table, many aren't.) - Non-breaking spaces β invisible, pasted in from other documents, and absolutely not GSM-7.
- Emoji and dingbats β
π,β,β,β’in some renderings.
The cruelest part: the em dash and the curly quote are invisible problems. You can't see why your 155-character message is suddenly billing as a 3-segment UCS-2 send. It reads as plain text. The encoding doesn't care what it looks like to you.
A 5,000-send campaign, both ways
Let's put real numbers on it. Say you're on the ReadySMS Basic tier at $0.0074/segment, plus the $0.0045/segment carrier pass-through, billed transparently and separately. That's $0.0119 per segment all-in.
Version A β encoding-clean copy (GSM-7, 152 characters):
Hi Sarah! Your order is ready for pickup at our Main St store until 6pm today. Reply STOP to opt out. Questions? Just reply here and we'll help out.
152 characters, all GSM-7. That's 1 segment.
- 5,000 contacts Γ 1 segment Γ $0.0119 = $59.50
Version B β same message, one emoji and a couple of smart quotes (175 characters, UCS-2):
Hi Sarah! π Your order's ready for pickup at our Main St store until 6pm today. Reply STOP to opt out. Questions? Just reply here and we'll help β happy to sort it!
That emoji forces UCS-2. Now the 70/67-char limits apply. At 175 characters: first segment 67, second 67, third holds the rest β 3 segments.
- 5,000 contacts Γ 3 segments Γ $0.0119 = $178.50
Same campaign. Same audience. The "warmer" version cost $119 more β a 3x multiplier β and the only functional difference your customer sees is one smiley and a slightly longer sign-off.
Run that across a year of weekly sends and you're looking at roughly $6,000+ in avoidable spend on a single 5,000-contact list. Scale the list or the cadence and the gap widens proportionally. If you want to model your own list and tier, the cost calculator does the segment math for you.
"But the emoji boosts engagement" β does it?
Fair pushback. Emojis can lift open and tap rates in some audiences, and I'm not going to pretend they never help. Here's the honest framing: the question isn't "emoji vs. no emoji," it's "is this emoji worth tripling this send's cost?"
A few practical positions:
- One intentional emoji at the start of a high-converting promo can earn its keep if your data shows it lifts response. Test it. Don't assume it.
- Accidental smart-quotes and em dashes never help anything. They're pure waste β invisible to the reader, billed at 3x. Kill those unconditionally.
- If you want the emoji, budget for it. Trim the copy to fit a single 70-char UCS-2 segment, or accept the multipart cost as a deliberate line item. What you don't want is to pay the tax by accident.
If you're serious about whether the lift justifies the cost, build it into an A/B testing framework and measure revenue-per-send, not just open rate. The emoji version has to clear a 3x cost bar before it "wins."
How to write encoding-aware copy
You don't need a degree in character sets. You need a few habits:
- Compose in a plain-text editor, not a word processor. Notepad, VS Code, or your platform's own message box β anything that doesn't auto-convert quotes. This single change kills the most common invisible culprits.
- Use straight quotes and plain hyphens. Type
"not", type-notβ, type...notβ¦. - Watch your character counter and your segment counter. A good sender UI shows both the encoding (GSM-7 vs UCS-2) and the live segment count as you type. If you see "UCS-2" appear and you didn't add an emoji on purpose, you've got a hidden character.
- Keep promos under 160 GSM-7 characters when you can. With opt-out language included, that's tighter than it sounds. Front-load the offer.
- If you must use Unicode, fit it in one segment. 70 characters with the emoji beats 175 characters that span three.
Tightening copy isn't only an encoding play β it's the cheapest lever you have on SMS spend generally. We dug into the broader version of this in how to reduce SMS costs, and the same instinct applies: every character is a line item.
Why transparent per-segment billing matters here
Here's where your platform either helps you or hides the problem. If your provider bills you on an opaque per-message or bundled basis, the emoji tax disappears into an average and you never find it. You just notice the bill creeping.
ReadySMS bills per outbound segment, with the carrier pass-through itemized separately, so a 3-segment send shows up as exactly that. When your invoice is legible, encoding mistakes become visible β and visible mistakes get fixed. That's the whole argument. You can see the full tier structure on the pricing page, and if you're weighing platforms on raw send economics, the Twilio vs ReadySMS at scale breakdown gets into the per-segment comparison.
The practical takeaway
The emoji tax is real, it's invisible, and it's entirely avoidable:
- A single emoji, smart-quote, em dash, or accented letter flips your whole message from GSM-7 (160 chars) to UCS-2 (70 chars).
- That can turn one billable segment into three β a flat 3x cost multiplier on the affected sends.
- On a 5,000-contact list at $0.0119/segment all-in, that's the difference between $59.50 and $178.50 for the same campaign.
- Write in plain text, use straight quotes, watch the live segment counter, and treat every deliberate emoji as a cost decision you can defend.
None of this requires switching tools. Open your last broadcast, paste it into a plain-text editor, and look for curly quotes and em dashes you didn't know were there. You'll probably find a few β and quietly hand yourself a discount on the next send.
If you want to watch the segment count update live as you write, you can start on the free tier (2,500 credits, no card) and just see the encoding flip in real time. That feedback loop is the actual fix.