Sending one text to your whole list is the easiest campaign to set up and the most expensive to run. Every contact who gets a message that doesn't fit them costs you a billed segment, a little brand trust, and sometimes an opt-out you can't win back. Segmentation fixes this. It is not a growth hack. You stop paying to tell people things they don't care about.

This post covers three kinds of segments: behavior, purchase and location. It explains how to build each one from data you probably already have, and works through the cost math so you can see what a tighter send saves. One vocabulary note first, because SMS has an annoying collision. A "segment" in billing is a 160-character chunk of a message. A "segment" in marketing is a slice of your audience. We'll say "audience segment" or "billing segment" wherever the difference matters.

Why a smaller send usually wins

There are three reasons, and only one of them is about response rate.

Relevance. A text about a product someone already bought, or an event 400 miles away, reads as noise. Opted-in SMS lists often see reply or click rates far above email. That advantage shrinks fast when the message doesn't match the person.

Opt-outs are permanent. On Ready, an inbound STOP is honored automatically, and the opt-out applies across every campaign, so that contact can't be texted again. That protects you legally. It also means every irrelevant send risks losing a contact for good, not just for that one campaign.

Carrier capacity is finite. Carriers meter by billing segment, and a fresh 10DLC campaign gets limited throughput. Sending fewer, better-targeted messages keeps you under those limits. We work through the numbers below.

The cost math: whole list vs a targeted audience segment

Here is a worked example with stated assumptions. You have 20,000 opted-in contacts. Your promo is 150 characters of plain text with no emoji, which is 1 billing segment per contact. On Ready's Standard rate of $0.0075 per segment plus a $0.0045 carrier fee per segment:

SendContactsBilling segmentsStandard rate costCarrier fees
Whole list20,00020,000$15020,000 × $0.0045
Targeted audience segment4,0004,000$304,000 × $0.0045

That all-in figure leaves out the compliance surcharge. TCPA/DNC scrubbing and landline validation each add $0.003 per segment when switched on for the account, and both are off by default.

