Text voting looks easy. You put "Text A, B or C to this number" on a screen, people reply, and you count. The trouble comes from the parts nobody plans for: a reply of "a." or "Option A!!" that your counter misses, a STOP that gets logged as a vote, a 2,000-person surge that runs into a carrier's daily cap, and confirmation texts held until morning because someone voted at 11 PM.

This guide covers the operational side of running polls, votes and contests over SMS. It covers keyword design, consent, tallying, carrier rules and what a poll costs per segment. If you want event-specific formats like audience polls, talent votes and live Q&A, see our companion piece on SMS voting and text polls for events.

Before anything else: what kind of "vote" is this?

Most text voting is commercial or community activity. Examples include "pick next month's flavor," "vote for employee of the month," a photo contest, or a conference session poll. That traffic belongs on a normal registered 10DLC campaign.

If your poll touches elections, voters, ballot measures, call-your-rep alerts or donation appeals, the rules are different. Email support@tryready.com before the first send and wait for our reply. Under our acceptable use policy, signing up and registering is not enough on its own for political, advocacy or fundraising texting.

Keyword design that survives real humans

The keyword is the voter's whole interface, so most of the tally problems start here.

Rules for picking response keywords

  • Never use reserved words. STOP, STOPALL, STOP ALL, UNSUBSCRIBE, UNSUB, CANCEL, END, QUIT, OPTOUT, OPT OUT, OPT-OUT, REMOVE, REVOKE, HELP, INFO and START already carry meaning to carriers and to opt-out handling. A poll option called "END" will opt people out.
  • Prefer single letters or numbers for multiple choice. "Reply 1, 2 or 3" beats "Reply PIZZA, TACOS or SUSHI." Fewer typos, and autocorrect leaves digits alone.
  • Use distinct words for entry keywords. For a contest entry like "Text PHOTO to enter," pick a word that autocorrect won't change and that doesn't look like a common reply. "Yes" and "OK" make poor keywords.
  • Publish the exact format and the close time. "Reply 1, 2 or 3 by 8 PM ET Friday. One vote per number."

Normalize before you count

Expect replies like 1, 1 , 1., #1, one, Option 1 and 1 please. Before tallying, your counter should do the following:

  1. Trim whitespace and lowercase the text.
  2. Strip punctuation.
  3. Map number words to digits ("one" becomes "1").
  4. Accept the reply if exactly one valid option appears in it.
  5. Put everything else, such as "1 or 2" or "who's on the ballot?", in a manual-review bucket. Don't discard those replies.

The manual-review bucket is where the real questions show up. Inbound replies land in the Ready Inbox (and in GoHighLevel for connected accounts), so someone can answer "who's on the ballot?" like a normal conversation.

Consent: what a vote does and doesn't authorize

When someone texts your keyword first, they started the conversation. That makes a single confirmation reply ("Got your vote for #2. Results Monday.") about as safe as texting gets.

That consent is narrow, though. It covers the poll. It does not cover adding the voter to your promo list. If you want to market to voters later, ask in the same flow and record the answer. For example:

Thanks, your vote for #2 is in. Want monthly deals from Rosa's Bakery? Reply JOIN. Msg & data rates may apply. Reply STOP to opt out.

Ready records the sender's opt-in attestation for every bulk send and every API send that sets consent_attested: who sent, to how many and when. That gives you an audit trail of your own promise. It is not a per-contact consent record, and a keyword reply does not create one. Your system needs to store the phone number, the time, the exact wording the voter saw and replied to, and where they saw it (event screen, flyer, web page). Compliance is ultimately the sender's responsibility. For opt-in wording that gets campaigns approved, see 10DLC opt-in examples and sample messages.

Two rules apply that you can't turn off:

  • Don't text a cold list asking people to vote. Outbound poll invitations go to people who already agreed to hear from you.
  • STOP wins. Ready honors STOP and UNSUBSCRIBE automatically and blocks the contact across campaigns. Opted-out numbers are refused before a send and are not charged. Your tally should exclude STOP and HELP replies; a STOP is not a vote.

Carrier rules: registration, use case and throughput

Polls and contests send application-to-person traffic, so they need a registered 10DLC brand and campaign. On Ready that registration happens in-app. It costs $25/mo for registration, plus $2 per number. The first month ($25) is charged at submit, with no setup fee. Most approvals take 2 to 7 days, so register before you print the flyer, not after.

