---
title: "VAT Number Checker: How to Check and Validate an EU VAT Number"
url: https://apyhub.com/blog/vat-number-checker-how-to-check-and-validate-an-eu-vat-number
author: ApyHub
published: 2026-09-18T10:10:59.580729Z
---

# VAT Number Checker: How to Check and Validate an EU VAT Number

# VAT Number Checker: How to Check and Validate an EU VAT Number

TL;DR

Check an EU VAT number on the European Commission's VIES portal, which asks the tax authority that issued it whether the number is currently valid. For one number, use the website. For numbers arriving through signup forms, supplier onboarding or an imported list, automate the check so it happens every time and leaves a record.

## 01 Why this check is worth doing properly

A VAT number decides how a cross-border B2B invoice is taxed. When your customer is a VAT-registered business in another member state, the reverse charge applies, you invoice without VAT, and the buyer accounts for it.

That treatment depends on the number being valid. Council Directive (EU) 2018/1910, in force since 1 January 2020, made the customer's VAT identification number in VIES a substantive condition for exempting an intra-Community supply of goods, rather than the formal requirement it had been. Recital 7 of the directive states the change directly: inclusion of the acquirer's VAT identification number in VIES becomes a substantive condition for the exemption rather than a formal requirement.

In practice, an invalid number means the exemption is lost, and the VAT lands on you for a sale where you collected none.

So the check has a cost attached in a way most form validation does not. A bad email address costs you a bounced message. A bad VAT number costs you the tax.

## 02 How to check a VAT number by hand

1. Open the European Commission's VIES VAT number validation service.
2. Select the member state that issued the number.
3. Enter the number **without** the country prefix.
4. Enter your own VAT number in the requester fields.
5. Read the result: valid or invalid, plus the registered name and address where that country discloses them.

Step 4 is the one people skip. Supplying your own number returns a consultation number, which is the official record that you ran the check on that date. Without it you have a screenshot. With it you have evidence an auditor accepts.

## 03 What VIES is, and why it behaves the way it does

VIES, the VAT Information Exchange System, is a router rather than a database.

When you submit a check, VIES forwards it to the national authority that issued the number: the Bundeszentralamt für Steuern for Germany, DGFiP for France, Agenzia delle Entrate for Italy. The answer comes back from them.

Two consequences follow, and both explain behavior that otherwise looks like a fault:

* **The data varies by country,** because each authority decides what it discloses.
* **Individual countries go offline** without warning. The honest answer then is "could not be checked", not "invalid".

VIES covers the 27 member states plus Northern Ireland, which uses the **XI** prefix for goods since Brexit. The European Commission's 2020 proposal introducing that prefix restates the rule in one line: a valid VAT identification number, with the correct prefix, is a substantive condition for the intra-Community supply exemption. GB numbers are outside the system. Greece uses **EL**, not GR.

## 04 What a valid result proves, and what it does not

A valid result means the number is registered for intra-EU trade today. Three things it does not mean:

* **That the person typing it owns it.** VAT numbers appear on invoices and websites. Anyone can copy one.
* **That the company is solvent or trading.** VIES answers one question only.
* **That the address you were given is right.** Where a name and address come back, compare them with what the customer entered. A mismatch is worth a manual review before the first invoice.

## 05 Four surprises that come up in real checks

**Germany and Spain return no name or address.** Both withhold trader details through VIES on data protection grounds. A valid German number comes back with empty identity fields. This is national policy, not a failed lookup, and any system that treats it as an error will flag good customers.

**A real customer's number can read as invalid.** Germany, Italy and Spain register a business domestically first and activate it for intra-EU trade separately. A new customer can fail for days while that goes through. Charge VAT until the number validates.

**"Unavailable" is not "invalid".** When a national registry is unreachable, the number is unchecked. Queue it and retry.

**Registrations lapse.** Companies deregister, restructure or fall below thresholds, and nobody writes to tell you. A number that validated at signup can be dead a year later.

## 06 How to automate the check

Doing this by hand works until VAT numbers arrive faster than someone can paste them into a web form. Then you want the check inside the signup flow, the onboarding step and a scheduled job.

Two checks, in this order.

