
If you invoice EU businesses with reverse-charge VAT, you already know you're supposed to validate your customers' VAT numbers. What surprises most finance teams is the gap between "we checked it" and "we can prove we checked it", and that gap only becomes visible during a tax inspection.
What VIES gives you for free
VIES is the European Commission's official validation service. Paste in a VAT number, it tells you valid or invalid, and for most member states returns the registered business name and address. It's free, it's official, and for one-off checks it's all you need.
The three problems at any real volume
First, there's no bulk mode. Validating a 500-customer ledger means 500 manual checks or writing code against the API.
Second, it falls over constantly. Individual member states go offline for hours ("MS_UNAVAILABLE" is a rite of passage), and the service rate-limits aggressively. Naive scripts that hammer it with 20 parallel requests get error codes and, eventually, IP blocks. A batch that dies at number 347 of 500 with no record of which succeeded is worse than no batch at all.
Third, and least known: the audit evidence. When you supply YOUR VAT number along with the one you're checking, VIES returns a consultation number, an official identifier proving that check happened on that date. Under the rules of several member states, that consultation number is the evidence a tax authority expects when you justify zero-rating a cross-border sale to a customer whose VAT number later turns out dead. A screenshot of a green tick carries a lot less weight.
What a sane bulk setup looks like
Whatever tool you use (including your own script), it should: accept messy input formats and normalise them, keep concurrency low (around 3) with backoff retries so member-state downtime and rate limits don't kill the batch, output one row per input including failures so reconciliation is possible, and request consultation numbers on every check so the audit trail builds itself.
Disclosure: I built a tool that does exactly this pattern, EU VAT Validator (VIES), about $5 per 1,000 validations, no subscription, MCP-ready so finance automations and AI agents can call it directly. But the pattern matters more than the product: if your current process can't show a consultation number per customer per period, that's the gap to close before an inspector finds it for you.
(Not tax advice; check your member state's specific evidence requirements with your advisor.)
Top comments (0)