Pick the campaign use case that matches what you actually send. A poll with marketing follow-ups is marketing. A purely internal employee vote may fit a different use case. A mismatch is a common reason for filtering after approval. Our use-case picking guide walks through it. Sweepstakes and prize contests tend to draw extra carrier scrutiny. Spell out the entry method, the rules and the opt-out in your sample messages.

The surge problem

Voting traffic is spiky. Everyone replies in the same five minutes after the host says "vote now." Consider the outbound side of that spike:

  • A fresh standard campaign without vetting typically gets around 1 to 4 segments per second (carriers publish no official rate card, so treat that as approximate).
  • At an assumed 3 segments per second, 2,000 confirmations take about 11 minutes to go out (2,000 ÷ 3 ≈ 667 seconds).
  • T-Mobile caps brands by trust score. The lowest tier is roughly 2,000 messages a day, so a 2,000-vote poll with confirmations can use the whole day's allowance on its own.

There are a few ways to handle this. You can skip individual confirmations and post results on screen. You can send confirmations as one-segment plain text. Or, if this is a regular high-volume event, consider brand vetting ($79 Standard / $179 Enhanced, one-time). Vetting raises the daily cap only if it moves you up a tier, and it doesn't change the per-second rate. Our brand vetting breakdown covers when the cost is justified.

Quiet hours also matter. Ready holds sends outside permitted local hours for the recipient's area. A confirmation to someone who voted late at night may arrive the next morning. It 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.

Tallying through the API

For anything bigger than a hand count, pull inbound messages and count them in your own code. Page through GET /v1/messages using before_id, filter to the poll's number and time window, normalize each body, and keep one vote per phone number. Decide in advance whether a number's first vote or last vote counts, and publish that rule.

Sending a confirmation looks like this:

POST https://api.tryready.com/v1/messages
X-API-Key: <your key>
Idempotency-Key: <a new UUID for each text>
Content-Type: application/json

{"to": "+12125550199", "body": "Got your vote for #2. Results Monday. Reply STOP to opt out.", "consent_attested": true}

Use the voter's phone number plus the poll ID to derive the Idempotency-Key. That way a retried job never confirms the same voter twice. To post results to voters who opted in to follow-ups, POST /v1/messages/bulk takes up to 100 recipients per call, so batch larger lists. Endpoint details are in the messages docs and bulk docs.

What a 2,000-vote poll costs

Inbound replies are billed like sent texts on Ready: the Standard rate of $0.0075/segment plus a $0.0045 carrier fee per segment. Here is a worked example with stated assumptions:

ItemSegmentsNotes
2,000 inbound votes2,000Each "2" is one segment
2,000 plain-text confirmations2,000Under 160 GSM-7 characters
Results text to 600 who replied JOIN600One segment each
Total4,600

At the Standard rate, that is 4,600 × $0.0075 = $35, plus 4,600 × $0.0045 in carrier fees. That all-in figure excludes the optional compliance surcharge. DNC/litigator scrubbing and landline validation each add $0.003 per segment when switched on, and both are off by default.

Now add one 🎉 to the confirmation. With an emoji, the segment limit drops to 70 characters. A 120-character confirmation becomes 2 segments instead of 1. That turns 2,000 confirmation segments into 4,000, which adds 2,000 × $0.0075 = $15 in rate plus fees and doubles your load against the throughput cap. For voting confirmations, plain text is the better choice.

Per segment, raw CPaaS APIs and GoHighLevel's LC Phone come in at a lower rate. What Ready includes is in-app registration, automatic opt-out handling, quiet hours and an inbox for the "who's on the ballot?" replies. Weigh those against building them yourself.

The practical checklist

  • Register the brand and campaign at least a week before the vote.
  • Use digit or single-letter options and never reserved words.
  • Normalize replies, keep one vote per number, and route oddities to a human.
  • Confirm in plain text, or skip confirmations if the surge would hit your cap.
  • Store your own consent record and ask separately before marketing to voters.
  • For anything political, advocacy or fundraising, email support@tryready.com first.

If you want to test the flow before registering, the first 20 one-to-one texts are free. Use them to rehearse your keyword and confirmation, then register. You can start here when you're ready.