Skip to content
OmniChannels.ai

How to Reduce OTP SMS Costs: 9 Tactics That Work

How to reduce OTP SMS costs: stop pumping fraud and wasted sends, use WhatsApp authentication first with SMS fallback, and track cost per verified user.

Updated 10 min read

By OmniChannels.ai Editorial Team · Reviewed by BroadNet Messaging Solutions Team

SMS & OTP

Short answer

OTP spend leaks through fraudulent requests (SMS pumping), unnecessary resends, sends to countries you do not serve and verifying users who are already trusted. Cut it by gating the send behind bot and rate controls, allow-listing destinations, shortening retries, offering WhatsApp authentication templates before SMS, skipping verification for recognised devices, and tracking cost per verified user, not cost per message.

On this page
  1. Where does OTP spend actually go?
  2. What is cost per verified user, and how do you calculate it?
  3. Worked example: a ride-hailing style app
  4. Tactic 1: Stop bots before an SMS is sent
  5. Tactic 2: Rate-limit on several dimensions
  6. Tactic 3: Allow-list destinations
  7. Tactic 4: Put spend circuit breakers in place
  8. Tactic 5: Offer WhatsApp authentication templates before SMS
  9. Tactic 6: Choose the channel order per user, not per company
  10. Tactic 7: Tune fallback timing so you do not pay twice
  11. Tactic 8: Verify less often and more intelligently
  12. Tactic 9: Reduce resends through better delivery and UX
  13. What should you measure each month?
  14. What mistakes should you avoid?
  15. How OmniChannels.ai helps

Key takeaways

  • The metric that matters is cost per verified user: total OTP spend divided by users who actually completed verification. Cost per message hides fraud, resends and abandonment.
  • A message you never send is the cheapest. Bot checks, per-number and per-device rate limits, and a destination allow-list remove paid sends that no real user asked for.
  • WhatsApp authentication templates are billed per delivered message by Meta's rate for the recipient's market; undelivered messages are not billed. Compare the two channels from your own price index and conversion data, not from a general rule.
  • Channel order is a cost decision and a conversion decision: try the cheaper channel only where the user is likely to have it, and fall back after a short confirmed-delivery timeout.
  • NIST SP 800-63B treats PSTN out-of-band verification as restricted and requires offering alternatives, so a multi-channel design is also better security practice.

This guide is for product, engineering and fraud teams that pay for one-time passwords (OTPs) at scale and want a lower bill without hurting sign-up conversion. It breaks OTP spend into the places money leaks, gives nine tactics in the order we would apply them, and shows how to measure whether they worked. No prices are quoted here; use your contract and the linked price pages for the figures.

Where does OTP spend actually go?

OTP spend goes to four places: genuine first sends, resends and retries, traffic to destinations you do not really serve, and fraudulent requests. Only the first is necessary, and the others are where savings sit.

Cost bucket What it is How to see it Typical lever
Genuine first sends One code for each real user action Codes sent that end in a verified action Cheaper channel, skip when not needed
Resends and retries User did not get or enter the code Sends per verified user above 1.0 Faster delivery, better UX, fallback timing
Unserved destinations Codes to countries with no real customers Volume by country vs. customers by country Destination allow-list
Fraud (SMS pumping) Bots triggering codes to numbers the attacker profits from Codes sent but never entered, by prefix Bot checks, rate limits, spend caps

The first step is therefore measurement. Pull one month of sends per country and compare with codes entered. Our SMS pumping fraud calculator turns your own request volume, conversion and rate into an estimate of wasted spend.

What is cost per verified user, and how do you calculate it?

Cost per verified user is total OTP spend in a period divided by the number of users who completed verification in that period. It is the only OTP cost figure that includes fraud, retries and abandoned attempts.

Cost per verified user = (SMS sent × SMS cost + WhatsApp messages delivered × WhatsApp cost + other channels) ÷ users who entered a valid code

Track it per country and per flow (sign-up, login, payment). Two companion ratios explain movements in it:

  • Sends per verified user = messages sent ÷ verified users. Above 1.0 means resends, abandonment or fraud.
  • Verification conversion = codes entered ÷ codes sent. A fall in one country is the first sign of pumping.

Worked example: a ride-hailing style app

"Najm Go", a synthetic app, verifies 170,000 users a month. Before the changes, every code goes by SMS, with s as the cost of one SMS. After, 70 percent of verifications start on WhatsApp, where w is the cost of one delivered WhatsApp authentication message. The counts are illustrative, not benchmarks.

