The core SMS marketing best practices are simple: text only people who agreed to hear from you, say who you are, make leaving easy, and send at hours and frequencies they expect. Everything else, including links, personalization and measurement, keeps those people opted in and keeps carriers from filtering your traffic.
The rules are short. Most teams get burned on the details: a consent checkbox nobody saved, a bit.ly link that trips a carrier filter, an emoji that doubles the bill, or a 10 PM send to a West Coast list scheduled from New York. This guide covers each of those, with the math where money is involved. We make Ready, so where our product handles a step we say so, and where it doesn't we say that too.
SMS marketing best practices: the short checklist
If you only read one section, read this one:
- Consent first. Get express written consent for marketing texts and store the record (time, wording, page URL) yourself.
- Identify yourself in every campaign by business name, and register your brand and campaign for A2P 10DLC.
- Include opt-out language ("Reply STOP to opt out") and honor STOP across every list and drip campaign.
- Respect quiet hours in the recipient's local time zone, not yours.
- Use clean links on your own domain, not public URL shorteners.
- Set a frequency, tell people what it is at signup, and stick to it.
- Personalize with data you actually have, with a fallback when a field is empty.
- Measure delivery, replies, clicks, opt-outs and revenue per send, not just "messages sent."
The rest of the post goes through each one.
Get consent you can prove
Consent is the whole game in SMS. TCPA exposure runs roughly $500 to $1,500 per text, so a 2,000-contact campaign to people who never opted in creates a very large number. Cold outreach belongs on the phone and in the mail. SMS goes to people who opted in or who texted you first.
What good consent looks like:
- A clear disclosure at the point of signup. Business name, what kind of messages, roughly how often, "Msg & data rates may apply," and "Reply STOP to opt out."
- An unchecked box or a keyword the person texts in. Consent can't be buried in terms of service or bundled into a purchase.
- A record you keep. The timestamp, the exact wording shown, and the page or form where it happened.
Be clear on who keeps that record. Ready records the sender's attestation on each bulk send and each API send that sets consent_attested: who sent, to how many, and when. In the API that's the consent_attested field on POST /v1/messages (docs). It is not a per-contact consent record. We don't store the recipient's opt-in time, wording or page URL, and a keyword reply doesn't create one. Your store, form tool or CRM has to keep that. If someone sues, the per-contact record is what you'll need. (A contact who signs up on a Ready-hosted opt-in page is the exception: Ready stores that sign-up, with the time, IP address and exact wording, and support@tryready.com can send you a copy.)
For how to grow a list without cutting corners, see how to build an SMS marketing list.
Scrub before you send
Consent and scrubbing work together. A list can be fully opted in and still contain known TCPA litigators or people who've filed DNC complaints. Ready's standalone TCPA & DNC Litigator Scrub is $0.005 per contact. It checks each number against litigator and DNC-complainer lists and flags matches before the send. That reduces risk. It doesn't make you lawsuit-proof, and compliance is still the sender's responsibility.
Identify yourself, and make leaving easy
Say who you are
Every campaign should name the business, ideally in the first few words. "Hi Sam, it's Maple Street Dental" beats "Hey! Big news inside" for trust and for carrier filters.
Identification also means registration. Carriers filter unregistered business traffic, so A2P 10DLC registration isn't optional for ongoing marketing. On Ready it's done in-app with no setup fee. The charge at submit is the first month, $25. After that it's $25/mo for registration and $2 per number each month. Most approvals take 2 to 7 days. An account can send up to 500 texts a month before it registers, at its normal per-text rate. Past that, it has to register. Our 10DLC explainer covers the background.
Honor STOP everywhere
Put "Reply STOP to opt out" in your first message to a new contact and periodically after that. Then honor it completely. On Ready, inbound STOP and UNSUBSCRIBE are processed automatically, and the opt-out applies across every campaign, so the contact can't be texted again from another list. API sends to opted-out numbers are refused up front and aren't charged. You can pull the list with GET /v1/opt-outs.
Two common mistakes:
- Sending "Are you sure?" after STOP. Send one confirmation that they're unsubscribed, then stop.
- Re-importing a CSV that includes people who opted out. This is why opt-outs need to live at the account level, not the list level.
Respect quiet hours
The TCPA restricts telephone solicitations to roughly 8 AM to 9 PM in the recipient's local time. Some states, Florida among them, set narrower windows. The key phrase is recipient's local time. A national list scheduled for 8 AM Eastern lands at 5 AM in Seattle.
Ready enforces quiet hours based on the recipient's area. A text sent during their quiet hours is held and charged only when it actually sends. That's a backstop, not a strategy. Plan send times on purpose: late morning and early evening tend to work for retail, and mid-morning on weekdays tends to work for B2B. Our post on the best time to send SMS marketing texts breaks this down by industry. 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.
Keep links clean and frequency predictable
Link hygiene
Carriers filter on content as well as registration. A campaign can be approved and still get blocked at the message level. The usual cause is links:
- Avoid public shorteners (bit.ly, tinyurl and similar). Spammers share those domains, so carriers treat them with suspicion.
- Use your own domain, or a branded short domain you control, and make sure it uses HTTPS and resolves without long redirect chains.
- Send one link per message. Three links in a text looks like phishing.
- Tag links with UTM parameters so you can measure clicks in your own analytics.
If your traffic is approved but still disappearing, read why approved campaigns still get filtered.
Frequency and segment math
Tell people at signup how often you'll text ("up to 4 msgs/month") and stay under that number. Going over it is a fast way to drive opt-outs.
Length matters as much as frequency, because every segment is billed. A single SMS segment holds 160 GSM-7 characters. Longer messages split into 153-character segments. One emoji switches the whole message to unicode, which drops the limit to 70 characters, or 67 per segment for multipart messages. (Ready swaps curly quotes, long dashes and ellipses for plain ones before sending, so those don't change your count.)
Here's a worked example on Ready Standard at $0.0075/segment plus the $0.0045 carrier fee, sent to 5,000 opted-in contacts:
| Version | Segments per text | Total segments | Rate cost | Carrier fees |
|---|---|---|---|---|
| 175 characters with one emoji | 3 (unicode) | 15,000 | $113 | 15,000 × $0.0045 |
| Same copy, emoji removed | 2 | 10,000 | $75 | 10,000 × $0.0045 |
| Trimmed to 160 characters, no emoji | 1 | 5,000 | $38 | 5,000 × $0.0045 |
The words are the same and the cost is 3x. These figures exclude the compliance surcharge: scrubbing and landline validation each add $0.003 per segment when switched on for an account, and both are off by default. Replies are billed like sent texts, so a campaign that gets a lot of replies costs a bit more. That's a good problem to have.
Personalize with data you actually have
Personalization works when it's real. "Hi {first_name}, your usual oil change is due" beats a generic promo. It also needs a fallback. "Hi , your order shipped" looks broken, and "Hi FIRSTNAME" looks like spam.
Practical rules:
- Segment by behavior, not just demographics. Past purchasers, recent inquiries and lapsed customers each need different messages.
- Use fallbacks for every merge field ("Hi there" when the name is empty).
- Reference something the person did. A booked appointment, an abandoned cart or a question they asked.
- Write like a person. Short sentences, one ask per message.
Ready's AI message writer helps draft copy, and the spam-filter check flags wording likely to get filtered before you send. Ready no longer offers AI agents that answer texts on their own. Replies come into the Inbox, and a person answers them. For a step-by-step build of a full send, see how to run an SMS campaign.
Measure the numbers that tell you something
"We sent 20,000 texts" isn't a result. Track these per campaign:
- Delivery rate. A sudden drop usually means filtering. Check links and content first.
- Reply rate. Conversational messages to opted-in lists get the most replies. Promos run lower. Use your own baseline, not someone else's.
- Click-through rate, from your UTM-tagged links.
- Opt-out rate per send. This is your early warning. A spike after a campaign means the frequency, timing or offer missed. As a rough rule, many teams treat anything above about 1 to 2% on a single send as worth investigating.
- Revenue or bookings per segment sent. Divide outcomes by segments, not messages, because segments are what you pay for.
Compare each campaign to your own history. Benchmarks from other industries mostly add noise.
FAQ
How often should I text my marketing list?
As often as you promised at signup, and no more. For most businesses that's 2 to 4 marketing texts a month. Transactional messages such as reminders and order updates are separate and follow the customer's activity. Watch your opt-out rate. If it climbs, cut frequency before you change anything else.
What hours can I send marketing texts?
Roughly 8 AM to 9 PM in the recipient's local time under the TCPA, and some states are stricter. Ready holds texts that would land during the recipient's quiet hours and sends them later, but schedule with time zones in mind anyway. 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.
Do I need 10DLC registration to send SMS marketing?
For ongoing business texting, yes. Carriers filter unregistered traffic. On Ready an account can send up to 500 texts a month before registering. After that it must register: $25 at submit for the first month, then $25/mo for registration and $2 per number. Most approvals take 2 to 7 days.
Does an emoji really change what I pay?
Yes. One emoji switches the message to unicode, so the segment limit drops from 160 to 70 characters, or 67 per segment for multipart. A 140-character text with one emoji is 3 segments instead of 1, and you pay for each segment.
Does a litigator scrub protect me from TCPA lawsuits?
It reduces risk. It doesn't remove it. A scrub ($0.005 per contact standalone on Ready) suppresses known litigators and DNC complainers, but provable consent, quiet hours and honoring opt-outs are what protect you. Compliance is always the sender's responsibility.
Where to start
If your SMS program is already running, audit it in this order. First, confirm you can produce a consent record for any contact. Next, check that STOP works across every list. Then remove public shorteners, and finally trim your top three templates to a single segment where you can. Those four fixes cover most of the risk and a lot of the wasted spend.
If you're starting fresh, you can create a Ready account and try the workflow. A card on file is required to send, and the first 20 texts are free one-to-one sends (campaigns are paid from the first text). Use them before you register, because the free texts end once a registration is paid for. Either way, the checklist above applies to whatever platform you use.