Back to comparisons
compare·June 19, 2026·5 min read

ntfy alternative: when you want push notifications without self-hosting

An ntfy alternative without public topics or a server to babysit — authenticated iPhone push in one HTTP POST. Swiss-hosted, no SDK, free to try.

ntfy alternative: when you want push notifications without self-hosting

You picked a topic name, ran curl -d "deploy done" ntfy.sh/my-secret-topic, and it worked on the first try. That's the magic of ntfy — and about a week later, the slightly uneasy part too. Because the only thing stopping a stranger from reading your alerts is that they haven't guessed the word after the slash.

ntfy is genuinely good software. It's open source, you can self-host the whole thing, and the publish API is about as simple as HTTP gets. If you're here, it's probably not because ntfy is bad — it's because one of two things started to bug you: you don't want to run a server just to get a ping on your phone, or you don't love that your topic is the only thing standing between your notifications and the public internet.

If that's you, TheNotificationApp trades ntfy's flexibility for one thing: authenticated push to your iPhone with nothing to run and no topic to guard. Here's where that trade is worth it — and where it honestly isn't.

What ntfy gets right

Credit where it's due. ntfy nails a few things hard:

  • Zero signup to start. Pick a topic, POST to it, subscribe in the app. No account, no key, no dashboard.
  • Open source and self-hostable. Dual-licensed Apache 2.0 / GPLv2. If you want to own the entire pipe end to end, you can — and that's a real, valuable property no hosted-only service can match.
  • It does a lot. Attachments, email forwarding, even phone calls on the paid tiers. Android, iOS, desktop, web, CLI.

If your priority is "I run my own infrastructure and I want my notification layer to live there too," stop reading — ntfy is the right answer and you should self-host it. The rest of this is for the people for whom that's the problem, not the solution.

Where it gets awkward

Two bits of friction tend to push people toward an alternative.

Public topics are security by obscurity. On the hosted ntfy.sh, a topic name is a URL, and anyone who knows or guesses it can both read and publish to it. You can lock that down — reserved topics and access tokens exist — but reserving topics is a paid feature (the Supporter tier is around $6/month for 3 reserved topics), and now you're back to managing auth. The frictionless version isn't private; the private version isn't frictionless.

Self-hosting is a server you now babysit. The honest cost of "just self-host it" is a box, a TLS cert, upgrades, and uptime that's now your problem. For a personal alert pipe, that's a lot of yak-shaving to find out whether your backup script finished.

ntfy vs TheNotificationApp: the honest version

TheNotificationApp makes a different trade. There's no server to run and no public topic — every request carries a real key, so only you can send to your devices. You send push notifications to your iPhone with one HTTP POST:

curl -X POST https://thenotification.app/api/sendNotification \
  -H "app_key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Deploy finished",
    "body": "Build #482 shipped to prod in 3m12s",
    "link": "https://github.com/you/repo/actions"
  }'

That app_key header is the whole difference from a public topic. There's no guessable URL — the key is the secret, and it's yours. A successful call returns JSON you can check in a script:

{
  "success": true,
  "message": "Notification sent to 1 device(s)",
  "devices_sent": 1,
  "failed_count": 0
}

Two required fields, title and body; link and image are optional. No SDK, no topic to reserve, no instance to keep alive. Full setup lives in the curl docs.

Moving a script over takes about a minute

If you already have ntfy calls scattered through your scripts, the swap is nearly one-for-one. The ntfy version:

curl -d "Backup complete ✅" ntfy.sh/my-backups

becomes a POST with a key and a structured body:

notify() {
  curl -fsS -X POST https://thenotification.app/api/sendNotification \
    -H "app_key: $TNA_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"title\": \"$1\", \"body\": \"$2\"}" > /dev/null
}

notify "Backup complete" "nightly dump finished, 4.2 GB"

Drop that function in your shell profile and every script gets a one-line notify. The -f flag matters: it makes curl return a non-zero exit code on an HTTP error instead of silently printing the error body and pretending it worked. Same idea powers the cron-job failure alerts writeup.

Make the ping actionable

A bare "deploy failed" notification tells you something's wrong but not where to look. The optional link field turns the whole notification into a tap-through — point it at the failing CI run, the Sentry issue, the dashboard, whatever you'd open next anyway:

curl -X POST https://thenotification.app/api/sendNotification \
  -H "app_key: $TNA_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "CI failed on main",
    "body": "test_payments.py::test_refund — 1 failure",
    "link": "https://github.com/you/repo/actions/runs/123",
    "image": "https://example.com/coverage.png"
  }'

Now the alert isn't just noise on your lock screen — it's one tap to the exact page you need. The image field works the same way for a chart or screenshot. With ntfy you'd reach for its click action and attachment headers to get there; here it's two extra JSON keys. The full field list is in the API reference.

Side by side

ntfy (hosted ntfy.sh)TheNotificationApp
Auth modelPublic topic name; tokens/reserved topics on paid tiersPer-request app_key, private by default
Self-hostingYes — full open sourceNo — fully hosted
PlatformsiOS, Android, desktop, web, CLIiPhone (built on APNs)
Setup to first pingPick a topic, POSTSign in with Apple, grab a key, POST
Free tierPublic topics, generous daily volume100 notifications total, 3 apps
PaidFrom ~$6/mo (2,500 msgs/day, 3 reserved topics)$2.99/mo (1,000 notifications/mo, 10 apps)
HostingSelf-host, or the public ntfy.sh🇨🇭 Switzerland

Real talk: when ntfy is the better pick

ntfy wins outright in a few cases, and pretending otherwise would be silly. If you need Android or desktop, TheNotificationApp doesn't cover you — it sends to iPhone, full stop. If you push serious volume, ntfy's paid tiers start at 2,500 messages a day while the TheNotificationApp Pro plan is 1,000 a month — different leagues. And if owning the infrastructure is the entire point for you, self-hosted ntfy is the answer.

The flip side of TheNotificationApp's free tier is the one number worth saying out loud: it's 100 notifications total, across the lifetime of the account, not per month. That's plenty to wire up a few scripts and decide if you like it, but it's not a free forever-firehose. If you outgrow it, Pro is $2.99/month for 1,000 a month — which for personal alerts is usually more than enough. If it isn't, you're probably in ntfy's volume territory anyway.

So which one?

Self-hosting fan, or need Android and high volume? Stay on ntfy — it's built for exactly that. Want authenticated push to your iPhone with no server to run and no topic to guard, hosted under Swiss privacy law? That's the gap TheNotificationApp fills. If you're weighing other tools too, the Pushover comparison covers a similar trade from a different angle.

Worth a look if you're tired of babysitting a notification server — start free at thenotification.app.

Ready to try it yourself?

Free to download. Free tier available. Swiss-hosted, private by design.

Get the app →