**First the format.** Most bad VAT numbers are typos, and a typo is catchable without asking any tax authority. The [VAT Number Validation API](https://apyhub.com/apyhub/service/validate-vat-number) checks structure and check digits and returns a boolean:

bash

```bash
curl -X POST "https://api.eu.apyhub.com/apyhub/validate-vat-number" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vat":"NL123456789B01"}'
```

json

```json
{ "data": true }
```

Run it on the form as the user leaves the field. It is instant, it does not depend on any national system being up, and the user fixes their own typo while they are still looking at it.

**Then the registry.** For a well-formed number, the remaining question is who holds it. The [VAT Company Lookup API](https://apyhub.com/apyhub/service/lookup-vat-company) returns the registered company name, address and country code alongside validity:

bash

```bash
curl -X POST "https://api.eu.apyhub.com/apyhub/lookup-vat-company" \
  -H "apy-token: $APY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vat":"NL123456789B01"}'
```

Use the returned name twice: on the invoice, where the registered legal entity is what compliance requires, and as a comparison against the account name your customer entered.

**For a list,** the [Validate EU VAT Batch API](https://apyhub.com/apyhub/service/validate-vat-batch) takes up to 10 numbers per request and flags failed lookups separately from invalid numbers. Chunk anything longer:

javascript

```js
async function validateAll(vatNumbers) {
  const results = [];
  for (let i = 0; i < vatNumbers.length; i += 10) {
    const res = await fetch("https://api.eu.apyhub.com/apyhub/validate-vat-batch", {
      method: "POST",
      headers: {
        "apy-token": process.env.APY_TOKEN,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ vat_numbers: vatNumbers.slice(i, i + 10) })
    });
    const { data } = await res.json();
    results.push(...data);
  }
  return results;
}
```

[**Try the VAT validation APIs. Free tier, no card.**](https://apyhub.com/apyhub/service/validate-vat-number)

Building the check into software rather than running it by hand? The country formats, check-digit algorithms and where each check belongs in your stack are covered in our [EU VAT number validation guide for developers](https://apyhub.com/blog/eu-vat-number-validation-api-check-tax-ids-before-you-invoice).

## 07 Agents can run the check too

Finance workflows are increasingly handled by AI agents: an agent reads a supplier invoice, pulls out the VAT number and decides whether the document is compliant before it reaches a human.

Every ApyHub endpoint is accessible through [ApyHub MCP](https://apyhub.com/mcp), so an agent can discover, evaluate and call the [validation](https://apyhub.com/apyhub/service/validate-vat-number), [lookup](https://apyhub.com/apyhub/service/lookup-vat-company) and [batch](https://apyhub.com/apyhub/service/validate-vat-batch) endpoints directly, with no hand-written wrapper or tool definition. The agent checks the number in the same run it processes the invoice, rather than passing an unverified value downstream.

## 08 A working routine

* **At signup or onboarding.** Always, on the form.
* **Before the first invoice,** if that is a separate moment.
* **Quarterly across active B2B customers and suppliers,** in batches.
* **Before a large or unusual transaction,** where the exposure justifies one more call.
* **Store every result with its date.** A check you cannot evidence is a check you did not do.

Suppliers deserve the same treatment as customers. An invalid supplier VAT number on a purchase invoice can cost you the input VAT deduction.

## 09 Conclusion

Checking a VAT number takes seconds and prevents a problem that takes months to unwind. Validate the format at the point of entry, confirm the registration behind it, store what you found, and re-check on a schedule.

For a one-off check, VIES is free and official. For anything that repeats, an API turns it into a step your system takes without anyone remembering to.

[**Browse the data validation APIs. One subscription, free tier, no card.**](https://apyhub.com/catalog/data-validation)

*This article is general information about VAT number validation, not tax advice. Confirm your obligations with a qualified adviser in the countries you sell to.*

## 10 FAQ

**How do I check if a VAT number is valid?** Enter it on the European Commission's VIES portal, choosing the issuing country and leaving off the prefix. For repeated checks, call the [VAT Number Validation API](https://apyhub.com/apyhub/service/validate-vat-number) from your own system.

**Is there a free VAT number checker?** Yes. VIES is free and authoritative. It is built for one check at a time by a person, not for bulk or automated use.

**What does VIES stand for?** VAT Information Exchange System. It routes your query to the tax authority that issued the number and returns their answer.

**Why does VIES say valid but show no company name?** Germany and Spain do not disclose trader names or addresses through VIES. The number is confirmed; the identity fields stay empty. Use the [VAT Company Lookup API](https://apyhub.com/apyhub/service/lookup-vat-company) for the countries that do return details.

**Why does a real customer's VAT number come back invalid?** Usually because it has not been activated for intra-EU trade yet. Germany, Italy and Spain activate separately from domestic registration, which can take days.

**Does a valid VAT number mean the company is legitimate?** No. It means the number is registered today. It says nothing about solvency, trading status, or whether the person giving it to you owns it.

**Do I need to check a VAT number before invoicing?** For zero-rated intra-Community supplies of goods, yes. Since January 2020 the customer's valid number is a substantive condition for the exemption.

**Can I check UK VAT numbers on VIES?** GB numbers are outside the system since Brexit. Northern Ireland numbers for goods use the XI prefix and are still covered.

**Can I check VAT numbers in bulk?** Not on the VIES website. The [Validate EU VAT Batch API](https://apyhub.com/apyhub/service/validate-vat-batch) takes up to 10 per request, and you chunk longer lists.

**What is a VIES consultation number?** The reference returned when you supply your own VAT number with the query. It is the evidence that you ran the check on a given date.

**How often should I re-check stored VAT numbers?** Quarterly for active B2B customers and suppliers, plus at onboarding and before large transactions.

**Can an AI agent run these checks?** Yes. Every endpoint is available through [ApyHub MCP](https://apyhub.com/mcp), so an agent can validate a VAT number as one step in an onboarding or invoicing workflow.

## Sources

* Council Directive (EU) 2018/1910 of 4 December 2018, recital 7, on the VAT identification number in VIES as a substantive condition for the intra-Community supply exemption. [https://eur-lex.europa.eu/eli/dir/2018/1910/oj/eng](https://eur-lex.europa.eu/eli/dir/2018/1910/oj/eng)
* European Commission, COM(2020) 360 final, on the XI prefix for Northern Ireland and the substantive-condition rule. [https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?rid\=8\&uri\=CELEX:52020PC0360](https://eur-lex.europa.eu/legal-content/EN/TXT/HTML/?rid=8\&uri=CELEX:52020PC0360)
* European Commission, Directorate-General for Taxation and Customs Union, "EU VAT Forum: The VAT Quick Fixes", on member states treating the customer's VAT number as a substantive condition. [https://taxation-customs.ec.europa.eu/document/download/22cb91d1-06b9-4686-8880-525927ac8478\_en](https://taxation-customs.ec.europa.eu/document/download/22cb91d1-06b9-4686-8880-525927ac8478_en)
* Fonoa, "What is VIES? The VAT Validation System Explained", July 2026, on Germany and Spain withholding name and address data through VIES. [https://www.fonoa.com/resources/blog/what-is-vies](https://www.fonoa.com/resources/blog/what-is-vies)
* Eurofiscalis, "Check an EU VAT number: free VIES tool", June 2026, on country formats and the same disclosure limitation. [https://www.eurofiscalis.com/en/verify-vat-number-eu/](https://www.eurofiscalis.com/en/verify-vat-number-eu/)

## About ApyHub

[ApyHub](https://apyhub.com/) is a curated API catalog and the trusted operational layer for external APIs. The catalog keeps growing across 20 categories, covering AI, data extraction, document and media conversion, geolocation and validation, all available under a single subscription priced in atoms.

Every endpoint ships with machine-readable certification covering data residency, retention, sub-processors and standards alignment across GDPR, SOC 2 and ISO 27001. Every endpoint is MCP-ready by default, so AI agents can discover and call it without a wrapper.

ApyHub is headquartered in Amsterdam, with offices in the Netherlands, Greece and India, and serves 65,000+ developer workspaces every month. There is a free tier and no card is required to start.

Have an API of your own? [Become a provider](https://apyhub.com/api-provider).
