Every SMS platform's onboarding wizard nudges you toward single opt-in. Someone types a number into your popup, checks a box, and boom — they're on the list. No confirmation text, no extra tap, no drop-off. Your subscriber count climbs faster, and faster subscriber growth looks great on a dashboard.

The problem is that a chunk of those numbers were never going to buy from you, and you pay to text every one of them, every send, forever. That cost is invisible on most platforms because they bundle segments into a monthly plan. On per-segment billing it's arithmetic you can actually see.

Full disclosure: I work for Ready, an SMS platform with transparent per-segment pricing. That transparency is exactly why the waste in a bloated list is easy to expose here — so I'm going to use our numbers to run the math. The conclusion holds no matter whose platform you're on.

What single opt-in actually collects

Single opt-in captures a number the moment it's entered. That includes:

  • Real, high-intent shoppers who want your texts
  • People who typed a number to grab a discount and never intended to hear from you again
  • Typo'd numbers (a transposed digit still passes a format check)
  • Fake numbers people enter to skip a gate
  • Numbers that used to be valid but have since been reassigned to someone else

Double opt-in adds one step: after the initial signup, the subscriber gets a "Reply YES to confirm" text. Only confirmed numbers join the list. That step filters out the typos, the fakes, the low-intent grabbers, and the numbers that no longer reach a real inbox — because none of them will reply.

The tradeoff is real. You lose subscribers at the confirm step — typically somewhere in the 15–35% range depending on your offer and audience, framed as a rough industry band, not a guarantee. That's where the "single opt-in grows your list 30% faster" headline comes from. It's true. It's also measuring the wrong thing.

The junk-subscriber cost model

Let's build two lists from the same 10,000 signups and run them for a year.

List A — single opt-in. All 10,000 join. Based on the categories above, assume ~25% are junk (typos, fakes, low-intent, dead numbers). That's 2,500 numbers that will never buy, plus you're paying to text them.

List B — double opt-in. Say 25% don't confirm, so you keep 7,500 — and the junk is disproportionately what dropped off. Assume the surviving list is ~95% real, high-intent, deliverable.

Now the sends. A typical ecommerce program runs maybe 6 marketing texts a month — campaigns plus flows. Call it a clean 160-character single segment each. On Ready's Standard tier that's $0.02 + $0.0045 carrier = $0.0245 per segment.

List A (single)List B (double)
Subscribers10,0007,500
Junk / non-deliverable~2,500~375
Sends per contact / yr7272
Total segments / yr720,000540,000
Cost / yr @ $0.0245$17,640$13,230
Segments wasted on junk~180,000~27,000
Wasted spend / yr~$4,410~$662

List A costs $4,410 more per year, and roughly $3,750 of that difference is money spent texting numbers that were never going to convert. You bought a bigger number on your dashboard for ~$3,750/year in carrier and segment fees you'll never earn back.

And that's the conservative version. It assumes both lists pass carrier filters equally, which they don't.

Junk doesn't just cost segments — it costs deliverability

Here's the part the pure segment math misses. Fake and dead numbers don't quietly absorb your texts. They generate hard failures, and a list full of failures signals low quality to carriers. That drags down delivery rates for your good numbers too — the ones you actually want to reach.

So the single-opt-in list isn't just paying to text 2,500 dead ends. It's degrading the throughput and inbox placement of the 7,500 real subscribers underneath them. I wrote about the carrier-level mechanics of this separately in the deliverability case for the extra confirm step — the short version is that carriers watch your failure rate, and single opt-in inflates it.

When you net that out, the double-opt-in list isn't the smaller-but-comparable list. It's the list that both costs less to run and delivers more of what you send.

"But my subscriber value is the same either way" — no

The counterargument I hear: "A subscriber is a subscriber. My revenue per contact evens out." It doesn't, because revenue per contact is an average, and single opt-in stuffs the denominator with contacts worth $0.

If your double-opt-in list of 7,500 produces $X in SMS revenue, your single-opt-in list of 10,000 doesn't produce more — it produces roughly the same $X (the extra 2,500 don't buy) while your revenue-per-contact metric craters. You've made every downstream calculation — LTV, ROI, revenue per send — look worse, and you're paying more segments to get there.

If you want to see how much an SMS contact is genuinely worth when the list is clean, this breakdown on first-party subscriber value puts real numbers on it. The multiplier only holds when the contacts are real.

Where single opt-in is genuinely fine

I'm not going to pretend double opt-in is always right. A few honest cases where single opt-in is the reasonable call:

  • Very low volume. If you send 10,000 total segments a year, the wasted spend is small enough to ignore. Optimize elsewhere.
  • Checkout opt-in with verified numbers. If the phone number is already validated for shipping/order confirmations, that number is real by definition. The confirm step buys you less there — see popup vs. checkout opt-ins, because the two sources behave very differently.
  • You're desperate for list size for a specific launch and you'll clean later. Fine — just budget for the cleanup and the wasted sends in the interim.

The place double opt-in earns its keep hardest is high-volume popup capture, where the low-intent-grabber and fake-number rate is highest. That's exactly the source that inflates your count the most and your quality the least.

The compliance angle you get for free

The confirm step isn't only a cost filter. A "Reply YES to confirm" exchange creates a timestamped, in-thread record of consent — the subscriber affirmatively opted in via text. That's a stronger audit trail than a checked box on a form, and it pairs with the rest of the consent stack.

On Ready, that trail sits alongside automatic STOP handling (an opt-out propagates so the number can't be messaged again across campaigns), quiet-hours enforcement, and consent attestation capture for bulk sends. None of that makes you lawsuit-proof — compliance is ultimately the sender's responsibility — but a real confirmation reply is a materially better thing to have on file than "they were on the list, I think." If you're still sorting out the registration side of this, the 10DLC compliance guide for ecommerce covers what carriers require before any of this matters.

What to actually do

Run your own version of the table above with your real numbers:

  1. Pull your last quarter's signup count and your rough junk estimate (dead numbers, hard failures, and never-openers are a decent proxy).
  2. Multiply your monthly send frequency by 12 to get sends per contact per year.
  3. Multiply junk contacts × yearly sends × your per-segment cost. On Ready that's $0.0245 all-in on Standard, dropping to $0.0205 automatically once you pass 50,000 segments in a month.
  4. Compare that wasted-spend figure to the revenue you'd lose from the ~25% who don't confirm. If the non-confirmers weren't going to buy anyway — and mostly they weren't — the trade is obvious.

Single opt-in wins the dashboard. Double opt-in wins the P&L, the deliverability, and the consent file. For a high-volume ecommerce SMS program, that's not a close call — but the only way to know your version of it is to run the arithmetic on your own list.

If you want to see the per-segment cost of your program laid out transparently before you decide, you can start on Ready with 2,500 free credits and watch the math move as your list quality changes. Pricing is on the ReadySMS page if you want to plug in your own numbers first.