Before After
Verified users 170,000 170,000
First sends on SMS 170,000 51,000
First sends on WhatsApp 0 119,000
Resends and retries 28,000 SMS 10,000 SMS and 7,000 WhatsApp
Pumped requests that were paid 40,000 SMS 4,000 SMS
Total SMS 238,000 65,000
Total WhatsApp 0 126,000
Cost per verified user 1.40 s 0.38 s + 0.74 w

The after case is cheaper whenever 0.74 w is less than 1.02 s, which is whenever w is below about 1.4 times s. In other words, even if the WhatsApp message cost more than an SMS in some country, the saving from fraud and resends can still make the whole flow cheaper. Replace s and w with your contract rates and the Meta rate for your market; the price index and the cost estimator show the ratio per country.

Tactic 1: Stop bots before an SMS is sent

Put a bot challenge or risk score in front of every endpoint that sends a code, because a message you never send is free. This includes sign-up, login, password reset, "text me the link" and referral forms.

MITRE ATT&CK lists SMS pumping as technique T1496.003, describing attackers who trigger large volumes of messages to numbers they control. Bot defence is the first line against it. Also require that the request comes from a valid session or an attested app install. Our SMS pumping fraud prevention guide covers the layers in depth.

Tactic 2: Rate-limit on several dimensions

Limit codes per phone number, per IP and network, per device and per session, with short and long windows. A limit on a single dimension is bypassed by rotating that dimension.

A starting policy to adapt:

  • A small number of codes per number per hour, with increasing delay between resends.
  • A hard daily cap per number.
  • A per-device and per-IP cap that is lower for unauthenticated flows.
  • A separate failed-attempt limit. NIST SP 800-63B states that generating a new secret must not reset the failed-attempt count.

Tactic 3: Allow-list destinations

Enable only the countries where you have real users. New countries need a business request. Inside enabled countries, block or challenge prefixes that show attack patterns, and validate numbers before sending with a number lookup on high-volume flows.

Tactic 4: Put spend circuit breakers in place

Set hourly and daily spend caps per country and per endpoint, and pause a destination automatically when volume exceeds a multiple of its normal level, paging a person to review. This limits the bill from any attack that gets through the earlier layers.

Tactic 5: Offer WhatsApp authentication templates before SMS

For users who have WhatsApp, an authentication template is often the cheaper route, and the SMS termination-fee model that drives pumping does not apply to it. Compare the channels for your own countries before assuming.

Facts from Meta's documentation:

  • Authentication templates use preset text with a code, an optional security recommendation and an optional expiry footer of 1 to 90 minutes. They are in Meta's authentication category.
  • Button options are copy code, one-tap autofill and zero-tap on Android. On iOS 26 and later, keyboard suggestions can detect the code; earlier iOS versions should use copy code.
  • Meta bills authentication messages per delivered message at the rate for the recipient's market, with monthly volume tiers per market. Authentication has no monthly free tier, and some markets have a separate authentication-international rate, so confirm your countries in Meta's current rate card.

Our WhatsApp OTP vs SMS OTP guide shows how to create and send the templates.

Tactic 6: Choose the channel order per user, not per company

The cheapest order is the one that matches where the user can actually receive the code. Order channels by the lowest cost that the user is likely to have, then fall back after a short wait.

Signal Suggested first channel Fallback
Returning user who verified earlier on WhatsApp WhatsApp authentication template SMS
New user, country with high WhatsApp usage in your base WhatsApp, if the user entered a WhatsApp-reachable number SMS
New user, no channel history SMS WhatsApp or voice on request
High-risk request (new device, changed number) The channel already tied to the account Stronger check, not another code

Voice OTP is also available as a last-resort option, and its price is available from our team on request. Build the order in channel fallback rules and keep a single code across channels.

Tactic 7: Tune fallback timing so you do not pay twice

Send the fallback only after a delivery confirmation fails to arrive within a short timeout, measured in seconds. If the WhatsApp message was delivered, do not send an SMS; if it was not delivered, Meta does not bill it. One fallback at most, and the same code in both.

Tactic 8: Verify less often and more intelligently

Every verification you safely skip is a saved message. Ask for a code at sign-up, on new devices, after a password change and for high-value actions. For recognised devices with a valid session, use a remembered device token or a passkey instead. Keep risk checks (impossible travel, new SIM) so that skipping the code does not open account takeover.

NIST SP 800-63B-4 restricts the use of the public telephone network for out-of-band verification and requires verifiers to keep alternative authenticator types available, so reducing reliance on SMS is aligned with security guidance, not only with cost.

Tactic 9: Reduce resends through better delivery and UX

