n8n Automation Hub
All articles
Build Breakdown

An n8n Error Handling Workflow That Actually Gets Looked At

n8n workflow breakdown · Pavlo Veresiuk · August 23, 2026

I run a lot of n8n workflows in production โ€” scraping pipelines, publishing bots, lead-gen jobs. For a long time, "error handling" meant one thing: I'd notice a workflow had been silently broken for three days because I happened to check the executions tab. That's not error handling, that's luck. So I built one workflow whose only job is to catch failures from every other workflow and put them in front of me fast enough to matter.

Workflow at a glance
  1. n8n's built-in Error Trigger fires whenever a linked workflow throws
  2. Telegram message goes out immediately โ€” workflow name, node name, error message
  3. Critical failures also send a Gmail alert (not everything needs an email, but some things do)
  4. Every error gets appended to a Google Sheet โ€” a running log, not just a ping I can miss
Screenshot of the actual n8n error-handling workflow canvas: Error Trigger, Switch, Telegram nodes, and a Google Sheets append node

The actual workflow canvas, straight from my n8n instance.

Why three channels instead of one

A Telegram ping is the thing I actually see in real time, so it's the first alert. But Telegram messages scroll past. If something fails at 2am and I don't catch it until the morning, I still want a record โ€” that's what the Sheet is for. And a handful of failures are bad enough that a chat notification isn't enough backup, so those also trigger an email through Gmail's OAuth2 node. Three channels sounds like overkill until the one time you need the one you didn't build.

What actually gets logged

Every row in the Sheet has seven columns: Timestamp, Workflow Name, Node Name, Error Type, Error Message, Execution ID, and Execution URL. That last one matters more than it sounds โ€” a direct link straight to the failed execution in n8n means I'm not reconstructing what happened from a one-line error message, I'm looking at the actual run.

The gotcha that cost me twenty minutes

The first time I wired this up, the Google Sheets "Append" node kept failing with a message that had nothing obviously to do with permissions or auth: "Column names were updated." Took me a while to realize n8n's Sheets node validates your outgoing field names against the sheet's actual header row โ€” and my header row was blank. The node isn't guessing at columns, it's matching them. Add the header row first, exactly matching the field names you're sending, and the append works immediately. Obvious in hindsight, not obvious from the error text.

From internal tool to an actual product

This started as something I built for myself, purely to stop finding out about failures too late. It turned out to be generic enough โ€” any n8n setup with more than a couple of workflows runs into the same "how do I actually find out when something breaks" problem โ€” that I packaged it and listed it on the Nexus marketplace as a ready-to-install product. Same three channels, same Sheets log, wired to your own bot token and Sheet instead of mine.

Want the error-handling workflow, or something custom?

It's a ready-to-install product on Nexus, or I can build a version wired to your own stack.