n8n · free tool · no signup · nothing leaves your browser

n8n workflow JSON validator

Paste a workflow file and find out whether n8n will accept it, and what it will complain about — before you drag it onto a canvas or run import:workflow in a terminal. The checks follow the four messages n8n itself shows on a failed import, plus the two things that bite afterwards: wiring that points at nodes which are no longer in the file, and a live API key still sitting in an export you were about to share.

Everything runs in this page. Your workflow is not uploaded, not logged and not sent to any service — which matters, because an n8n export routinely carries credentials.

Check a workflow file

Paste a workflow JSON above.

    Source: /tools/wfcheck.js. The secret check is a pattern match, not a guarantee — read a file yourself before you publish it. Message wording quoted here was read from n8n’s own string file on 6 September 2026; the CLI behaviour was reproduced on n8n 2.25.7.

    What it checks, and why each one exists

    CheckWhy it is here
    Does it parse as JSON?The only thing behind n8n’s “Could not import file” / “The file does not contain valid JSON data”. The parser’s own message, with the character position, is shown so you can jump straight to the broken character.
    Are "nodes" and "connections" both there?n8n names exactly those two keys when it rejects a file: “The imported data does not contain valid workflow data (‘nodes’ and ‘connections’ are missing)”. An API response wrapped in {"data": …} and a single copied node both fail here.
    Does every node have a resolvable type?Types outside n8n-nodes-base.* and @n8n/n8n-nodes-langchain.* need a community package installed on the target instance first; otherwise n8n imports the workflow and tells you it “Skipped N node(s) with missing type”.
    Does the wiring resolve?Connections are keyed by node name. A renamed or deleted node leaves connections pointing at a name that no longer exists — the import succeeds and the workflow is silently broken.
    Is there a trigger?A workflow with no trigger node imports fine and then cannot be published. Worth knowing before you go looking for a publish button that will not help.
    Is there a top-level "id"?Only matters on the command line. On n8n 2.25.7 we imported a workflow with no top-level id and got SQLITE_CONSTRAINT: NOT NULL constraint failed: workflow_entity.id; adding one fixed it. The editor does not care.
    Is a live secret still in the file?Checks for API-key, token and private-key shapes (sk-…, xox…, ghp_…, AKIA…, PEM blocks, bearer tokens, literal password values). Exported workflows carry more than people expect — this is the check to run before you paste one into a forum, an issue or a repo.

    The shape n8n expects

    A workflow export is an object. Two keys are load-bearing:

    • nodesAn array. Each entry needs a name (unique — connections are keyed by it), a type, a typeVersion, a position and a parameters object. Nodes that authenticate also carry a credentials object naming the credential, not its value.
    • connectionsAn object keyed by source node name. Under each is an output kind (usually main), then an array per output branch, then one entry per target: {"node": "Slack", "type": "main", "index": 0}. Rename a node in a text editor and forget to rename it here, and the import succeeds with the wiring quietly detached.

    Everything else you see in a real export — id, versionId, meta, pinData, staticData, triggerCount, tags — belongs to the instance it came from. It imports harmlessly, but it is what you want to strip before publishing a template. Ours are stripped, which is exactly why they trip the CLI’s id requirement; the validator flags that so you are not surprised.

    If the file is fine and the import still is not

    Match the message you got against the eight things n8n says when an import fails — four in the editor, four on the command line. If the workflow imported and then would not answer a request, go to “webhook not registered”; if the editor itself will not open, it is probably the secure cookie warning.

    Want a file that is known to import cleanly, to compare against? Every workflow in our n8n template library was exported from a real instance and re-imported into a blank one before publication. The import guide covers the steps, and the cron expression builder is the companion tool for the scheduled ones.

    Sources and last verified

    Frequently asked questions

    What makes an n8n workflow JSON valid?

    Two things, in order. It has to parse as JSON — n8n’s “Could not import file” means it did not. Then it has to be shaped like a workflow: a top-level object with a nodes array and a connections object. n8n names those two keys in its own error text when they are missing. Everything else — name, settings, per-node parameters — is optional as far as the editor’s import is concerned.

    Does this validator upload my workflow anywhere?

    No. The parsing and every check run in your browser from one static file, /tools/wfcheck.js, served by this domain. The page loads no third-party script and makes no request with your content. That matters here more than on most tools, because exported n8n workflows often still contain credentials.

    Why does it warn about a missing top-level "id" when the editor imports the file fine?

    Because the CLI writes straight to the database and the editor does not. We reproduced it on n8n 2.25.7: n8n import:workflow on a workflow JSON with no top-level "id" failed with SQLITE_CONSTRAINT: NOT NULL constraint failed: workflow_entity.id, and adding any unique string as "id" made the same file import. If you only ever drag files onto the canvas you can ignore that warning.

    What counts as a community node here?

    Anything whose type does not start with n8n-nodes-base. or @n8n/n8n-nodes-langchain. — those two are the packages that ship with n8n. A type like n8n-nodes-mypackage.thing needs that package installed on the instance you are importing into, or the node is dropped on import and n8n reports how many it skipped.

    Can it tell me whether my credentials will work?

    No, and nothing can from the file alone. It lists the credential types the workflow references so you know what to set up, and it flags values that look like real secrets so you do not publish them by accident. Whether a credential authenticates is only knowable by running the workflow.

    The file passes here but n8n still refuses it. What now?

    Read the exact message n8n gives you: the four editor messages and the four CLI errors each point somewhere different, and our page on “Could not import file” maps every one of them to a cause. If the import succeeded and the workflow simply does not respond, the next place to look is “webhook not registered”.