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.
n8n Automation Hub