n8n logon8n Automation Hub
Debugging notes

Two of My n8n Workflows Skipped a Run Because Google Said 503

Debugging notes · n8n workflow · September 2, 2026

Neither workflow had a bug. Google's Sheets API just had one bad second, on two unrelated days, and both workflows treated that one bad second as a reason to give up for the whole run.

Workflow at a glance
  1. A YouTube Shorts publisher's "Get Ready Rows" node (Google Sheets, read) failed with 503 - The service is currently unavailable — one execution, one day
  2. Days later, a separate news-digest workflow's "Append News Log" node (also Google Sheets) failed with the identical 503 Service unavailable message
  3. Both nodes were configured with n8n's execution defaults — no retryOnFail, so a single transient error ended the whole run instead of trying again
  4. Both workflows self-recovered on their next scheduled run hours later, with nothing broken in the meantime except the one skipped cycle
  5. Fix: turned on retryOnFail (3 attempts, 3-second spacing) on both nodes via the n8n API
  6. Confirmed via a fresh read of both nodes' live configuration after the change, not just the API's 200 response to the update
Diagram of a publisher workflow with the Google Sheets read node that failed on a transient 503 highlighted

Node diagram reconstructed from the live workflow via the n8n API.

Same error, two workflows, no shared cause

Two Google Sheets nodes, in two workflows that share nothing except the same n8n instance and the same underlying Google Sheets API, failed on different days with the exact same message: 503 - {"error":{"code":503,"message":"The service is currently unavailable.","status":"UNAVAILABLE"}}. One was a "Get Ready Rows" read at the top of a scheduled YouTube Shorts publisher, filtering a queue sheet for rows marked status: ready. The other was an "Append News Log" write at the tail end of a news-digest pipeline, logging a posted story's URL after publishing it to Telegram.

Neither node's query was unusual, neither sheet was especially large, and neither workflow had just been edited. A 503 from a Google API means the service itself is temporarily unable to handle the request — it's Google's problem for that one call, not a misconfiguration on the calling end.

The actual damage: a silently skipped cycle, not a broken pipeline

In both cases, the workflow simply didn't run that cycle. The publisher's scheduled run came and went without picking a video to publish; the news-digest run came and went without checking or logging that story. Both workflows' next scheduled run, hours later, executed normally — the underlying Sheets stayed intact, no data was corrupted, and nothing needed manual repair. The only cost was one missed cycle each, which is easy to miss entirely unless something is specifically watching for gaps in a schedule that's supposed to fire multiple times a day.

That's the trap with transient-error skips: they don't look like anything happened. There's no corrupted row, no duplicate, no obviously wrong output to notice later — just a gap in the schedule that only shows up if you go looking at execution history.

Why neither node was equipped to survive it

Neither the Sheets read node nor the Sheets append node had retryOnFail set — checked directly against each node's live configuration, not assumed from the workflow's age or how long it had run without incident. Without it, n8n's default behavior for any node is to treat a single failed attempt as the final answer for that execution: no automatic second try, no backoff, straight to the error state. For a call to an external API that occasionally returns a transient 503 for reasons that have nothing to do with the request itself, that default turns an ordinary, self-resolving blip into a full skipped run.

The fix: retryOnFail on both nodes

Both nodes were updated via the n8n API to set retryOnFail: true, maxTries: 3, waitBetweenTries: 3000 — three attempts, three seconds apart, before the node is allowed to actually fail the execution. Three seconds is enough gap for a momentary Google-side blip to clear without meaningfully delaying either workflow's schedule; a slower-firing downstream node (an actual write with side effects, for instance) might reasonably want a longer wait or fewer tries, but a read at the top of a pipeline and a log-only append at the tail are both cheap to retry and safe to retry repeatedly.

This wasn't a code change or a workflow redesign — both nodes kept their exact same query, filters, and downstream connections. The only thing that changed is what happens in the few seconds after Google's API says no.

What confirmed it was actually fixed

Both nodes' configuration was read back from the n8n API after the update — retryOnFail: true, maxTries: 3, waitBetweenTries: 3000 on both — rather than trusting the API's 200 response on the update call alone. There's no way to force a real 503 on demand to test the retry path directly, so the fix stands on the setting actually being persisted and n8n's own documented retry behavior, not on a reproduced success. Any node in this environment that calls an external API on a schedule — Sheets, YouTube, Telegram, anything outside n8n's own control — is a candidate for the same setting; the two nodes fixed here were just the two that happened to get unlucky first.

A scheduled n8n workflow that occasionally just... doesn't run, with no error you can find afterward?

I harden n8n workflows against exactly this kind of silent, transient-API skipped cycle.