Local database
One indexed read on (country_code, vat_number) across the national registers we bulk-import. That is the common case, and it costs a few milliseconds.
REST API · 27 member states
Vatlas turns an intra-community VAT number into a full company record: legal name, national identifier, legal form, status and address. The official registers are imported on our side, so the answer comes back in milliseconds — not seconds.
Free up to 100 requests / month · 10,000 / month for 14 € excl. VAT · no card to get started.
$ curl "https://api.vatlas.dev/v1/vat/FR08000325175" \
-H "Authorization: Bearer $VATLAS_KEY"
{
"data": {
"vatNumber": "FR08000325175",
"countryCode": "FR",
"nationalId": "000325175",
"name": "THIERRY JANOYER",
"legalForm": "1000",
"status": "active",
"address": {
"line1": "51 RUE MARX DORMOY",
"postalCode": "13004",
"city": "MARSEILLE",
"country": "FR"
}
},
"meta": {
"origin": "database",
"source": "SIRENE",
"checked": ["database"]
}
}
27
Member states validated, plus Northern Ireland
8
National sources wired in, bulk or on-demand
~40 ms
Typical answer when the data is local
1
JSON envelope, whatever the source
Sandbox
Paste a number or click one of the samples. What you see is the answer the API returns, byte for byte.
Under the hood
VIES is authoritative, but it is far too slow — and far too often unavailable — to sit on the critical path of a checkout. So we only ask it as a last resort.
One indexed read on (country_code, vat_number) across the national registers we bulk-import. That is the common case, and it costs a few milliseconds.
For countries with no usable bulk file — Poland, for one — the call goes out to the administration and the answer is written to our database. The second call is local.
Everything else goes to the European service, then into a cache. SOAP faults are retried: an outage is never read as a "no".
Local database, national source or VIES: the JSON is identical. meta.checked lists the sources actually consulted, so your client never has to guess.
Syntax for all 27 member states, plus checksums for France, Finland and Poland. A malformed number is rejected in 2 ms and costs no quota.
"Not registered for intra-community trade" is not "company does not exist", and "source unavailable" is not a negative answer. Three distinct codes.
Coverage
VAT numbers from all 27 member states are validated and resolved. Eight countries are served straight from their official register, imported or queried on our side.
| Country | Source | Strategy | What it changes |
|---|---|---|---|
Belgium BE |
KBO / BCE open data | bulk | The VAT number is the enterprise number: 1.9 M entities, keyed outright. |
Czechia CZ |
ARES (Ministry of Finance) | api | ARES publishes the DIČ itself, so one call resolves the number. |
Estonia EE |
e-Business Register (RIK) | bulk | The daily bulk file carries the VAT number itself. |
Finland FI |
PRH open data | bulk api | The full trade register, plus the API for ceased companies. |
France FR |
INSEE SIRENE | bulk | Millions of legal units in our database, addresses included. |
Latvia LV |
Business Register + VID (CC0) | bulk | The VAT payers register joined with the business register. |
Poland PL |
Ministry of Finance White List | api | Resolved on demand on the first request, then served from cache. |
Romania RO |
ANAF taxpayer register | api | ANAF returns the identity, the seat and the VAT status by CUI. |
Use cases
Check that a customer is VAT registered before applying the reverse charge, and fill the invoice with the exact legal name from the register.
Tie a customer to their national identifier and status, with the source timestamp for your audit trail.
One field, one call, a pre-filled form. You drop five inputs and the typos that come with them.
Replay your account base to normalise legal names and addresses, and spot companies that are no longer active.
100 requests a month for free, no card required. 10,000 a month for 14 € excl. VAT when you outgrow it.