Apprise: One Notification URL to Reach Dozens of Services
Apprise - Push Notifications that work with just about every platform!
At a glance
- What is it?
- Apprise is a Python library and CLI that normalizes push notifications across dozens of services using a single URL syntax. It trades deep per-service features for broad coverage and a simple, predictable interface.
- Who is it for?
- Adopt Apprise if you manage multiple notification targets and want one syntax, one config file, and one CLI to reach all of them. Skip it if you need deep formatting options or advanced features specific to a single service, like Slack blocks or Discord embeds.
- Can I use it commercially?
- Yes. BSD-2-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- caronc/apprise17,761 ★ · +767
| Repository | 2026-08-04 | 2026-11-13 |
|---|---|---|
| caronc/apprise | 17k | 17.8k |
767 Stars in the last 101 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The Problem: Notification Sprawl
Every messaging platform has its own API, its own authentication, and its own way of formatting a message. A developer who wants to alert users on Telegram, Discord, and Slack must write three integrations. A sysadmin who wants to send a cron job alert to a phone via SMS and to a team channel via Google Chat must keep three sets of credentials and three different command-line tools. Apprise collapses that sprawl into one library and one command. The README states it clearly: one notification library to rule them all. The target audience is twofold: developers who embed notifications into their applications, and system administrators who want a single CLI to fire off messages from scripts or monitoring systems. The value proposition is not a new protocol or a clever algorithm. It is coverage. The README groups its supported services into productivity, SMS, desktop, email and custom notifications. For a team that uses five different chat tools across projects, that coverage is the entire point.
How Apprise Works: A URL as a Universal Address
The core mechanism is a URL scheme. Each supported service has a service ID, such as discord://, gotify://, or ses://, and the URL encodes the host, credentials, and target. For example, the README shows discord://webhook_id/webhook_token and bark://hostname/device_key. Apprise parses that URL, extracts the service type, authentication, and destination, and then calls the service's API. The library handles the HTTP calls, the payload formatting, and the asynchronous sending. The README mentions that all messages are sent asynchronously, which is how it achieves what it calls amazing response times. The URL syntax is consistent across services: scheme, then optional user or token, then host or path, then optional query parameters, such as ?exchange=alerts in the AMQP example. This uniformity is what lets a developer switch from Discord to Slack by changing one URL string, not by rewriting code. The URL Builder tool on the official site helps construct these URLs, which suggests that getting the syntax right is not always trivial, especially for services with many parameters like AWS SES, which takes a user, access key, secret and region, plus optional recipient emails.
Installation and the CLI: Two Ways to Get Notified
The README has an Installation section and links to the apprise package on PyPI. Once installed, the CLI is the primary interface for sysadmins. The README describes command line usage, including configuration files, file attachments, loading custom notifications, and environment variables. File attachments are supported for the notification services that accept them. The CLI is the quickest way to get started, and it is the part of the project that most non-Python users will touch.
Configuration Files and the Developer API
For developers, Apprise exposes a Python API. The README shows a configuration file concept that works both in the CLI and in the API. The API usage section mirrors the CLI features: configuration files, file attachments, and custom hooks. This symmetry is a strength: what you learn in the CLI transfers to the API. The API is lightweight, as the README claims, and the asynchronous sending means a developer does not block the main thread when firing a notification. The README also has a Persistent Storage section. The developer API is the reason to choose Apprise over a collection of individual SDKs: one import, one call, and the library handles the rest.
Genuine Limitations and Wrong Tool Cases
Apprise's breadth comes at a cost. The URL syntax is compact, but it cannot express every feature of every service. The discord:// examples in the README show only webhook_id and webhook_token, with an optional avatar, so check the service page before counting on richer formatting. A user must verify that their exact service is supported. The URL syntax also requires precise tokens and ports; the README shows default ports for each service, but if your self-hosted instance runs on a non-standard port, you must include it in the URL. Finally, Apprise is described as a way to send notifications; if you need two-way communication, look elsewhere.
Alternatives: Individual SDKs and Ntfy
The obvious alternative is to use each service's official SDK. For Discord, you would use discord.py; for Slack, slack-sdk; for Telegram, python-telegram-bot. The difference in approach is fundamental: individual SDKs give you full access to every feature of that service, but you must learn each SDK's API, manage separate authentication, and write separate code paths. Apprise gives you one API and one URL, but you lose the deep integration. If you want one tool to rule them all, Apprise is that tool. If you want rich features on one platform, use that platform's SDK.
Maintenance, License, and Upgrade Cost
Apprise is actively maintained. The last push was on 2026-11-02, and recent releases are v2.0.0 (2026-09-26), v2.0.1 (2026-10-03) and v2.1.0 (2026-10-24). That cadence suggests ongoing support and a steady stream of new services and fixes. The license is BSD-2-Clause, which is permissive and allows commercial use, modification, and redistribution with minimal conditions. The recent jump to a 2.x major version means anyone on 1.x should read the release notes before upgrading. However, the project's documentation is spread across the official site and the wiki, and the README is just an entry point. For a production deployment, you will need to consult the wiki for each service's exact URL parameters, which is a documentation cost that is not zero. Overall, the maintenance burden is modest, and the license imposes no restrictions on your own code.
Editorial conclusion
Adopt Apprise if you manage multiple notification targets and want one syntax, one config file, and one CLI to reach all of them. Skip it if you need deep formatting options or advanced features specific to a single service, like Slack blocks or Discord embeds. Before adopting, verify that every service you depend on is listed in the supported table, and test the exact URL format for each target, since each service has its own syntax for tokens and ports. Also confirm that the Python version you run matches the project's requirements.
Frequently asked questions
what is apprise
Apprise is a Python library and command line tool that sends push notifications to almost all of the popular notification services through one consistent URL format. You configure a service with a single string, such as a Discord webhook or a Bark device key, instead of writing an integration for each one.
how to install apprise
The README has an Installation section and points at the official documentation for getting started. The distribution channels it links are the PyPI package apprise and the caronc/apprise image on Docker Hub.
how to use apprise
Build a service URL for the destination and hand it to the apprise command line tool or to the library. The README's service table gives the scheme, the default port and example syntax for every supported service, and each entry links to a page explaining how to configure that one.
is apprise free
Yes. It is BSD-2-Clause licensed open source, copyright Chris Caron, and the project links a donation page. Some of the services it notifies charge for their own API use, which the library does not cover.
Official sources
Where developers are discussing it
Posts on Hacker News, dev.to and Lobsters that link to this repository, found by our scan of those communities. 0 in the last 30 days; newest first.
- Show HN: Apprise v2.0 – Self-hosted notifications across 160 servicesHacker News · Sep 29, 2026 · 1 points · 1 comments
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/caronc-apprise)Star history chart for your README
[](https://hysenlabs.com/projects/caronc-apprise)Was this useful?