n8n Workflow Push Notifications
One HTTP Request node sends a push notification from n8n. Wire it into an error workflow and every failing automation reports itself, not just this one.

n8n is at its best doing the things nobody watches. Sync a CRM every hour, tidy a spreadsheet at midnight, poll an API and file the results. It runs quietly for weeks.
Then a credential expires. The workflow starts failing, n8n records it neatly in the executions list, and the sync silently stops. You find out when someone asks why the CRM has not updated since the eleventh.
The fix is two things: a notification at the end of the workflows you care about, and one error workflow that catches everything else.
Step 1: Store the key as a credential
Create an application in TheNotificationApp, call it n8n, and copy the app_key.
Do not paste it into the node's header field. Anyone who can open the workflow can read it, and exported workflow JSON gets shared. Instead go to Credentials, then Add credential, then Header Auth:
- Name:
app_key - Value: your app key
Call the credential something like TheNotificationApp. It is now referenced by name in nodes and the value never appears in an export.
Step 2: Add the HTTP Request node
At the end of the workflow, add an HTTP Request node:
- Method: POST
- URL:
https://thenotification.app/api/sendNotification - Authentication: Generic Credential Type, then Header Auth, then the credential you just made
- Send Body: on
- Body Content Type: JSON
Then the body, using JSON mode so you can interpolate from earlier nodes:
{
"title": "CRM sync finished",
"body": "{{ $json.updated }} records updated, {{ $json.skipped }} skipped"
}Execute the workflow. Your phone buzzes with real numbers from the run, which is the difference between a notification that ends the task and one that starts an investigation.
Step 3: The error workflow, which matters more
The node above covers the workflow you remembered to add it to. The failure you actually need to hear about is in one of the eleven workflows you set up last spring.
n8n has error workflows for this: a separate workflow that runs whenever another one fails. Build it once, attach it everywhere.
Create a new workflow with an Error Trigger node, then an HTTP Request node configured as above, with this body:
{
"title": "n8n failed: {{ $json.workflow.name }}",
"body": "{{ $json.execution.error.message }}",
"link": "{{ $json.execution.url }}"
}Save it as Notify on failure. The execution.url in the link field is the useful part: tapping the notification opens the exact failed execution, with the error and the data that caused it already on screen.
Step 4: Attach it to everything
For each workflow, open Settings from the workflow menu and set Error Workflow to Notify on failure.
This is the tedious part and it is worth doing in one sitting for every workflow you have. A workflow without an error workflow fails silently, which is the exact problem this post exists to solve.
Newer n8n versions let you set a default error workflow at the instance level, which is better, because it covers workflows you have not built yet. If your version has it, use that.
Only notify on the runs worth notifying about
A workflow that runs every five minutes and notifies on success sends 288 notifications a day. Put an IF node before the notification and only fire when something actually happened:
IF {{ $json.updated }} is greater than 0
true -> HTTP Request (notify)
false -> NoOpNow a sync that found nothing to do stays quiet, and one that moved forty records tells you. The error workflow still covers the case where it breaks, so silence keeps its meaning.
Watch the item count
One thing specific to n8n that catches people out: an HTTP Request node runs once per input item. If the node before it emits fifty items, you get fifty notifications.
The usual first symptom is a phone that buzzes forty times when you test a workflow. Two ways to fix it:
- Put an Aggregate or Limit node before the notification so only one item reaches it.
- Turn on Execute Once in the HTTP Request node's settings, which makes it run a single time regardless of how many items arrive.
Execute Once is usually what you want for a notification, and it is the setting most people do not know exists until they have already sent forty notifications to themselves.
Escaping expressions
An error message containing a double quote breaks the JSON body. In JSON mode, n8n handles quoting for you when the whole value is an expression, which is why the examples above put {{ }} as the entire field value rather than concatenating strings around it.
If you build a body by string concatenation, you will eventually meet an error message with a quote in it, on the day you needed the alert.
The honest part
The free tier is 100 notifications for the lifetime of the account, not per month. Errors only, across a dozen workflows, is a handful a month and lasts a long time. Success notifications on a five-minute schedule spend it before lunch.
Set up the error workflow first, then add success notifications only where the result is genuinely news. Pro is $2.99 a month for 1,000, and this reaches iPhone only since it rides Apple's push service.
Where this fits
If you would rather not run n8n at all, the same personal-automation idea with hosted tools is in building a no-code alert system. The request shape is in the API reference.
Grab a free key at thenotification.app and stop finding out about broken automations weeks later.
New to this? Start with how webhook push notifications work.



