n8n 3.0 Migration Checker, Workflow Audit and Fix avatar

n8n 3.0 Migration Checker, Workflow Audit and Fix

Pricing

from $10.00 / 1,000 workflow checked for n8n 3.0s

Go to Apify Store
n8n 3.0 Migration Checker, Workflow Audit and Fix

n8n 3.0 Migration Checker, Workflow Audit and Fix

n8n migration checker, n8n workflow checker and JSON validator for the n8n 3.0 upgrade, no login. Mode check lists breaking changes, deprecated nodes and security advisories in exported workflows; explain writes an n8n workflow audit; fix, a workflow fixer powered by Claude, returns fixed JSON.

Pricing

from $10.00 / 1,000 workflow checked for n8n 3.0s

Rating

0.0

(0)

Developer

Edge

Edge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Security

Limited permissions

Share

n8n migration checker, n8n workflow checker and JSON validator for the n8n 3.0 upgrade, no login. Mode check lists breaking changes, deprecated nodes and security advisories in exported workflows; explain writes an n8n workflow audit; fix, a workflow fixer powered by Claude, returns fixed JSON. Three modes:

  • check (default): 0.01 USD per workflow checked. Lists what n8n 3.0 breaks in each workflow (rule, level, node, the replacement, the source link) with a readiness verdict. No AI, no API key, results in seconds.
  • fix: 2.00 USD per fixed workflow. Also rewrites what breaks and returns the fixed workflow JSON with a change report (node, before, after, rule, source). Free when a workflow is already ready, needs only human decisions, or the AI cannot fix every finding it may fix (then no fixed JSON is returned).
  • explain: 0.05 USD per workflow explained. A plain-English audit of each workflow: what it does, a node table, credential types, outside hosts, risks (n8n 3.0, security advisories, hardcoded secrets shown masked, missing error handling) and a 0 to 100 health score with the top 3 fixes, plus one printable Markdown report per run. No AI, no API key.

Use n8n's own report when you can log in

n8n ships a free Migration report inside the app (Settings > Migration report), and on a live instance it is the final word. This Actor is for what that report cannot reach: exported files with no login, for example a client's export, a template library, a backup, a check before import, or an AI agent working on files.

Of the 23 rules in n8n's Migration Report, 16 are covered by the checker behind this Actor (3 of them only in part) and 7 need a live instance (instance settings such as the binary data mode or environment variables). One of the 16, Docker-only installs, reads the server itself, so from an export this Actor covers 15.

For AI agents

The Actor is agent-payable: pay per event, no subscription. Send workflows with mode check to learn what breaks, explain for a plain-English audit, or fix to get them rewritten. Read verdict and findings (check), summary, risks and topFixes (explain), or take fixedWorkflow when status is fixed and show needsHuman to your user (fix). Set a maximum charge per run to cap spend.

  1. HTTP, check mode, one call that waits for the result (input.json holds {"mode": "check", "workflows": [ ...exported workflows... ]}):
curl -s -X POST "https://api.apify.com/v2/acts/<username>~n8n-3-migration-checker-fixer/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" --data @input.json
  1. Apify MCP server (https://mcp.apify.com), tool call-actor, fix mode:
{ "actor": "<username>/n8n-3-migration-checker-fixer",
"input": { "mode": "fix", "workflows": [ { "name": "My workflow", "nodes": [], "connections": {} } ] } }

Then read the run's dataset items with get-dataset-items.

  1. Python with apify-client: check everything, then fix only what fix mode can rewrite:
import json, os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
actor = client.actor("<username>/n8n-3-migration-checker-fixer")
workflows = [json.load(open(p)) for p in ["a.json", "b.json"]]
run = actor.call(run_input={"mode": "check", "workflows": workflows})
checked = list(client.dataset(run["defaultDatasetId"]).iterate_items())
todo = [workflows[i["workflowIndex"]] for i in checked
if i["verdict"] == "not_ready" and any(f["autoFixable"] for f in i["findings"])]
if todo:
run = actor.call(run_input={"mode": "fix", "workflows": todo})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["workflowName"], item["status"], item["message"])