Now add one emoji to the same message. GSM-7 encoding gives you 160 characters per billing segment. One emoji switches the whole message to unicode, which drops that to 70 characters, or 67 per part once the message splits. A 150-character text with a single emoji becomes 3 billing segments. The whole-list send jumps to 60,000 segments: $450 at the Standard rate, plus 60,000 × $0.0045. Targeting and character discipline compound, so do both. (On Ready, curly quotes, long dashes and ellipses are swapped for plain characters before sending, so those don't trigger the unicode jump. Emoji still do.)

Two more line items belong in the budget. Replies are billed like sent texts, so a send that works costs a little more on the inbound side. That is a good problem to have. Our guide to reducing SMS costs has more on trimming billing segments.

The throughput side

Assume a fresh standard 10DLC campaign with no brand vetting, sending at roughly 3 billing segments per second. Carriers don't publish an official rate card, so treat this as a round assumption.

  • 20,000 segments ÷ 3 per second ≈ 6,700 seconds, close to 2 hours of sending
  • 4,000 segments ÷ 3 per second ≈ 1,330 seconds, about 22 minutes

T-Mobile also applies a daily brand cap tied to trust score, and the lowest tier is around 2,000 messages a day. A brand at that tier can't push a 20,000-contact send through in one day no matter what. A targeted send fits the cap.

Behavior segments: what people did recently

Behavior segments are built from actions, not demographics. They tend to perform best because they reflect current intent.

Useful behavior segments to build first:

  1. Clicked but didn't convert in the last 7 days. They showed interest. A follow-up with a specific reason to act, such as a deadline or a common question answered, often beats a fresh promo to the whole list.
  2. Replied to a past campaign. Anyone who texted back is engaged. Treat them as your warmest audience.
  3. Abandoned a cart or form. This is time-sensitive and usually automated. Our post on abandoned cart SMS covers timing and the consent rules.
  4. No engagement in 90+ days. Text this group less, not more. Send one honest "still want these?" message, and stop texting the people who don't respond.

How to build them: behavior data usually lives in your store, CRM or analytics tool, not in your SMS platform. Export the list of phone numbers that match the rule, or sync it, and send to that list only. If you work in GoHighLevel, build the audience with GHL's own filters and smart lists. Ready's native integration syncs sends and replies two-way, mapped per GHL location, so each sub-account stays isolated.

Purchase segments: what people bought, and when

Purchase history is the most reliable signal you have, because money already changed hands.

  • First-time buyers within 30 days. Send a how-to, a care tip or a review request. Don't send a discount on the item they just paid full price for.
  • Repeat buyers. Give them early access or a restock alert. Small list, high value.
  • Replenishment window. If a product runs out on a predictable cycle, say every 45 days, text people around day 40. This is one of the cleanest uses of SMS.
  • Category buyers. Someone who only buys dog food shouldn't get the cat litter promo.
  • Lapsed buyers. If someone purchased once but not in 6+ months, send one win-back, then move them to a lower-frequency drip campaign.

A common mistake is building purchase segments so narrow that each one has 40 people in it. Then you spend more time writing variants than the sends return. Start with three or four broad splits, and only subdivide once a split clearly outperforms.

Location segments: where people actually are

Location targeting matters for events, store-specific offers, weather-driven promos and service areas.

Use real address data, not area codes. People keep their phone numbers when they move. An area code tells you where someone got their phone, possibly a decade ago. For targeting, use the ZIP or city from billing, shipping or a signup form. Area codes are fine for choosing which number you text from. They are not reliable for deciding who gets the offer.

Two Ready features touch location, and they do different jobs:

  • Quiet hours hold sends outside permitted local hours, based on the recipient's area. A list that spans time zones doesn't need a separate send per zone just to stay compliant. A held text goes out later and is charged only when it sends. Campaigns, drip campaigns and automations wait up to 24 hours for the window; a one-to-one or API text is held only if the window opens within 6 hours, otherwise it is refused and must be resent; a one-to-one reply to someone who texted you in the last 24 hours goes out at any hour.
  • Local presence sends from the account's number closest to the contact's area code. Teams turn it on because a familiar local number tends to look less like spam. Every number still sits on your registered 10DLC campaign, so local presence chooses among registered numbers and does not get around registration. In GoHighLevel, the #from:local# tag selects it.

Sending an audience segment by API

If you run a platform or your own app, you will build segments in your own database and hand Ready the resulting phone numbers. The bulk endpoint takes up to 100 recipients per call, so split larger audiences into batches:

POST https://api.tryready.com/v1/messages/bulk
X-API-Key: <key>
Idempotency-Key: 3f6c2a1e-8b4d-4e2a-9c7f-1d2e3f4a5b6c

{
  "to": ["+12125550199", "+15559876543"],
  "body": "Your usual order is due soon. Reorder this week for free shipping. Reply STOP to opt out.",
  "consent_attested": true
}

Use a fresh Idempotency-Key per batch, so a retried request never sends twice. Contacts who opted out are refused up front and not charged. You can also pull GET /v1/opt-outs to keep your own segment tables clean. To send from the number nearest each contact, send each text with POST /v1/messages and add "from_strategy": "local". The bulk endpoint takes one from number for the whole batch, or picks one for you when you leave it out. Full reference: bulk messages docs.

Consent comes before any segment

Segmentation only applies to people who agreed to receive texts. A purchased or scraped list is not an audience segment. It is a liability. Cold outreach belongs on phone and mail. SMS goes to consented or replied contacts. If you are still building the list, start with how to build an SMS marketing list.

Ready records a sender attestation for every bulk send and every API send that sets consent_attested: who sent, to how many people, and when. That is a useful audit trail. It is not a per-contact consent record, so your store or CRM still needs to keep each contact's opt-in time, wording and source. Compliance remains the sender's responsibility. Our tools reduce risk; they don't make anyone immune to it.

The practical takeaway

Start with three audience segments, not twelve: recent engagers, recent buyers and lapsed contacts. Write one message for each, keep each to a single billing segment, and compare the replies, clicks and opt-outs against your last whole-list send. If a segment wins clearly, split it further. If a segment never responds, text it less.

For the mechanics of setting up the send itself, see how to run an SMS campaign step by step. If you want to try this on Ready, the pricing page shows the Standard rate, and you can sign up with a card on file. The first 20 one-to-one texts are free, so use them to test your messages before you register.