VAT list check Labs
Check every VAT number on your list, not one at a time
Before you send e-invoices to your customers, or pay a batch of suppliers, check the VAT numbers you have on file against the EU register. Paste the list: typing errors, duplicates and numbers the EU register does not cover are found at once, free. Then each remaining number is looked up and comes back valid, invalid — or unknown, when the register did not answer. Unknown is never turned into invalid, costs nothing, and can be checked again on its own.
This is a Labs page. Everything on it has been checked in our test suite; it has not yet run against the real EU register on this website, and nobody has been charged through it. It may change.
Format check: free, no account · Register check: per answered number
- What it costs: checking the format is free. Checking against the EU register costs 1 credit (EUR 0.01) for every number the register actually answers — valid or invalid. A number the register does not answer costs nothing, and neither does a malformed, duplicate or not-covered one.
- Limits: 2,000 rows per list on this page, sent to the register 20 at a time. EU member states only; GB, CH and NO are reported as not covered, never as invalid.
- Nothing is stored. Your list stays in this browser tab until you press the register button, and is then sent to this website only. We keep no list and no answers; a charge is recorded as an amount and a fingerprint, without the numbers.
1. Your list
One VAT number per line, with its country code in front (BE, NL, DE …). To keep your own label next to each number, write label;number — pasting two columns from a spreadsheet works too.
The file is read by this website’s file reader, in memory, and not kept. You choose which column holds the VAT numbers before anything is checked.
What this is, and what it is not
It does
- Read numbers the way people write them: spaces, dots, dashes, lower case, GR or EL for Greece, a nine-digit Belgian number.
- Find, before anything is paid for, the numbers that cannot exist as written, the ones that appear twice, and the ones from outside the EU.
- Ask the EU register (VIES) about each remaining number once, and give you its answer with the time it was given.
- Carry the European Commission’s own consultation number on a row it answered, when the Commission issues one: its record that this consultation took place at that moment, and not a statement about the company. Not every connection to the register gets one — the Commission issues it only to a caller that names its own VAT number as the requester.
- Keep “the register did not answer” apart from “the register says no”, row by row, and let you check only the unanswered rows again.
- Give you the whole result as a CSV and a JSON file, in the order of your list.
It does not
- Give a tax opinion. It reports what the register says; what that means for your invoice is for you or your accountant.
- Cover Great Britain, Switzerland, Norway or any other non-EU number. Those rows are marked “not covered” — which says nothing about the number.
- Look up Northern Ireland (XI) numbers yet. Their shape is checked; the register lookup for XI is not connected.
- Promise anything about tomorrow. A number that is valid today can be withdrawn next week; check again when it matters.
- Always give you a company name. Several member states never share the registered name, and then there is none to show.
- Keep your list. There is nothing to fetch later; the report you download is the record.
What it costs, and when it is charged
The format check is free, for everyone, with no account. The register check costs 1 credits (EUR 0.01) for each number the register actually answers — valid or invalid. It is charged after the answers are in, once for each part of 20 numbers, and only for the answers in that part. A number the register did not answer, a malformed or duplicate number, and a number from outside the EU cost nothing. Before a part is sent, your balance has to cover it in full, so you are never answered first and found short afterwards. If the same numbers are sent again within ten minutes — a double click, a lost connection — they are charged once.
Credits are prepaid; one credit is one euro cent. Top up credits.
Limits
- 20 numbers per request; this page sends a longer list in parts and shows the count as it goes. 2,000 rows per list on this page.
- The 27 EU member states. Northern Ireland (XI): shape only, for now.
- A label of at most 80 characters per row. A request gets 40 seconds; a number that was not reached in that time is unknown, and free.
- A check digit is verified for Belgian numbers only. For every other country the shape is checked here and the rest is left to the register.
For developers and for your AI agent
The same check is one plain HTTP route. Without credentials it runs the free format check; this runs as printed:
curl -s https://jithox.com/api/vat-list-check/v1/check \
-H "content-type: application/json" \
-d '{"rows":[{"reference":"C-1001","vatId":"BE 0400.378.485"},{"reference":"C-1002","vatId":"DE81156986"},{"reference":"C-1003","vatId":"GB123456789"}]}'The answer has one entry per row, in your order, with local, register and a sentence; retry.indexes lists the rows worth sending again, and billing says what was charged and why.
An agent never has to click through this page. On https://jithox.com/api/mcp the free tool check_vat_list_format needs no key, and check_vat_list — the register check, at the same price per answered number — needs a token:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "check_vat_list_format",
"arguments": {
"rows": [
{
"reference": "C-1001",
"vatId": "BE 0400.378.485"
},
{
"reference": "C-1002",
"vatId": "DE81156986"
},
{
"reference": "C-1003",
"vatId": "GB123456789"
}
]
}
}
}