What it finds and fixes

Check mode reports every row below with its replacement and source. Fix mode does what the right column says.

n8n 3.0 breaking changeWhat mode fix does
Removed nodes (37 types): Function, Function Item, Cron, Interval, Item Lists, AI Transform, legacy OpenAI and morereplaces each node in place with the node n8n names (Code, Schedule Trigger, Remove Duplicates and so on), settings carried over
AI Agent version 1 and the old agent modesmoves the node to the current Tools Agent version, prompt and options kept
$evaluateExpression() in a Code node, the $getPairedItem helperrewrites them when the meaning is certain
Sub-workflow from a local file or URL, Edit Image version 1, Always Output Data on If or Switch, Gmail Trigger below 1.4lists them under "needs a human" with exactly what to do (free when nothing else needs fixing)
Task runner 60 s timeout, larger SSRF block list, Compression limits, community nodes, Chat Trigger JSON framesnotes only: nothing to change in the JSON, check them on your instance

Source of every rule: n8n's own page, https://docs.n8n.io/changelog/v30-breaking-changes

How it works

  1. A deterministic n8n 3.0 checker (14 rules) reads each workflow. In mode check that is the whole job.
  2. Mode fix, nothing breaks: "already n8n 3.0 ready", free. Only human decisions left: "needs a human", free.
  3. Mode fix, something breaks: the n8n 3.0 fixer agent, Powered by Claude, rewrites only the flagged nodes in a sealed work folder. It cannot browse the web, run commands or touch anything else.
  4. The checker runs again, plus a guard: same node ids, names and positions, same connections, same credentials, same webhook ids and paths, only known n8n node types, versions and parameters. You pay only when the result passes the guard and every finding the AI may fix is gone (findings left only on nodes held for a human, listed under "needs a human"). Only a paid result returns the fixed JSON and its change list.

Safety

  • Never changes credentials, webhook paths or node ids; never adds, removes or rewires nodes.
  • Credentials stay referenced by id: an export never holds their values.
  • Mode fix sends the workflow to Anthropic (Claude) to rewrite it, including any value hardcoded in a node (a token in a header, a URL, code). Pinned execution data (pinData) and trigger state (staticData) are removed first and put back unchanged; the item says so in withheldFromAi. Modes check and explain send nothing anywhere.
  • Every change in a returned workflow is listed: node, field, before, after, rule and source link.
  • Anything it must not guess (for example code it cannot translate with certainty) goes to "needs a human" with the reason; when the AI leaves such a node, that workflow is free.

Explain mode: plain-English audit

Mode explain is the first step of an n8n audit: 0.05 USD per workflow explained. Fixed rules, no AI and no API key, so the same export always gives the same report. One dataset item per workflow:

fieldwhat it holds
summarywhat the workflow does in 3 to 5 plain sentences: trigger, main steps, last steps, outside calls, health
nodesnode table: name, type and purpose in plain words; disabled nodes and sticky notes are marked
credentialscredential type names (for example slackApi) and the nodes that use them; never a credential id, name or value
apps, hostsoutside services the app nodes call, and hosts named in URL parameters and code (never a path or query)
triggershow it starts: a schedule in words with its time zone, a webhook method and path, chat, form, by hand
riskskind, severity, points, nodes, text, fix, source; a hardcoded secret adds field and masked
healthScore, topFixes0 to 100, and the fixes of the risks with the most points (at most 3)
verdict, findings, advisoriesthe same as mode check

The risks it looks for, and what each one costs the health score (100 minus all points, never below 0):

riskseveritypoints
hardcoded_secret: a token, key or password written into a node (header, query, body, URL or code), shown masked: at most its first 4 characters, then ********high20 each
advisory: the given n8nVersion is affected by n8n security advisories of 28 Oct 2026 (one risk: upgrade to the first version that fixes them all)high if one of them is high, else medium20 or 10
n8n_3_breaking: a node that breaks on n8n 3.0, as in mode checkmedium10 per node
no_error_workflow: no error workflow is set, so a failed run alerts nobodymedium10
advisory_check_version: advisories name nodes of the workflow and no n8nVersion was givenlow3
no_retry: steps that call an outside service with no Retry On Fail and no error outputlow3
open_webhook: a webhook with no authenticationlow3 each
n8n_3_note: n8n 3.0 notes to check on the instanceinfo0

