Catch the silent failures
Most monitoring watches for errors. The run nobody catches is the other one: the schedule fires on time, every node goes green, and zero rows come out the far end. Below is how I watch for that on my own estate, the free template that does it, and the hosted version for people who would rather not run a second workflow.
The questionHow do I know when my n8n workflow ran successfully but did not actually do anything?
How the working version is put together
Keep a watch list, not a hunch
One row per workflow worth watching: how often it should succeed and how many items a healthy run returns from its final node. I keep that in an n8n Data Table so the thresholds live next to the workflows rather than in someone's head. A nightly sync expects one success a day and at least one item. An hourly scraper expects one an hour and twenty.
Read the last success, not the last run
Every hour the watchdog asks the n8n API for each workflow's most recent successful execution. Failed runs are somebody else's job; the error trigger already fires for those. What I want is the run that reported success, opened up, with its item counts read from the inside.
Count what the final node returned
The execution data holds the item count for every node. I read the final node's count and the total across the run. A green execution whose final node returned nothing is the whole reason this exists, and it is invisible from the executions list, which shows a tick either way.
Give it one of five states
HEALTHY when it ran inside its window and produced at least the minimum. EMPTY when it ran green and produced nothing. STALE when nothing has succeeded inside the window. DARK when nothing has succeeded for three windows, or nothing is retained at all. UNREADABLE when the API could not be read, because an unknown state must never be reported as a good one.
Alert on change, not on repetition
The verdict is written back to the table, so the next sweep can tell a brand new fault from one that has been sitting there since Tuesday. Slack hears about a state change immediately. A fault that persists waits out a cooldown and arrives marked as escalated. And at the end of every sweep the watchdog reads its own table back and names any row it could not check, so a blind spot arrives as a blind spot instead of a silent pass.
Watch empty successful workflows with the n8n API, Data Tables and Slack
The free template, published in the n8n creator library. Import it into your own instance and the setup is written on the canvas. If you would rather not run a second workflow, the hosted Actor does the same read for you, and the paid kit on Etsy carries the same file with a README.
Open the template ↗Why I built it
One of my own scheduled jobs spent weeks reporting success and writing nothing. No error ever fired, because nothing had errored. The schedule was fine, the credentials were fine, the API on the far end had quietly started returning an empty list, and every node did exactly what it was told with zero items. I found out when the numbers downstream stopped moving.
I ran this watchdog over my own instance the day I finished it and it flagged eight of eleven scheduled workflows. Six of those turned out to be zombies, switched on with a schedule that never fired, and two were legitimately empty. That is the point: it does not tell you what is wrong, it tells you where to look, and it does so before a client does.
Two ways to run it
The free n8n template is the whole thing as a workflow you import into your own instance: the Data Table, the verdict engine, the Slack alerts and the blind-spot sweep. Every node is named for what it does and the setup is written on the canvas. It is published in the n8n creator library, so you can read every node before you decide whether you want any help with it.
The hosted version is an Actor on Apify that does the same read against any n8n instance you point it at, priced per workflow scanned, with nothing to self-host. Run it once with no key and it returns a demo dataset so you can see the output shape before connecting anything. Schedule it hourly on Apify and wire its output into Slack or email with an integration.
What it costs to run
As a workflow, almost nothing: a handful of API calls per watched workflow per hour against your own instance. As an Actor, one event per workflow scanned, so twenty workflows checked hourly is 480 events a day, and there are no proxies or browsers behind it, so platform usage on top is small.
The honest cost is the same as every monitor: somebody has to set the thresholds truthfully. A workflow that legitimately returns nothing most of the time gets a minimum of zero and is judged on freshness alone. Set every minimum to one and you will train yourself to ignore the alerts within a week.
When I would tell you not to bother
If you have three workflows and you look at them every morning, you do not need this. The failure it catches is the one that hides among dozens of green ticks, and three ticks do not hide anything.
If your workflows are all webhook or manual, there is no cadence to judge and the watchdog will skip them by design. It is built for schedules: the nightly sync, the hourly scrape, the weekly report that nobody notices has been empty for a month.
What lands on your desk
- The free template: a workflow you import and own, with the setup written on its canvas
- The hosted Actor: the same check run for you against any n8n instance, priced per workflow scanned
- A watch list you set the thresholds on, so alerts mean something
- Slack alerts on state change and escalation, never on repetition
- If you want it built into your own alerting and handed over working, that is what I do
Open the proof
Published case studies of systems that are running. Each links to the thing itself.
The hosted Actor on Apify ↗The watchdog kit on Etsy (instant download) ↗My n8n creator profile ↗
Questions this page answers
- What is a silent failure and why doesn't normal monitoring catch it?
- It's a scheduled run that reports success with every node green while its final node returns zero items. The executions list shows a tick either way, which is exactly why it stays invisible there.
- How many states does the watchdog report?
- There are five states I track: healthy when it ran on time and met its minimum; empty when it ran green but produced nothing; stale when nothing has succeeded in its window; dark after three windows with no retention at all; and unreadable when the API itself couldn't be read.
- How often does it alert?
- On a state change immediately. A fault that persists waits out a cooldown and arrives marked as escalated, rather than repeating the same alert.
- Can I run this without paying anything?
- This runs for free if you want it to. It's published as a free n8n template in the creator library, and there's a hosted Actor on Apify for anyone who'd rather not run a second workflow.
- Who doesn't need this?
- Anyone with three workflows they already check every morning, or an estate that's all webhook or manual with no schedule to judge.
Want this built and handed over working?
One line is enough to start. You get an honest answer on fit, and a number rather than a discovery call.
Start a brief