Push notifications

Free push notifications for scripts: 9 options and their real limits

ntfy, Discord and Slack webhooks, Telegram bots, self-hosted Gotify and Gmail cost nothing to send script alerts. Pushbullet's free tier stops at 500 pushes a month. Pushover allows 10,000 messages a month but costs $4.99 per platform after a 30-day trial. Here is what each one needs, where it arrives and where it stops.

5 min readNotifications and alerts

At a glance

  • Fastest start: ntfy, one curl command and no account.
  • Already in a chat app: Discord, Slack and Telegram cost nothing.
  • Paid but polished: Pushover, $4.99 once per platform, 10,000 messages a month.
  • Fully self-hosted: Gotify or your own ntfy server.

The 9 options at a glance

ServiceCostFree limitsSetupArrives in
ntfyFree on ntfy.sh or self-hosted; paid Pro tiers exist250 messages a day, 4,096 bytes each, cached 12 hoursNo signup; pick a topic nameAndroid, iOS, web
Discord webhookFree2,000 characters, 10 embeds per messageCreate a webhook in a channelDiscord
Slack incoming webhookFree with a Slack app1 message per second with short burstsCreate an app, pick a channelSlack
Telegram botFree1 to 4,096 characters; about 1 message per second per chatToken from @BotFatherTelegram
Pushover30-day trial, then $4.99 once per platform10,000 messages a month per accountAccount, user key, app tokeniPhone, iPad, Android, desktop
GotifyFree, open source, self-hostedWhatever your server handlesRun the server, create an app tokenAndroid app, web UI
PushbulletFree tier; Pro is paid500 pushes a month without ProAccount and access tokenPushbullet apps
Gmail SMTPFreeMore than 500 emails a day hits a limit2-Step Verification and an app passwordAny mail client
RunpeekNo account needed5 webhooks per run; links expire after 30 idle minutespip install tqdm-live and a webhook URLDiscord, Slack or any webhook

The options, one by one

1. ntfy

ntfy is open source with apps for Android, iOS and the web, and you publish to the public ntfy.sh server without an account. Public topics are open to anyone who knows the name, so use a long random topic or access control. The ntfy.sh limits are 250 messages a day, 4,096 bytes per message and a 12-hour cache, and attachments expire after 3 hours; self-host if that is too tight. See the ntfy guide for headers and self-hosting.

Bash
curl -d "Backup done" ntfy.sh/your-long-random-topic

2. Discord webhook

A Discord webhook is free and takes one POST request. You get up to 2,000 characters of content and up to 10 embeds per message. Discord publishes no official per-webhook rate, but sending too fast returns HTTP 429 with a retry_after value. It fits if Discord is already on your phone and a private channel works as an alert inbox.

3. Slack incoming webhook

Slack incoming webhooks are free once you create a Slack app. Each webhook posts only to the channel picked at install, text over 40,000 characters is truncated, and the rate limit is 1 message per second with short bursts. It is the obvious pick when your team already lives in Slack.

4. Telegram bot

Telegram bots are free: get a token from @BotFather and call sendMessage. Messages hold 1 to 4,096 characters, and Telegram asks for about 1 message per second per chat and no more than 20 per minute in a group. It suits anyone who wants a fast phone app without paying per platform.

Python
import os

import requests

requests.post(
    f"https://api.telegram.org/bot{os.environ['TELEGRAM_BOT_TOKEN']}/sendMessage",
    json={"chat_id": os.environ["TELEGRAM_CHAT_ID"], "text": "Backup finished"},
    timeout=10,
).raise_for_status()

5. Pushover

Pushover is a dedicated notification app with a 30-day free trial, then a one-time $4.99 per platform (iPhone and iPad, Android or desktop); Pushover for Teams is $5 per user per month. Each account can send 10,000 messages a month, shared across all its applications (Teams get 25,000). Messages hold 1,024 characters with a title of up to 250.

Python
import os

import requests

requests.post(
    "https://api.pushover.net/1/messages.json",
    data={
        "token": os.environ["PUSHOVER_APP_TOKEN"],
        "user": os.environ["PUSHOVER_USER_KEY"],
        "title": "Backup finished",
        "message": "1,284 files, 3.2 GB",
    },
    timeout=10,
).raise_for_status()

6. Gotify

Gotify is a free, open-source server you host yourself, with a REST API, a web UI and an official Android app on Google Play and F-Droid. Start it with docker run -p 80:80 -v /var/gotify/data:/app/data gotify/server, create an application token, then push with curl to /message with an X-Gotify-Key header and title, message and priority form fields. The only limits are your server's.

7. Pushbullet

Pushbullet takes pushes from a script through its API with an Access-Token header. Accounts without a Pro subscription are limited to 500 pushes a month, and going over returns an error. It works for low-volume scripts if you already use Pushbullet.

8. Gmail SMTP

Gmail's SMTP server sends alerts for free from a personal account once you turn on 2-Step Verification and create an app password. Sending more than 500 emails in a day hits Gmail's limit. It suits anyone who wants no new app and only sends a few alerts a day.

9. Runpeek

Runpeek is built for Python runs: it sends finished, failed and stalled alerts to Discord or Slack webhooks, or JSON to any other webhook URL, each with a live progress link. Links expire 30 minutes after the last update.

Which one should you pick?

  • Fastest start: ntfy, because curl -d "msg" ntfy.sh/topic works right now with no account.
  • Already on Discord or Slack: their webhooks, so alerts land in an app you keep open.
  • Dedicated mobile app: Pushover after the one-time $4.99, or ntfy's free Android and iOS apps.
  • Fully self-hosted: Gotify, or your own ntfy server.
  • Python jobs that can hang: Runpeek, for finished, failed and stalled alerts with a live progress link.

FAQ

What is the best free alternative to Pushover?

ntfy is the closest match: free Android and iOS apps, 250 messages a day on ntfy.sh and your own limits if you self-host. If a chat app is fine, a Telegram bot or Discord webhook is free and has no published daily cap.

Is ntfy really free?

Yes. The software is open source and free to self-host, and the public ntfy.sh server takes up to 250 messages a day with no account. Paid ntfy Pro tiers exist for more volume on the hosted service.

Can I send push notifications from a script without an app?

Yes, with email: Gmail SMTP with an app password delivers to the mail client you already use, up to 500 emails a day. ntfy and Gotify also have web interfaces that show notifications in a browser.

Which service works without creating an account?

The public ntfy.sh server takes a message from one curl command with no signup. Runpeek also needs no account, but its alerts go to a Discord, Slack or other webhook URL you supply.

Check on long runs from your phone

Change one import and every tqdm bar prints a link you can open on any device. Get a Discord or Slack message when the run finishes, fails or stalls.

Get a live linkpip install tqdm-live

Sources