AutomationFlowsGeneral › Validate a Vat Number Submitted Through a Form

Validate a Vat Number Submitted Through a Form

Validate a VAT number submitted through a form. Uses formTrigger, n8n-nodes-vatnode, form. Event-driven trigger; 9 nodes.

Event trigger★★★★☆ complexity9 nodesForm TriggerN8N Nodes VatnodeForm
General Trigger: Event Nodes: 9 Complexity: ★★★★☆ Added:

This workflow follows the Form → Form Trigger recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Validate a VAT number submitted through a form",
  "nodes": [
    {
      "parameters": {
        "formTitle": "Business Customer Sign-Up",
        "formDescription": "We check the VAT number against the EU VIES register before your account goes live.",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Company name",
              "requiredField": true
            },
            {
              "fieldLabel": "VAT number",
              "placeholder": "DE123456789",
              "requiredField": true
            }
          ]
        },
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000001",
      "name": "Sign-up form",
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2,
      "position": [
        -460,
        0
      ]
    },
    {
      "parameters": {
        "operation": "checkFormat",
        "vatId": "={{ $json['VAT number'] }}"
      },
      "id": "a1000000-0000-4000-8000-000000000002",
      "name": "Check format (free)",
      "type": "n8n-nodes-vatnode.vatnode",
      "typeVersion": 1,
      "position": [
        -240,
        0
      ],
      "notes": "Offline pattern check. No API call, so it runs first and keeps typos out of the quota."
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "c1000000-0000-4000-8000-000000000001",
              "leftValue": "={{ $json.validFormat }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000003",
      "name": "Format looks right?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        -20,
        0
      ]
    },
    {
      "parameters": {
        "vatId": "={{ $json.normalized }}"
      },
      "id": "a1000000-0000-4000-8000-000000000004",
      "name": "Validate against VIES",
      "type": "n8n-nodes-vatnode.vatnode",
      "typeVersion": 1,
      "position": [
        220,
        -100
      ],
      "credentials": {
        "vatnodeApi": {
          "name": "<your credential>"
        }
      },
      "notes": "Live VIES lookup. Spends one request from the monthly quota."
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "conditions": [
            {
              "id": "c1000000-0000-4000-8000-000000000002",
              "leftValue": "={{ $json.valid }}",
              "rightValue": true,
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000005",
      "name": "Registered in VIES?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        440,
        -100
      ]
    },
    {
      "parameters": {
        "operation": "completion",
        "completionTitle": "You're verified",
        "completionMessage": "={{ $json.companyName }} is registered for VAT in {{ $json.countryName }}. We've saved the check as audit evidence.",
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000006",
      "name": "Accepted",
      "type": "n8n-nodes-base.form",
      "typeVersion": 1,
      "position": [
        680,
        -200
      ]
    },
    {
      "parameters": {
        "operation": "completion",
        "completionTitle": "We couldn't confirm that VAT number",
        "completionMessage": "VIES has no active registration for this number. Check it and try again, or reply to our email and we'll sort it out.",
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000007",
      "name": "Not registered",
      "type": "n8n-nodes-base.form",
      "typeVersion": 1,
      "position": [
        680,
        0
      ]
    },
    {
      "parameters": {
        "operation": "completion",
        "completionTitle": "That doesn't look like a VAT number",
        "completionMessage": "={{ $json.error }}",
        "options": {}
      },
      "id": "a1000000-0000-4000-8000-000000000008",
      "name": "Wrong format",
      "type": "n8n-nodes-base.form",
      "typeVersion": 1,
      "position": [
        220,
        140
      ]
    },
    {
      "parameters": {
        "content": "## Two Checks, One Quota Hit\n\n**Check Format** runs offline and filters out typos without spending quota. Only the numbers that pass reach **Validate**, which does the live VIES lookup.\n\nAdd a **Vatnode API** credential to the Validate node before you run this. Get a key at [vatnode.dev/dashboard/api-keys](https://vatnode.dev/dashboard/api-keys) \u2014 the free plan needs no card.\n\nSet a Requester VAT under Account details in the vatnode dashboard, and every result carries a `consultationNumber` \u2014 the evidence a tax auditor asks for.",
        "height": 320,
        "width": 420
      },
      "id": "a1000000-0000-4000-8000-000000000009",
      "name": "Read me",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -460,
        -400
      ]
    }
  ],
  "connections": {
    "Sign-up form": {
      "main": [
        [
          {
            "node": "Check format (free)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check format (free)": {
      "main": [
        [
          {
            "node": "Format looks right?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format looks right?": {
      "main": [
        [
          {
            "node": "Validate against VIES",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wrong format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate against VIES": {
      "main": [
        [
          {
            "node": "Registered in VIES?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Registered in VIES?": {
      "main": [
        [
          {
            "node": "Accepted",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Not registered",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  },
  "meta": {
    "templateCredsSetupCompleted": false
  },
  "tags": []
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Validate a VAT number submitted through a form. Uses formTrigger, n8n-nodes-vatnode, form. Event-driven trigger; 9 nodes.

Source: https://github.com/vatnode/vatnode-n8n/blob/main/templates/validate-vat-from-form.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

This interactive tutorial teaches you how to build in n8n from scratch, using a live walkthrough with real-time examples. Rather than static documentation, this guided workflow explains key n8n concep

Form Trigger, Form
General

This workflow contains community nodes that are only compatible with the self-hosted version of n8n.

Form Trigger, n8n, Form +2
General

This workflow exposes an n8n Form that calculates a product’s selling price from cost, tax, and marketplace fees using either a target profit margin or a target markup, then displays the resulting pri

Form Trigger, Form
General

Credentials Transfer. Uses form, httpRequest, executeCommand, readWriteFile. Event-driven trigger; 22 nodes.

Form, HTTP Request, Execute Command +2
General

This workflow collects scheduled social post details via an n8n form and creates a Google Drive package containing a tweet.txt file and 1–4 numbered images, while validating inputs, preventing duplica

Form Trigger, Google Drive, Form