Vivere

Vivere / Answers

n8n workflow succeeded but did nothing: catching runs with 0 items

When a node returns nothing, n8n stops the workflow there and calls the execution a success. Here is how to turn an empty run into one you hear about.

The executions list says Success, the run took two seconds, and the spreadsheet that should have 400 new rows has none. Nothing errored, because as far as n8n is concerned nothing went wrong: a node produced no items, and n8n stopped there.

Why an empty run counts as a success

n8n passes items from node to node, and a node that outputs no items ends the run at that node. The editor says so in the node's output panel: n8n stops executing the workflow when a node has no output data. No error is raised, so the execution is a success, the error workflow does not run, and the run looks the same in the executions list as a day with genuinely nothing to do.

The usual ways to get there:

Make an empty result fail inside n8n

The fix in n8n is to turn "no items" into an error at the node where it happens:

  1. Open the node that may come back empty, such as the HTTP Request or the Filter, and turn on Settings → Always Output Data. When the node has nothing, it passes on a single empty item instead of ending the run.
  2. Add an If node after it. Set the condition's type to Object and the operation to is empty, on {{ $json }}. The empty item goes to the true branch; real items go to the false branch and on through the workflow as before.
  3. On the true branch, add a Stop and Error node with a message that says what was missing, such as Fetched 0 orders. The execution fails, shows as failed in the list, and runs the workflow's error workflow.

Two details catch people out. With Always Output Data on, an empty result reaches the next node as one item, not zero, so a check on {{ $input.all().length }} reads 1 on exactly the run you are trying to catch: test whether the item is empty instead. And n8n warns that Always Output Data on an If node can cause an infinite loop, so put it on the node whose result you are checking, not on the If.

A count is still the right check for a run that is too small rather than empty. An If node on {{ $input.all().length }} with Number → is less than catches the night that handled 3 orders instead of the usual 400, as long as at least one item reaches it.

Catch empty runs from outside n8n as well

Stop and Error works where you remember to add it, and it reports through an error workflow on the same instance. A heartbeat that is told how many items each run handled catches the empty run from outside. Put a ping as the last node of the workflow:

Either way the monitor's list of runs shows the item count for every run, so a run that handled 3 items where it usually handles 400 is easy to spot. Vivere alerts on a missing ping, on a failure ping, and on a run whose reported cost passes the limit you set; it does not alert on a low count, so keep the If node for that. The n8n guide has both setups step by step, and Vivere's free plan covers 25 monitors.

Common questions

Why does n8n show success when the workflow did nothing?

Because nothing failed. When a node outputs no items, n8n stops executing the workflow at that node, which its editor describes as the default behaviour, and an execution that stops without an error is a success. A Filter that matched nothing or a lookup that found no rows ends the run exactly like a day with nothing to do.

What does Always Output Data do in n8n?

It makes a node pass on a single empty item when it would otherwise output nothing, so the nodes after it still run. That is what lets a later If node notice the empty result. Turn it on only on the node whose empty result you want to catch, and take care with it on If nodes, where n8n warns it can cause an infinite loop.

How do I make an n8n workflow fail on purpose?

Add a Stop and Error node where the workflow should fail, with an error message such as "Fetched 0 rows". The execution then fails like any other error, shows as failed in the executions list, and runs the workflow's error workflow if one is set.

Find out without looking

Vivere watches for the ping that does not arrive. Add one line to the job, pick where alerts should land, and you hear about the run that never happened.

Start free Read the quickstart

25 monitors, a status page, email and webhook alerts. No card.

Last reviewed October 2026.

Related