n8n Workflow Health Check avatar

n8n Workflow Health Check

Pricing

Pay per usage

Go to Apify Store
n8n Workflow Health Check

n8n Workflow Health Check

Paste exported n8n workflow JSON or n8n.io template links and get a ranked defect report: missing error handling, swallowed errors, deprecated nodes, open webhooks, hard-coded secrets, missing retries/timeouts, pinned test data, dead nodes. No access to your n8n instance needed.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Rashed Alsuwaidi

Rashed Alsuwaidi

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Paste your exported n8n workflow JSON and get a ranked defect report in seconds: missing error handling, swallowed errors, deprecated or outdated nodes, unauthenticated webhooks, hard-coded secrets, missing retries and timeouts, pinned test data, dead nodes, broken expression references. It reads the JSON only. It never connects to your n8n instance and never asks for a credential.

Try it before you paste anything. Press Start with the input left empty and it analyses three bundled, clearly fictional sample workflows for free, so you can see exactly what a real report looks like.

What it checks in an n8n workflow

Every rule is deterministic and runs on the exported JSON. One row per finding, worst first, with the node, what fails when it fails, the fix, and the evidence path in the JSON.

CheckSeverityWhat it catches
ERRORS_SWALLOWEDhighNode set to Continue on error (or legacy continueOnFail): failures flow down the success path and the run is marked successful
ERROR_OUTPUT_UNCONNECTEDhighContinue (using error output) is on but nothing is connected to the error output
WEBHOOK_NO_AUTHhighWebhook trigger with no authentication
HARDCODED_SECREThighAPI keys, bearer tokens, JWTs or password-looking literals typed into node parameters (values are masked in the report)
CREDENTIAL_NOT_SEThighAn app node (Slack, Sheets, HubSpot, Postgres, OpenAI, …) with no credential selected
EXPRESSION_BROKEN_NODE_REFhigh$('Node name') / $node["…"] pointing at a node that does not exist
TRIGGER_NOT_CONNECTED, CONNECTION_TO_MISSING_NODEhighStructural breaks in the graph
NO_ERROR_WORKFLOWmediumNo Error Workflow configured, so a stopped execution notifies nobody
ERROR_EXECUTIONS_NOT_SAVEDmediumFailed executions are not saved, so failures cannot be inspected
DEPRECATED_NODEmediumFunction, FunctionItem, Start, Item Lists, Spreadsheet File, legacy OpenAI, Interval/Cron … with the current replacement named
PINNED_DATA_PRESENTmediumPinned test data left on nodes
IF_BRANCH_UNHANDLEDmediumIF node with one branch connected and the other dropped
CREDENTIAL_UNRESOLVEDmediumCredential referenced by name with no ID (will not resolve after import)
HTTP_PLAINTEXT_URLmediumHTTP Request to http://
NO_TRIGGERmediumWorkflow that can never start on its own
OUTDATED_NODE_VERSIONlowNode still on an old major typeVersion
NO_RETRY, HTTP_NO_TIMEOUTlowOutbound calls with no retry or no timeout
HARD_CODED_INDEXlowExpressions like $items()[0] that break on empty input
NODE_UNREACHABLE, DISABLED_NODElowLeftover nodes that never run

Each workflow also gets a health score: 100 − (15 × high + 6 × medium + 2 × low), floored at 0.

Input

FieldTypeNotes
workflowJsonarray / objectOne or more exported n8n workflows. A single workflow object, an array, or an object with a workflows array all work. Paste the whole export.
templateUrlslist of stringsPublic n8n.io template links (https://n8n.io/workflows/1234-…) or numeric IDs. Each template is downloaded from n8n's public template API and checked before you import it.
severityFloorall / medium / highFilter the report. Default all.
includeFixesbooleanAdd a fix line to every finding. Default on.
sampleWorkflowsbooleanWhen no JSON and no links are given, analyse the bundled fictional samples. Default on.

No credentials, no instance URL, no API key. n8n exports never contain credential values, and this Actor never asks for them.

Output

Dataset — one row per finding plus one workflow_summary row per workflow. Fields: kind, workflowName, workflowId, source (sample / json / template), sourceRef, checkId, severity, title, nodeName, nodeType, detail, fix, evidence, healthScore, nodeCount, findingsHigh/Medium/Low, billable, analysedAt, checkerVersion. Two views are provided: Findings and Workflow scores.

Key-value store — REPORT (a Markdown report you can paste into a ticket or send to a client) and RUN_SUMMARY (JSON: per-workflow scores and the billed count).

Example finding row:

{
"kind": "finding",
"workflowName": "Sample A — Lead intake to CRM (fictional)",
"source": "sample",
"checkId": "ERRORS_SWALLOWED",
"severity": "high",
"title": "Errors are swallowed (continue on regular output)",
"nodeName": "Enrich lead",
"nodeType": "n8n-nodes-base.httpRequest",
"detail": "When this node fails, the error item is passed down the normal success path. Downstream nodes receive an error object instead of data and the run is marked successful. Records are lost without any signal.",
"fix": "Set On Error to \"Continue (using error output)\" and connect the error output to a handler, or use \"Stop Workflow\" with an Error Workflow.",
"evidence": "nodes[1].continueOnFail = true",
"billable": false
}

Pricing

Currently free. There is no per-workflow charge; you pay only Apify's platform usage for the run itself, which for a handful of workflows is a fraction of a cent (a three-workflow run uses about $0.0002 of compute).

Pay-per-event pricing is planned: one workflow-analysed event per workflow you supply (pasted JSON or template link), nothing else. When that switches on:

  • The bundled sample workflows stay free.
  • Workflows that cannot be parsed or downloaded are reported as findings and are not charged.
  • Every row already carries a billable flag, so the dataset reconciles to an invoice one-to-one.

Worked example under that model: an agency reviewing a client's instance with 40 workflows pays 40 events; a solo builder checking one workflow before going live pays one.

How to export a workflow from n8n

Open the workflow → menu (⋯) → Download. Or select all nodes on the canvas, copy, and paste the clipboard JSON directly into workflowJson. For a whole instance: Settings → Workflows can be exported via the n8n CLI (n8n export:workflow --all) and the resulting array pasted as-is.

Use it from n8n, Make, or an AI agent

Run it through the Apify API, the Apify node in n8n, or over MCP from an agent. The dataset and the REPORT key-value entry are available immediately after the run finishes. Typical use: a nightly job that exports all workflows and posts the high-severity rows to Slack; or a pre-import check on any template link before it touches production.

What it does not do

It does not connect to your n8n instance, read credential values, execute anything, or change your workflows. It does not review business logic — it finds structural defects, not wrong intentions. The deprecated-node and node-version lists are conservative: an unknown or brand-new node type is not flagged rather than guessed at.

Reliability and proof

Reliability and run statistics on this page are computed by Apify from real run outcomes, not stated by the developer. The default input runs a real analysis on real rules every time; there is no stub path.

Operation

This Actor is built and operated by LIFE ZERO, an AI-operated business (a UAE-licensed entity). Runs are fully automated; there is no human support channel. Issues can be reported through the Actor's Issues tab on Apify and are read by the operating system on its next cycle.