Text voting looks simple. You put "Reply A, B or C" on a screen or in a message, people reply, and you count. Then the votes arrive as "a", "Option A", "AAA", "b lol" and "STOP", half your confirmation replies queue behind a carrier rate limit, and someone asks whether you can text those voters about next year's event.
This guide covers the parts that decide whether an SMS poll works: how to design the keywords, how to count replies, what consent covers, the throughput limits behind your "thanks for voting" message, and what a vote costs. We make Ready, so we show how it handles two-way flows, and we say where another tool fits better.
Pick the right format before you pick a tool
Text polls come in three common forms. Each one has a different cost and a different amount of setup.
| Format | How it works | Best for | Watch out for |
|---|---|---|---|
| Reply-to-vote on a 10DLC number | You text an opted-in list, they reply A/B/C | Attendee polls, member votes, post-event surveys | Inbound replies are metered, and so are confirmation replies |
| Short code text-to-vote | "Text VOTE to 12345" on a screen or broadcast | TV-scale audiences, spikes from the general public | Separate provisioning and approval process, a much longer lead time |
| SMS link to a web survey | One text with a link, answers collected on a form | Multi-question surveys, ranked choices, free text | Lower completion than a one-tap reply, and link shorteners can get filtered |
Ready sends from registered 10DLC numbers and from the blue line. It does not send from short codes. If you are running a public vote announced on a broadcast to tens of thousands of strangers at once, a short code provider is the right tool. For event attendees, members, customers and ticket holders who already opted in, reply-to-vote on 10DLC fits well, and that is what the rest of this guide covers.
Design keywords that survive real thumbs
The keyword list is where most text polls break. Some rules:
- Use single letters or numbers. "Reply 1, 2 or 3" beats "Reply PIZZA, TACOS or SUSHI." People make fewer typos, and you have less to normalize.
- Never use opt-out words as options. Carriers and platforms treat words like STOP, END, CANCEL, QUIT and UNSUBSCRIBE as opt-out requests. On Ready, a reply that is exactly one of STOP, STOPALL, STOP ALL, UNSUBSCRIBE, UNSUB, CANCEL, END, QUIT, OPTOUT, OPT OUT, OPT-OUT, REMOVE, REVOKE opts the sender out, so a poll option named "END", "QUIT" or "REMOVE" will unsubscribe your voters. The opt-out is honored automatically, and the opt-out applies across every campaign, so that voter can't be texted again.
- Avoid HELP as an option. It's a reserved keyword too.
- Plan for messy input. Lowercase everything, trim spaces and punctuation, and map "a", "A.", "option a" and "1" to the same choice when your poll uses both letters and numbers.
- Decide your duplicate rule up front. You can count one vote per phone number, with the last vote winning or the first vote winning. Pick one, say it in the prompt, and apply it the same way when you count.
- Skip the emoji in the prompt. A single emoji switches the message to unicode, which cuts a segment from 160 characters to 70. A 140-character poll prompt with one 🗳️ becomes 3 segments instead of 1, which triples the cost of the announcement.
A prompt that does all of this:
Acme Summit: Which session should we add tomorrow? Reply 1 for AI pricing, 2 for hiring, 3 for fundraising. One vote per phone. Reply STOP to opt out.
That's under 160 characters, plain GSM-7, so it's 1 segment.
Tallying the votes
Ready has no built-in poll widget. A vote is an inbound text, and Ready gives you three ways to count inbound texts:
- The Inbox. For a room of 50, read the replies and count. That's fine at that size.
- The API.
GET /v1/messagesreturns your messages and pages withbefore_id. Pull the replies that came in after your send, normalize the text, dedupe by phone number and count. The fields are documented at docs.tryready.com/api/messages. - Webhooks. Inbound messages can be pushed to your endpoint as they arrive, which lets you update a live results screen. Check the docs for the payload rather than guessing at field names.
To send the poll prompt from your own system, use the bulk endpoint. It takes up to 100 recipients per call, so split bigger lists into batches:
POST https://api.tryready.com/v1/messages/bulk
X-API-Key: <your key>
Idempotency-Key: 6f1c2a9e-3b7d-4e1a-9c55-0a2b8d7e4f10
{"to": ["+12125550199", "+15559876543"], "body": "Acme Summit: Which session should we add tomorrow? Reply 1 for AI pricing, 2 for hiring, 3 for fundraising. One vote per phone. Reply STOP to opt out.", "consent_attested": true} Send the Idempotency-Key header every time. If your script retries after a timeout, nobody gets the prompt twice. Full details are at docs.tryready.com/api/bulk-messages.
If you use GoHighLevel, Ready's native integration syncs inbound replies into each GHL location. That means GHL workflows can tag a contact by the reply they sent, and you can count tags instead of writing code.
Consent: what a vote does and doesn't cover
There are two separate questions here.
Can you text the poll in the first place? Only to people who agreed to receive texts from you, for example through ticket checkout, event registration or a member signup with clear SMS language. Our opt-in examples post shows wording that holds up. Don't text a poll to a scraped or purchased list. Cold outreach belongs on the phone and in the mail, not SMS.
Does a vote give you consent for marketing later? Not by itself. Someone who replies "2" to a session poll has answered a poll. They haven't agreed to promotional texts. Ask for that separately and explicitly if you want it.
Ready records the sender's opt-in attestation on each bulk send and each API send that sets consent_attested (who sent, to how many, when), which builds an audit trail on your side. It does not store each voter's opt-in time, wording or source page, and a keyword reply doesn't create a consent record. Your registration form, ticketing system or CRM has to keep that. Compliance is ultimately the sender's responsibility. The tools reduce risk; they don't remove it. (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.)
Quiet hours matter for evening events. Ready enforces permitted local hours for the recipient's area. A campaign poll fired late at night to a national audience waits up to 24 hours for the window; a poll sent through the API is held only if the window opens within 6 hours, and is otherwise refused. Schedule the prompt for earlier in the day.
If your "vote" is political, get our OK first. Elections, candidates, ballot measures, call-your-rep alerts, petitions and donation asks need Ready's written OK under our acceptable use policy. Email support@tryready.com before the first send and wait for our reply. Signing up and registering is not enough on its own for these.
Registration and throughput: the part that bites on event day
Your number has to sit on a registered 10DLC campaign. Unregistered traffic gets carrier-filtered. Registration has no setup fee. You pay the first month, $25, when you submit, and after that it's $25/mo for registration and $2/mo per number. Most approvals take 2 to 7 days, so register before the event, not the morning of. Pick the use case that matches what you send. Our use-case picking guide covers why a mismatch causes trouble.
Throughput is easy to forget. Here's a worked example with stated assumptions:
- A fresh standard campaign with no brand vetting sends roughly 1 to 4 segments per second. Assume 3.
- Your announcement goes to 2,000 attendees: 2,000 segments ÷ 3 per second ≈ 11 minutes for the last person to receive the poll.
- If 900 people vote and you auto-confirm each vote, that's another 900 segments, about 5 more minutes of queue.
On top of that, T-Mobile applies a daily brand cap by trust score, and the lowest tier is roughly 2,000 messages a day. A 2,000-text announcement plus confirmations can hit that cap if much of your list is on T-Mobile. You have two options:
- Drop or shorten confirmations. Show results on screen instead of texting "Thanks, your vote counted!" to every voter.
- Consider vetting. Brand vetting ($79 Standard / $179 Enhanced, one time) raises the trust score. It moves the daily cap only if the new score crosses into a higher tier, and it doesn't change the per-second rate. The brand vetting breakdown covers when it pays off.
A note on the blue line: it's great for one-to-one follow-up surveys, but it isn't built for mass polls. Each line can start up to 50 new conversations a day, and campaigns send from regular numbers, not the blue line.
What a poll costs on Ready
Standard is $0.0075/segment, plus a $0.0045 carrier fee per segment. Replies you receive are billed the same way as texts you send. That matters here, because every vote is an inbound text.
Worked example for the 2,000-attendee poll above, with all messages at 1 segment:
| Item | Segments | Rate portion |
|---|---|---|
| Poll announcement | 2,000 | 2,000 × $0.0075 = $15.00 |
| Votes received (assume 45% reply) | 900 | 900 × $0.0075 = $6.75 |
| Confirmation replies | 900 | 900 × $0.0075 = $6.75 |
| Total | 3,800 | $28.50 |
Add 3,800 × $0.0045 in carrier fees. That total excludes the compliance surcharge. TCPA/DNC scrubbing and landline validation are each $0.003 extra per segment when switched on for an account, and both are off by default. Skip the confirmations and the rate portion drops to $22. Put an emoji in the prompt and the announcement alone becomes 6,000 segments.
If you have engineers and only need raw inbound and outbound, a CPaaS like Twilio lists about $0.0083 a segment, which is below our Standard rate. What you get with Ready is the registration flow in-app, STOP handling, quiet hours, scrubbing, the inbox and the GHL sync already built. If you'd otherwise build those yourself, that's the tradeoff to weigh.
The practical takeaway
A text poll works when you get the unglamorous parts right:
- Use numbered options and no opt-out words.
- Write a 1-segment prompt with no emoji.
- Set a clear duplicate rule.
- Register a week or more ahead.
- Plan around 1 to 4 segments per second.
- Remember that every vote is a billed segment.
Count votes in the inbox for small rooms and through the API or webhooks for bigger ones. Keep consent records in your own system.
If you want to test the flow end to end, create an account. The first 20 one-to-one texts are free, and to send any text you need a card and a number ($2 a month, the first month charged when you get it). Use those free texts to run a dry poll with your team before you register.