Your n8n workflow stopped 3 days ago. Nobody noticed.

Disclosure first
This guide links to Silent Failure Watch, an n8n workflow we use and earn a commission on if you buy it. It is not required reading: the free method below is roughly 20 minutes of setup and catches most of the same failures. The paid workflow exists for people who would rather import something than build it.
The short answer
An n8n workflow fails silently when it finishes without an error but produces nothing useful: a node returns an empty item, a credential expires, an API answers with a 200 and an error body, or a schedule never fires. n8n only alerts you when a node throws. To catch the rest, add a check inside the workflow that fails on purpose when the output is empty, and point an error workflow at it - because a workflow that throws is the only kind n8n will tell you about.
Why "it didn't error" is not the same as "it ran"
n8n is honest about crashes and quiet about everything else. If an HTTP Request node gets a 500, the execution turns red and your error workflow fires. If the same node gets a 200 with {"data": []}, the workflow goes green, the next node runs on an empty item, and the run is recorded as a success.
That is the failure mode that costs people money. A lead-sync workflow that sends zero leads looks identical to a day with no leads. An invoice reminder that finds no invoices looks like a quiet week. The execution history shows green ticks, and nobody looks at the output.
The four silent failures worth building against
1. The empty result that is treated as success. The API worked, it just had nothing for you. Your node returns [], the loop below it skips, the run ends clean. Fix: an IF node that checks for empty output and routes to a node that throws a deliberate error.
2. The credential that quietly expired. OAuth tokens age out. When they do, some APIs return 401 and n8n fails loudly - and some return an empty payload with a 200. Fix: a monthly test call to a known endpoint, with a failure path.
3. The schedule that never fired. A workflow set to run every hour in a timezone that shifted, or an instance that restarted and lost its schedule, produces no executions at all. No executions is not an error, so nothing alerts. Fix: a separate "heartbeat" workflow that checks the last execution time of the critical workflows and alerts if a run is overdue.
4. The rate limit that returned success. Some APIs answer 200 with a partial or throttled body. Your workflow processes what it got and reports success. Fix: compare the count you received against the count you expected, and throw if the difference is large.
The free setup, step by step
This is the method I would build before buying anything. It takes about twenty minutes per workflow, and it is the part that actually catches failures.
- Create an error workflow. A separate workflow with an Error Trigger node, wired to Slack, email or a Telegram bot. Set it as the Error Workflow in the settings of every critical workflow. Now any thrown error reaches you.
- Add a validation node before anything important. After your data node, add an IF node that checks the item count. If it is zero, route to a Code node with
throw new Error('No items returned from source'). A thrown error hits your error workflow, which is the whole point. - Add a heartbeat workflow. A schedule trigger that runs every 30 minutes and calls the n8n API to ask for the last execution of each critical workflow. If the newest successful run is older than expected, throw. This catches scheduled workflows that stopped without failing.
- Log a row you can count. Write one row per run to a Google Sheet or a database table with a timestamp. If the row count for yesterday is zero, you find out from the data rather than from a client email.
- Alert on the first failure, not the third. One failure is a signal; three is an outage. Send the alert on the first.
What a purpose-built workflow adds
The steps above are the mechanism. What they do not give you is the operational detail: which workflows matter most, what "expected volume" looks like on a Sunday, and how to phrase the alert so the person receiving it knows what to do at 2am rather than just that something is broken.
Silent Failure Watch is a small workflow pack built for that gap - it covers the four failure modes above, with the validation and heartbeat patterns already wired, so you import it and point it at the workflows you care about. If you would rather build the same thing yourself, the twenty-minute version above catches most of it. The honest difference is time, not capability.
Silent Failure Watch on Gumroad - $13 with the code VOXA20, which takes something off at checkout. It is ours to recommend, and we earn a commission if you buy.
What to monitor first
Not everything needs a heartbeat. Start with the workflows where a silent day costs money or trust: anything that sends client-facing email, anything that creates invoices or orders, anything that feeds a report someone makes decisions from, and anything that pulls data you would not notice was missing until month-end.
Everything else can wait for the error trigger. The failure you care about is the one a customer notices before you do.
Questions people ask
Why does n8n not alert on empty output?
Because an empty result is not an error. n8n reports failures at the node level, and a node that returns zero items has done what it was asked. The check has to be deliberate - usually an IF node plus a Code node that throws.
What is an error workflow in n8n?
A separate workflow with an Error Trigger node that runs when another workflow fails. Set it once in each workflow's settings and every thrown error gets routed there.
How do I catch a workflow that stopped running?
With a heartbeat: a scheduled workflow that reads the last execution time of your critical workflows and throws when a run is overdue. Nothing inside a dead workflow can report on itself.
Do I need a paid workflow for this?
No. The five steps above cover the main failure modes. The paid pack saves the setup time and covers the edge cases.
How much does Silent Failure Watch cost?
$13, with the code VOXA20 applied at checkout. We earn a commission on that link.