Skip to content
Tomasz Wyderka Tomasz Wyderka
PL / EN
Back to posts

n8n + ntfy — self-hosted notifications in your workflows

How I integrated ntfy with n8n — from a simple HTTP request to a custom community node with trigger support and proper authentication.

n8n ntfy Self-hosted Home Lab Automation

I’ve been running ntfy for a while — it handles notifications in my home lab without much fuss. When I started moving more of my automations into n8n, connecting the two felt like a natural next step. That’s when things got interesting.

Wait, ntfy?

ntfy is a simple push notification service built on HTTP and pub-sub. You subscribe to a topic, something publishes to it, and you get a notification — on your phone, in a browser, in a script. No accounts, no registration, plain HTTP. You can use the public ntfy.sh or run your own instance for full control.

Is it better than Gotify or similar tools? Honestly, I don’t know. It works for me — and that’s enough.

Sending — trivial

Publishing a notification from n8n is a single HTTP Request node:

POST https://your-server/topic
Content-Type: text/plain

Notification body

Two minutes of setup, works immediately. You don’t need any dedicated node just for sending.

Subscribing — that’s where it gets tricky

Triggering a workflow on every incoming notification is a different story. ntfy exposes a persistent JSON stream — you subscribe to an endpoint and wait for messages. The problem is that n8n can’t consume that natively with a standard HTTP Request. You need a dedicated Trigger node.

I checked what was available in community nodes…

State of existing solutions

Some packages cover only Send — you’re on your own for triggering. The ones that include a trigger often don’t handle authentication correctly: they either skip headers entirely or implement them in ways that don’t match the ntfy spec. Sometimes the package simply fails to connect to a self-hosted instance with no clear reason why.

No blame to the authors — community integrations run on personal time, not SLAs. But a gap is a gap, and that’s signal enough to build your own.

Own implementation

The result: n8n-nodes-ntfy-client — two nodes plus a credential type:

Ntfy Send — publishes a notification to a topic. Supports title, priority (Min to Urgent), and tags/emoji.

Ntfy Trigger — subscribes to one or more topics via persistent JSON stream. Fires the workflow for each incoming message. On connection loss — automatic reconnect with exponential backoff.

Ntfy API credential — Server URL, auth type (None / Basic Auth / Access Token), following how n8n manages credentials. Validates the connection on save via GET /v1/health.

How it fits my setup

The main use case is home lab + AI. A monitoring system sends an event to an ntfy topic, a workflow picks it up, passes it to a local AI model, which analyzes it and sends back a summary with a suggested action — again through ntfy, this time to my phone.

Local AI model in an isolated environment + self-hosted ntfy server = zero data leaving the network. For that kind of setup, it’s a natural fit.

Installation

In your n8n instance: Settings → Community Nodes → Install, enter:

n8n-nodes-ntfy-client

Repository and docs: github.com/ximot/n8n-nodes-ntfy-client