Reference
VAT numbers in Europe, country by country
Twenty-seven member states, twenty-seven formats, twenty-seven registers. These pages explain each one: how the number is built, which national identifier it hides, and what it takes to reach the company behind it.
What an intra-community VAT number is
A VAT identification number is issued by a member state's tax administration to a business that trades across EU borders. It is what makes a reverse-charge invoice possible: supply a valid number and your supplier invoices you without VAT, which is why checking a customer's number is not paperwork but the condition of the exemption.
Every number starts with a two-letter prefix. Twenty-six of them are the ISO country code;
Greece is the exception, written EL rather than GR. Northern
Ireland keeps its own prefix, XI, since Brexit.
The VAT number is rarely the company number. In Belgium and Denmark they are the same digits; in France the VAT number is derived from the SIREN; in Germany, Ireland and Spain the tax administration assigns something entirely separate. That single fact is what makes cross-border company lookup hard.
Format by member state
| Country | Prefix | Format |
|---|---|---|
| Austria | AT | ATU + 8 digits |
| Belgium | BE | BE + 10 digits |
| Bulgaria | BG | BG + 9 or 10 digits |
| Croatia | HR | HR + 11 digits |
| Cyprus | CY | CY + 8 digits + 1 letter |
| Czechia | CZ | CZ + 8 to 10 digits |
| Denmark | DK | DK + 8 digits |
| Estonia | EE | EE + 9 digits |
| Finland | FI | FI + 8 digits |
| France | FR | FR + 2 characters + 9 digits |
| Germany | DE | DE + 9 digits |
| Greece | EL | EL + 9 digits |
| Hungary | HU | HU + 8 digits |
| Ireland | IE | IE + 8 or 9 characters |
| Italy | IT | IT + 11 digits |
| Latvia | LV | LV + 11 digits |
| Lithuania | LT | LT + 9 or 12 digits |
| Luxembourg | LU | LU + 8 digits |
| Malta | MT | MT + 8 digits |
| Netherlands | NL | NL + 9 digits + B + 2 digits |
| Poland | PL | PL + 10 digits |
| Portugal | PT | PT + 9 digits |
| Romania | RO | RO + 2 to 10 digits |
| Slovakia | SK | SK + 10 digits |
| Slovenia | SI | SI + 8 digits |
| Spain | ES | ES + 9 characters |
| Sweden | SE | SE + 12 digits |
| Northern Ireland | XI | XI + 9 or 12 digits |
The format is the syntax only. A well-formed number is not necessarily an assigned one, and an assigned one is not necessarily registered for intra-community trade.
Where the data comes from
There are three kinds of source, and the difference matters more than it looks:
- National open data. France, Estonia, Latvia, Finland and Belgium publish their whole register for free. The catch is never the licence — it is whether a row can be reached by a VAT number. Ireland publishes its entire company register daily and it is useless here, because the Irish VAT number is assigned by Revenue and cannot be derived from the CRO number.
- A national API. Poland, Czechia, Romania and Greece answer one number at a time, for free — each with its own protocol, its own rate limit and, sometimes, its own account.
- VIES. The European Commission's service covers every member state and answers the one question no register does: is this number registered for intra-community trade right now? It is also slow, tightly rate-limited, and two states — Germany and Spain — disclose nothing but validity at all.
One API instead of twenty-seven
Vatlas resolves a VAT number from any member state to a company record: legal
name, national identifier, legal form, status and address. Which register answered is a
detail in meta, not something your code has to branch on.
curl "https://api.vatlas.dev/v1/vat/IT00743110157" \
-H "Authorization: Bearer $VATLAS_KEY"
Response:
200 OK
{
"data": {
"vatNumber": "IT00743110157",
"countryCode": "IT",
"nationalNumber": "00743110157",
"nationalId": null,
"name": "MOTOROLA SOLUTIONS ITALIA SRL",
"legalForm": null,
"status": "active",
"address": {
"line1": "LARGO FRANCESCO RICHINI 6",
"line2": null,
"postalCode": "20122",
"city": "MILANO MI",
"country": "IT"
}
},
"meta": {
"origin": "vies",
"source": "VIES",
"sourceUpdatedAt": "2026-08-28T09:43:39.522Z",
"checked": ["database", "VIES"]
}
}
Free to try. An email address creates an account — no credit card, no sales call — with 100 requests a month and a working key in about a minute.
Get a free key Read the documentation
Last updated 28 August 2026.