Pushover alternatives for developers
You added a cron job. It runs at 3am. You want a ping when it fails.
Pushover is the obvious answer until you look at the API. You need to create an account, register an application, get an app token, get a user key, then POST a form with both. The one-time $4.99 fee is per platform — iOS and Android are separate purchases. For a curl call in a shell script, that’s a lot of ceremony.
Here’s what that curl looks like:
curl -s \
--form-string "token=APP_TOKEN" \
--form-string "user=USER_KEY" \
--form-string "message=Deploy done" \
https://api.pushover.net/1/messages.jsonThat works. It’s just not the right shape for the job.
ntfy — free, self-host or cloud
ntfy (pronounced “notify”) is the most developer-friendly option in this space. No account required for the public server. Pick a topic name, subscribe to it in the app, POST to it.
curl -d "Deploy done" ntfy.sh/your-topic-nameThe topic is public by default, so anyone who knows the name can send to it. You can self-host the server for private topics, or pay for ntfy.sh’s cloud plan. The Android app is excellent. iOS exists but has had reliability complaints.
Self-hosting is a real option if you have infra. Docker image, single binary, works fine on a $5 VPS.
Gotify — self-host only
Gotify is the self-host-or-nothing option. No cloud service. You run the server, you own the data, no subscription ever. The setup is straightforward if you’re already comfortable with a server.
The tradeoff: no mobile app on iOS. There are third-party clients, but none are officially maintained. If your phone is an iPhone, Gotify isn’t the right call.
Bark — iOS only, free
Bark is a free iOS app that gives you a personal push endpoint. Install the app, get a URL, POST to it. Clean, fast, no account, no subscription.
curl https://api.day.app/YOUR_KEY/Deploy%20doneThe limitation is in the name: iOS only. If you want Android coverage or a feed you can check on your laptop, Bark doesn’t cover it.
trigger.fyi — anonymous-first, curl-native
trigger.fyi is built around the same primitive — POST text, get a notification — but starts from the developer workflow rather than the consumer app. Open the PWA, a key is minted automatically, your device is subscribed. No account, no signup form.
The send API is a POST with a plain text body:
curl -X POST -d "Deploy done" https://trigger.fyi/fyi_your_keyThat’s the whole API. The URL is the channel. You can also use the npm package if you’re in a Node/edge runtime:
import fyi from "trigger.fyi";
await fyi("Deploy done");It never throws and never blocks — fire-and-forget, with a 3s cap. On serverless, await is safe; it’s one edge roundtrip and can’t fail your request.
Three levels: fyi() for normal notifications, fyi.log() for feed-only (no push, no lock screen), fyi.critical() for high urgency. On iOS, critical degrades to a normal push — the docs say so. Web push on iOS cannot break silent mode; that requires a native app.
There’s also a feed with 30 days of history. The CLI (npx trigger.fyi) watches the feed in a TUI if you want to see events on your laptop instead of your phone.
Which one
If you want zero infra and zero account: trigger.fyi or Bark (iOS) or ntfy’s public server.
If you want self-hosted and private: ntfy or Gotify.
If you want Android + iOS with a cloud option and proven reliability: ntfy.
If you’re already in a Node codebase and want an SDK with log levels: trigger.fyi fits without any extra infrastructure.
Pushover isn’t a bad product. The $4.99 is a fair price for what it is. But the API was designed for an era when push notifications were complicated to deliver. They aren’t anymore.