Push Notifications vs SMS Alerts for Developers
SMS costs money per message and push does not. For alerting yourself that difference decides it, with one real exception worth knowing about.
Every developer who has wired up alerting has considered SMS. It is universal, it works on a flip phone, and it does not care whether an app is installed. For a long time it was the only way to reach a person who was not at a computer.
Then it meets a for loop. That is where the comparison actually gets decided, and it is not close.
The pricing models are different in kind, not degree
SMS is metered per message, by carrier, by country. Depending on the provider and destination, roughly a cent per message in the United States and often several times that elsewhere. Every message costs money, forever, and the price varies by where the recipient happens to be.
Push notifications are not metered by a carrier, because they do not touch one. The message goes to Apple's push service and out to the device. Whoever you send through prices their service however they like, but the underlying delivery has no per-message toll.
At ten alerts a month you will never notice. The difference shows up in the failure mode.
A retry loop that fires an alert on every attempt sends 500 messages in an hour. On SMS that is a bill, and one that keeps growing until someone notices. On a push service with a monthly quota, it is an error response and a quota you have used up. Both are bad; only one has an open-ended cost attached.
For reference, TheNotificationApp's Pro tier is $2.99 a month for 1,000 notifications. A thousand SMS messages, at typical US rates, is somewhere in the region of $8 to $10 and considerably more internationally. The gap widens as volume grows, and it widens fastest exactly when something has gone wrong.
What SMS cannot carry
An SMS is 160 characters of plain text. That is the format, and everything else is a workaround.
An alert usually wants more than text. It wants somewhere to go: the failed CI run, the Sentry issue, the dashboard. On SMS that means pasting a URL into the message body, where it eats forty characters and arrives as something the recipient has to tap and hope about.
A push notification carries a link as a separate field. Tap the notification and the right page opens. That is not cosmetic: at 2am it is the difference between triaging from your phone and getting out of bed to find the right browser tab.
curl -X POST https://thenotification.app/api/sendNotification \
-H "app_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Deploy failed",
"body": "main #4821, TypeScript error in api/users.ts",
"link": "https://github.com/you/repo/actions/runs/123"
}'Title, body and a destination, as three separate things rather than 160 characters you have to budget.
Delivery is roughly the same, reliability is not
Both usually arrive in a second or two, so speed is not the differentiator people expect it to be.
Where they differ is what happens in the unusual cases. SMS goes through carrier infrastructure, which means it is subject to carrier filtering, and messages from application-to-person senders get filtered more than people expect. In some countries you need registered sender IDs. Delivery reports tell you the carrier accepted it, not that a human saw it.
Push has a different failure mode: if the device is offline, the message is held and delivered when it reconnects, but that hold is not indefinite and a device offline long enough will miss it. And if the app is uninstalled, the token is dead and you find out from an error rather than from silence.
Neither is bulletproof. SMS fails in ways involving carriers and regulations you cannot see; push fails in ways involving devices and tokens you can.
The case where SMS still wins
There is one, and it is worth being straight about it.
SMS does not need the internet. If your phone has no data connection, no wifi, and a single bar of signal in a basement, an SMS still arrives and a push notification does not. Push requires a data path to Apple's servers; SMS rides the cellular control channel.
If you are genuinely on call for something where being unreachable is unacceptable, and you spend time in places with signal but no data, that is a real argument and it is not one push can answer. Serious on-call setups often use SMS or a phone call as the escalation path after a push notification goes unacknowledged, which is the right shape: push for the first attempt, SMS for the one that must not be missed.
SMS also reaches people who are not you. Notifying a customer, a contractor, or a colleague who has not installed anything is an SMS problem. Push requires an app on a device the recipient controls, so it is a tool for reaching yourself and your team, not the general public.
Which to use for what
| Situation | Use |
|---|---|
| Alerting yourself about your own systems | Push |
| A cron job, deploy, or agent finishing | Push |
| Anything with a URL worth opening | Push |
| High or unpredictable volume | Push |
| Reaching a customer who installed nothing | SMS |
| Two-factor codes | SMS, or better, an authenticator app |
| On-call escalation after a missed push | SMS |
| You are regularly somewhere with signal but no data | SMS |
The pattern is clear enough: SMS is for reaching people who have not opted into anything, and push is for reaching yourself and your systems. Most developer alerting is the second kind, and it gets built on the first kind out of habit.
The honest part
Push has a real dependency that SMS does not: the app has to be installed and signed in, on a device you control. That is a fine assumption for alerting yourself and a bad one for everything else.
And in our specific case, delivery is iPhone only, because it rides Apple's push service. SMS reaches every phone ever made, which is exactly why it persists despite everything above.
On quotas: the free tier here is 100 notifications for the lifetime of the account rather than per month, which is enough to wire up a couple of real alerts and decide whether the shape suits you. That is a smaller allowance than most SMS trial credits, and it is worth knowing before you plan around it.
Where to go next
If you are replacing SMS alerts in a script, the mechanics are the same single POST from any language: what a push notification API actually is covers the concept, and the API reference has the field list.
The same argument against email, which loses for a different reason, is in push notifications vs email alerts.
Grab a free key at thenotification.app and stop paying per message to alert yourself.
New to this? Start with the full push notification API roundup.