The 4 n8n + Claude Workflows That Died in Production

I built 6 n8n + Claude workflows this quarter. Two are still running. Four died in production — quietly, at 3am, while I was posting screenshots of the canvas.

Nobody talks about the graveyard. So here it is: the exact failure modes that killed each workflow, and the guardrails I’d build if I were starting over today.

Failure 1: OAuth tokens silently expired

The workflow: a Gmail → Claude → CRM pipeline that summarized inbound sales replies and updated HubSpot deal notes. Ran clean for [X] weeks. Then the Google OAuth refresh token expired because I’d hit Google’s 7-day expiry window for apps in Testing mode. No alert. Just a flatline.

I found it when a prospect asked why we hadn’t followed up.

What actually kills you: most n8n credential errors surface as an execution error on the failing node — which does nothing if you’re not watching executions. Google’s own docs confirm test-mode refresh tokens expire in 7 days (see OAuth 2.0 docs). Move the OAuth app to In Production status before you trust anything to it.

Fix:

  • Publish your Google Cloud OAuth consent screen out of Testing.
  • Add an Error Trigger workflow in n8n that pings Slack on any failed execution. Takes 4 minutes to build. Would have saved me a week.
  • Add a daily heartbeat: a scheduled workflow that runs a trivial authenticated call (e.g. list 1 email) and posts “✅ auth alive” to Slack. If it goes silent, you know.

Failure 2: Claude returned malformed JSON, one time in fifty

The workflow: scrape LinkedIn signals → Claude formats them into a structured JSON object → n8n routes into Airtable columns.

Worked beautifully. Until Claude, roughly 2% of the time, wrapped its JSON in a stray markdown fence or added a trailing sentence like “Let me know if you’d like me to adjust the format.” The JSON Parse node choked. Downstream nodes ran on the previous item’s data. Airtable filled with duplicate rows.

Fix:

  • Use Anthropic’s tool use feature instead of asking for JSON in the prompt. When you define a tool schema, Claude returns structured input that matches the schema — no parsing gymnastics. Details in the Anthropic tool use docs.
  • If you’re stuck with plain text output, wrap the parse step in a Try/Catch using n8n’s error branches. On failure: retry with a stricter reprompt (“Return ONLY the JSON object, no markdown, no prose”).
  • Log every raw model response for 30 days. When something breaks, you need the actual output, not a guess.

Failure 3: Rate limits hit mid-batch, no retry logic

The workflow: a warm outbound sequence — [Y] leads pulled from a spreadsheet, enriched, personalized with Claude, sent through Instantly.

Halfway through a batch, I hit Anthropic’s tier-1 tokens-per-minute limit. n8n threw a 429. The workflow stopped. Half the leads got a personalized message. The other half got nothing — and because my “sent” flag was set before the API call, the retry logic (that I built later, in a panic) skipped them entirely.

Fix:

  • Set the sent flag after the send confirms, not before. Idempotency matters.
  • Use n8n’s built-in retry on the HTTP/Claude node — 3 retries, exponential backoff (2s, 8s, 30s).
  • Batch through a Split In Batches node with a 1–2 second wait node between iterations. Slower, but it doesn’t detonate.
  • Read the actual rate limits before you build. Anthropic publishes them per tier.

Failure 4: The task didn’t need automating

This one hurts. I built an elaborate workflow to auto-draft LinkedIn comment replies using my past voice as context. It worked. It was clever. I killed it after [Z] weeks because the replies read like a slightly-off version of me and the whole point of showing up in comments is showing up.

I automated it because I could, not because it mattered. Related: I wrote about this exact trap in why AI-ghostwritten LinkedIn content quietly tanks reach. The algorithm and your audience both notice.

Fix: before you build, answer three questions:

  • Does this task happen at least 10 times a week?
  • Is the output quality tolerant to ~90% accuracy?
  • Would a human noticing the automation break trust?

If you can’t say yes/yes/no, don’t automate it. Same logic applies to founder-led content in general — I unpack that in why founder-led accounts dominate organic reach in 2026.

The two workflows that survived

Both are boring:

  • Inbound lead router: form fill → Claude classifies intent → Slack DM to me with a one-line summary and a suggested reply. Runs 20+ times a day. Zero downstream writes, so nothing catastrophic can break.
  • Content repurposing: new blog post → Claude drafts 3 social hooks → dumped into a Notion queue for me to edit. Human in the loop by design.

Notice the pattern: low blast radius, human review, small outputs. The workflows that died all had one thing in common — they wrote to production systems without a human checkpoint.

The actual playbook

  • Every workflow gets an Error Trigger → Slack from day one.
  • Every workflow gets a daily heartbeat if it touches OAuth.
  • Structured outputs use Claude tool use, not “please return JSON”.
  • Idempotency flags update after success, never before.
  • Retry with exponential backoff on every external API call.
  • If a human wouldn’t miss it, don’t build it.

The flex isn’t the stack. The flex is the one workflow you haven’t touched in 90 days and it’s still quietly working. If you’re thinking about what to automate next, this piece on building a persistent AI context stack is where I’d start — because context, not workflows, is usually the real bottleneck.

Show me your graveyard.

Discover more from Alington Media

Subscribe now to keep reading and get access to the full archive.

Continue reading