Every run also stores one printable Markdown report in its key-value store under the key REPORT.md: an overview table, then one section per workflow (what it does, how it starts, nodes, credential types, services and hosts, risks, advisories, top fixes). Open it from the run's Storage tab, or download https://api.apify.com/v2/key-value-stores/<storeId>/records/REPORT.md.

Example input (up to 200 workflows per run; the full file is examples/explain_input.json):

{ "mode": "explain", "n8nVersion": "2.44.6",
"workflows": [ { "name": "Signup alert to Slack", "nodes": [], "connections": {} } ] }

Summary of that workflow, as the Actor writes it: "It starts when an HTTP POST request reaches the webhook path /new-signup (New signup). Then it sets or renames fields on each item (Format alert), then posts a message to Slack (Post to #signups). Last, it sends the reply to the webhook caller (Reply ok). It calls Slack, and it uses 1 stored credential type (slackApi). Health score: 64 of 100 (4 risks found); n8n 3.0: ready."

Free: invalid input and skipped items. Explain mode reads only the export: node purposes come from a fixed table of common nodes (other app nodes read "works with

Input

{ "mode": "check", "workflows": [ { "name": "My workflow", "nodes": [], "connections": {} } ] }
  • mode: check (default), explain or fix.
  • workflows: exported n8n workflow objects (Download in the n8n editor, or n8n export:workflow). Mode check: up to 500 per run. Mode explain: up to 200 per run. Mode fix: up to 20 per run, 150 KB each. The example input is a small sample workflow that is already n8n 3.0 ready: mode check returns it in seconds, no AI, no key.
  • n8nVersion (optional, empty by default, modes check and explain): the n8n version that runs these workflows, for example 2.44.6. See "Security advisories (modes check and explain)" below.

Output (one dataset item per workflow)

The Output tab has four views: Overview, Check (breaking changes and security advisories), Explain (n8n workflow audit) and Fix (fixed workflow JSON). Mode explain also links its Markdown report, REPORT.md.

fieldmeaning
mode, statuscheck: checked; explain: explained; fix: fixed, already_ready, needs_human, partial; all modes: invalid_input, skipped, error
chargedcheck and explain: true for every workflow that parsed; fix: true only for fixed
verdictready, ready_with_notes (info only) or not_ready, for the workflow as sent (fix: only on charged items)
findingsevery finding: rule, level (fix or info), node, nodeType, text, replacement, source, autoFixable (fix: only on charged items; a free fix item points to mode check)
advisoriescheck and explain: n8n security advisories the workflow or the given version touches: id, severity, title, nodes, fixedIn, status (affected, fixed, check version or dependency notice), link, and for a dependency notice its notice
summary, nodes, credentials, apps, hosts, triggers, risks, healthScore, topFixesexplain: see "Explain mode" above
fixedWorkflowfix: the fixed workflow JSON, ready to import into n8n 3.0 (only when charged)
changesfix: every change: node, field, before, after, rule, source
needsHumanfix: what only you can decide: node, rule, reason, source
notes, remaining, reasonsfix: info findings after the fix and fix-level findings still open (both on charged items), why a workflow was not fixed or not charged

Security advisories (modes check and explain)

On 28 Oct 2026 n8n published 12 security advisories. Modes check and explain list the ones each workflow touches in advisories, next to the 3.0 findings.

  • It reads only the exported file you send: node types, node names, and whether a node has stored sign-in data. It never logs in to your n8n and never reads a sign-in value.
  • A node of a listed type in the workflow (Edit Image, Function, Function Item, LangChain Code, NocoDB, MongoDB, Chat Trigger, or any node with stored sign-in data) lists the advisory with those node names.
  • With n8nVersion (for example 2.44.6) each entry says affected or fixed for that version; without it, check version. A fix on your version's own line (for example 2.45.x) decides; otherwise a fix on an older line of the same major version means fixed.
  • Advisories about the whole n8n instance, and two whose node type no public n8n page names (Vector Store (OracleDB), Asana Trigger), appear only when you give a version and that version is affected.
  • Advisories never change the 3.0 verdict or the price: still one 0.01 USD event per workflow checked (mode explain counts affected advisories in the health score).
AdvisorySeverityShown byFixed in
GHSA-gx3v-3x3v-f8r5highversion (workflow expression isolation)1.123.89, 2.45.5, 2.46.1, 3.0.1
GHSA-f2cw-9483-7vcphighEdit Image node1.123.89, 2.45.5, 2.46.1, 3.0.1
GHSA-9p7v-45m2-wxgjhighFunction, Function Item, LangChain Code nodes2.42.6, 2.43.3, 2.44.0, 3.0.1
GHSA-jmcg-c7p5-q69gmoderateNocoDB node1.123.89, 2.45.5, 2.46.1, 3.0.1
GHSA-prmc-fg87-r4ghmoderateany node with stored sign-in data2.45.5, 2.46.1, 3.0.1
GHSA-2x68-96jw-5r6cmoderateversion (Vector Store (OracleDB) node)2.43.5, 2.44.1, 3.0.1
GHSA-mx4r-96jx-v278moderateversion (Asana Trigger node)2.38.0, 3.0.1
GHSA-rc3w-8jc8-7x3wmoderateversion (MCP OAuth client registration)1.123.89, 2.45.5, 2.46.1, 3.0.1
GHSA-426f-xmcv-g8pgmoderateversion (end-user credential connect flow)2.45.5, 2.46.1, 3.0.1
GHSA-4v22-g448-h4rgmoderateMongoDB node1.123.89, 2.45.5, 2.46.1, 3.0.1
GHSA-pwj5-wwm6-g83jmoderateChat Trigger node1.123.89, 2.45.5, 2.46.1, 3.0.1
GHSA-9qx8-fhxv-w794moderateversion (Browser Use feature)2.45.5, 2.46.1, 3.0.1

This list is dated: the advisories published on 28 Oct 2026, read on 29 Oct 2026. When n8n publishes new ones at https://github.com/n8n-io/n8n/security/advisories, the list needs a re-check before you rely on it.

MCP dependency notices

n8n bundles the MCP TypeScript SDK (@modelcontextprotocol/sdk). A workflow with an MCP node (MCP Server Trigger, MCP Client, MCP Client Tool, MCP Registry Client) lists the 4 SDK advisories of 20 Oct 2026 with those node names, status dependency notice and this notice, whatever n8nVersion says:

n8n bundles @modelcontextprotocol/sdk 1.31.0 (stable 2.45.7 and beta 2.46.3; every n8n 2.x release on npm bundles a version below 1.32.0, checked on 1 Nov 2026; on n8n 1.x it depends on the version and the install); this SDK advisory is fixed in 1.32.0; whether your workflow is exposed depends on use (an MCP endpoint reachable from outside, OAuth redirects). Fix: keep MCP endpoints off public ports until an n8n release bundles SDK 1.32.0 or later.

  • GHSA-46jr-4wx8-v453, high: one HTTP request could exhaust server memory during validation
  • GHSA-22jm-h49p-29qw, high: experimental tasks were not tied to the session that created them
  • GHSA-rvq5-wwqv-78pq, moderate: server bearer authentication accepted tokens issued for another service
  • GHSA-6prh-2h8m-c8cw, moderate: client transports and OAuth requests followed cross-origin redirects

A notice makes no claim that your n8n is vulnerable, and it never changes the 3.0 verdict, the health score or the price. Checked on 1 Nov 2026: when an n8n release bundles SDK 1.32.0 or later, the notice needs a re-check.

Limits

  • Fix mode changes nodes in place: it never adds nodes or rewires a workflow. A fix that needs that is listed under "needs a human".
  • Instance settings are outside an export (Docker-only installs, binary data mode, environment variables). n8n's own Settings > Migration report on your instance is the final word.