Most people who write texts for a business think in messages. Carriers bill in segments. That gap can make a campaign that looked like one text per person cost two or three times what you budgeted, because one emoji, one accented letter or one opt-out line pushed every message over a limit.
This guide is for the person writing the copy. It covers how characters turn into segments, which characters change the math, what casing does (and doesn't do), and how to handle links so they don't hurt delivery. We make Ready, so the cost examples use our Standard rate, but the segment rules are the same on every provider.
How characters become segments
A text message travels in fixed-size chunks called segments, and each segment is billed. How big a segment is depends on the encoding the message needs.
| Encoding | When it's used | Single-segment limit | Per segment when split |
|---|---|---|---|
| GSM-7 | Plain letters, numbers, common punctuation | 160 characters | 153 characters |
| Unicode (UCS-2) | Any character outside GSM-7: emoji, some accents, many symbols | 70 characters | 67 characters |
Multipart messages hold fewer characters per segment because each one carries a small header that tells the phone how to reassemble the message. A 161-character GSM-7 text isn't "160 plus 1." It is two segments of up to 153 characters each.
The breakpoints writers should memorize:
- GSM-7: 1 segment up to 160 characters, 2 segments up to 306, 3 segments up to 459
- Unicode: 1 segment up to 70, 2 up to 134, 3 up to 201
The recipient sees one message either way. Your bill sees the segments.
The characters that quietly change the encoding
One non-GSM character switches the entire message to Unicode, not only that character. A 140-character text that fits in one segment becomes 3 segments the moment you add a single emoji, because 140 characters is over the 134-character limit for two Unicode segments.
Common causes:
- Emoji. Every emoji forces Unicode.
- Some accented letters. GSM-7 includes é, ñ, ü, à and a few others, but not á, í, ó or ú. That matters a lot for Spanish copy. We broke down exactly which accents are safe in our post on Spanish accents and segment cost.
- Smart punctuation. Curly quotes, em dashes and the single-character ellipsis (…) aren't GSM-7. Copy pasted from a doc or a design tool often brings these along. On Ready, these are swapped for plain versions before sending, so they don't change your count. On other platforms, check.
- Symbols like ™, •, or →. These are decorative and expensive.
There's a quieter trap too. A handful of GSM-7 characters count as two characters because they sit in an extended table: [ ] { } \ ~ ^ | and €. They don't force Unicode, but they eat into your 160. A bracketed [Name] placeholder that ships unfilled costs you four characters, not two.
Merge fields also catch writers out. "Hi {first_name}" might render as "Hi Al" or "Hi Christopher-James." Count with your longest realistic value, not your own name.
Worked example: what one emoji costs on a 5,000-contact campaign
Here's the same promo written three ways, sent to 5,000 opted-in contacts on Standard ($0.0075 per segment plus a $0.0045 carrier fee per segment).
Version A: 175 characters with one emoji. Unicode, and 175 characters falls between 134 and 201, so it's 3 segments.
- 5,000 × 3 = 15,000 segments
- 15,000 × $0.0075 = $113 in Standard rate, plus 15,000 × $0.0045 in carrier fees
Version B: same 175 characters, emoji removed. GSM-7, and 175 falls between 160 and 306, so it's 2 segments.
- 5,000 × 2 = 10,000 segments
- 10,000 × $0.0075 = $75, plus 10,000 × $0.0045
Version C: trimmed to 158 characters, no emoji. 1 segment.
- 5,000 × 1 = 5,000 segments
- 5,000 × $0.0075 = $38, plus 5,000 × $0.0045
Same offer, same list, and the difference between A and C is 3x the segments. Replies are billed like sent texts on Ready, so a campaign that gets a healthy reply rate adds more segments on top. That's another reason to keep your own messages lean. These figures exclude the optional compliance surcharge for scrubbing or landline validation ($0.003 per segment each, off by default). Current rates are on our pricing page.
None of this means emoji are banned. For a 40-character "Your table is ready 🍽️," you're under 70 characters and it's one segment either way. The rule of thumb: emoji are fine in short texts and expensive in long ones.
If you run an agency and your rebilled numbers don't match your provider invoice, segment inflation from emoji and accents is usually the reason. We walked through that audit in the segment-count reconciliation post.
Uppercase, lowercase and the spam filter
Casing has no effect on segment count. Capital and lowercase letters are both in GSM-7, so "SALE" and "sale" cost the same. Casing matters for two other reasons: how the message reads and how carrier filters treat it.
What ALL CAPS does to a text
Text is a personal channel. A message in all caps reads as shouting, and it looks like the spam people already get. Carrier content filters look at patterns associated with unwanted messages, and heavy capitalization, combined with words like FREE or URGENT and a link, fits that pattern. Carriers don't publish their filter rules, so nobody can give you a precise threshold. The practical guidance is consistent, though: don't write whole sentences in caps.
Registration doesn't protect you here. An approved 10DLC campaign can still have individual messages filtered for content, which we covered in why approved campaigns still get filtered.
Where caps are fine
- Keywords people must type: "Reply STOP to opt out" or "Reply YES to confirm." Caps make the instruction obvious.
- A single short emphasis: "Closed MONDAY for the holiday." One word, used sparingly.
- Brand names that are written that way.
Sentence case wins for everything else
Write texts the way you'd text a customer you respect: sentence case, normal punctuation, one exclamation point at most. All-lowercase "casual" copy can work for some consumer brands, but it can read as sloppy for anything involving money, health or appointments.
Links: length, shorteners and placement
A link is often the most expensive part of a text, character for character.
Length
A full tracking URL with UTM parameters can run 100+ characters, which leaves almost nothing for the actual message. Trim parameters you don't analyze, or point to a short path on your own domain (yourbrand.com/spring) that redirects to the full URL.
Public shorteners
Generic public link shorteners are widely associated with filtered traffic, because spammers use them to hide destinations. Many senders see better results with a branded domain or a short path on their own site. It costs a few characters more and tells the recipient, and the filter, where the link goes.
Placement
- Put the link after the context, not as the opening words. "Your invoice is ready: yourbrand.com/inv" beats a bare link.
- Leave a space before and after the URL so punctuation doesn't get swallowed into it. A trailing period glued to a link can break it on some phones.
- One link per message. Two links look like spam and double the character cost.
- Links in sample messages also matter at registration. If your live texts use a domain your sample messages didn't, that mismatch can draw scrutiny.
The required bits that eat your character budget
Before you write the offer, subtract what has to be there anyway:
- Business name. Recipients need to know who's texting. "Bayside Dental: " is 16 characters.
- Opt-out language. "Reply STOP to opt out" is 21 characters, plus a space or line break. You don't need it on every message in an ongoing conversation, but include it on the first message and on campaigns.
- Line breaks. A newline counts as one character. They're worth it for readability, but they aren't free.
That's roughly 40 characters spoken for, so a single-segment GSM-7 campaign gives you about 120 characters for the actual message and link. Write to that number from the start instead of cutting later.
A pre-send checklist
Run every campaign template through this before it goes out:
- Count with the longest merge values filled in, using a GSM-7-aware counter, not a word processor's count.
- Search for non-GSM characters: emoji, á/í/ó/ú, ™, bullets, arrows. Decide whether each one is worth the extra segments.
- Check for extended characters (brackets, braces, €) that count double.
- Read it in caps-free sentence case, keeping caps only for keywords like STOP and YES.
- One link, on your own domain, with spaces around it.
- Business name and opt-out included where required.
- Do the math: contacts × segments × (rate + carrier fee). If the number surprises you, trim.
Ready's AI message writer and spam-filter check can help with steps 4 and 5 by flagging copy that looks like the patterns filters catch. For more on that, see writing faster without getting filtered. Treat it as a second reader, not a replacement for counting.
The takeaway
Segments, not messages, drive cost. Plain GSM-7 copy under 160 characters is one segment. One emoji or one á can turn the same words into two or three. Casing doesn't change the bill, but it changes how the message reads and how filters judge it. Links are worth trimming and keeping on your own domain.
If you want to test this on real sends, your first 20 one-to-one texts on Ready are free once a card is on file. Use them to check how your templates render before you register and launch a campaign. You can create an account here, or read the messages API docs if you're sending from your own app.