Resends are paid messages. Reduce them by:

  1. Delivering over direct routes with delivery reports, so slow or silent routes show up. See grey route vs direct route SMS.
  2. Keeping the SMS to one segment so it is never split. An English code message such as Najm code: 482915. Valid 5 minutes. Never share it. is 51 characters in GSM-7 (160 per segment). The Arabic version رمز نجم: 482915 صالح 5 دقائق. لا تشاركه مع أحد. is 47 characters in Unicode (70 per segment). Check any variant in the SMS character counter.
  3. Supporting autofill, such as the code format and one-tap or copy-code buttons, so the user does not mistype.
  4. Setting expiry long enough for real users. NIST requires out-of-band secrets to expire within 10 minutes; do not set it so short that users have to request again.
  5. Diagnosing complaints with OTP not received troubleshooting.

What should you measure each month?

Measure a small dashboard by country and flow, and review it weekly during changes.

Metric Formula Healthy direction
Cost per verified user Spend ÷ verified users Down
Verification conversion Codes entered ÷ codes sent Up, stable per country
Sends per verified user Messages ÷ verified users Toward 1.0
WhatsApp share of first sends WhatsApp first sends ÷ all first sends Up where reachable
Fallback rate Fallbacks ÷ WhatsApp attempts Stable; a jump means delivery problems
Blocked requests Requests stopped by controls Spikes show attacks

What mistakes should you avoid?

  • Optimising price per message while fraud and resends dominate the bill.
  • Blocking whole countries after an attack instead of allow-listing in advance, which hurts real users abroad.
  • Sending SMS and WhatsApp at the same time "to be safe", which doubles the cost.
  • Setting very short expiry that causes repeat requests.
  • Assuming WhatsApp reaches everyone. Keep SMS as fallback and measure reachability.
  • Removing verification without risk checks, which trades a cost problem for an account takeover problem.

How OmniChannels.ai helps

OmniChannels.ai, powered by BroadNet Technologies, sends OTPs over SMS through direct operator connectivity and over WhatsApp authentication templates (one-tap, zero-tap and copy-code), with configurable channel fallback and normalised delivery webhooks for your own cost reporting. Delivery reports can be filtered and exported to CSV. The REST API and SMPP cover the integration. Talk to the team about your countries and volumes, and check the WhatsApp pricing pages and SMS pricing by country for published list prices.

Frequently asked questions

How can I reduce the cost of OTP SMS?

Stop paid sends nobody needs: add bot checks and rate limits on every endpoint that sends a code, enable only the countries you serve, and cap resends. Then shift the sends that remain to the cheaper channel for each user, such as a WhatsApp authentication template, with SMS as fallback. Measure cost per verified user monthly to see whether changes work.

How much of my OTP bill is fraud?

It depends on how exposed your endpoints are, and no reliable public average exists, so measure your own. Compare codes sent with codes entered per country and number prefix. A gap that appears in one destination while genuine sign-ups stay flat is the pumping signature. Use our SMS pumping fraud calculator to estimate the waste from your own figures.

Is WhatsApp OTP cheaper than SMS OTP?

It can be, but it depends on the destination, because Meta bills authentication templates per delivered message at a rate set by the recipient's market and monthly volume tiers, and SMS rates vary by country and operator. Compare both on our price index for your countries, then include fallback volume, since users without WhatsApp still need SMS.

What is the cheapest safe OTP code length and expiry?

Length and expiry are security settings, not cost levers. NIST SP 800-63B requires out-of-band secrets of at least six decimal digits that expire within 10 minutes. Shorter expiry reduces replay risk but can increase resends, which cost money, so choose the shortest window that real users meet comfortably.

Should I verify every login with an OTP?

Not necessarily. Verify at sign-up, at risky events such as a new device or a changed password, and for high-value actions. For recognised devices with a valid session, skip the code or use a passkey or app-based check. Every avoided verification saves a message and removes friction, provided your risk controls still catch account takeover.

Does a fallback from WhatsApp to SMS double the cost?

Only if both messages are delivered. Meta bills authentication messages when delivered, so a WhatsApp message that never arrives is not charged. Wait for a delivery confirmation or a short timeout before sending the SMS, send one fallback at most, and use the same code so the user is not asked to choose between two.

Sources

  1. WhatsApp Business Platform pricing, Meta for Developers
  2. Authentication templates, WhatsApp Business Platform, Meta for Developers
  3. NIST SP 800-63B-4: Authentication and Authenticator Management
  4. Resource Hijacking: SMS Pumping (T1496.003), MITRE ATT&CK