EU VAT Validator (VIES): Verify & Bulk-Check VAT IDs
Pricing
from $5.00 / 1,000 vat number validateds
EU VAT Validator (VIES): Verify & Bulk-Check VAT IDs
Validates EU VAT numbers against the EU's official VIES registry, returning validity, business name and address, and an official consultation number as audit evidence - use before zero-rating an intra-EU B2B invoice or to clean a customer VAT list; $0.005 per number checked.
Pricing
from $5.00 / 1,000 vat number validateds
Rating
0.0
(0)
Developer
Howth Technology Factory
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Validate EU and Northern Ireland VAT numbers against the European Commission's official VIES service and get back a definite answer per number: valid, invalid, or temporarily unavailable. Every valid result can carry an official consultation number, which is the evidence a tax auditor asks for when you zero-rate an intra-EU invoice.
1. Why use EU VAT Validator
Checking a VAT number by hand means opening the Commission's VIES web form, typing the number, reading the result, and copying the trader name back into your system. For one supplier that is a minute. For a customer list before a VAT return, it is an afternoon, and the form has no bulk mode.
The bigger problem is what happens when VIES is briefly down. A member state's system going offline for ten minutes is routine. A naive check treats that outage as "not valid" and a valid customer gets billed with VAT they should not have paid, or an invoice gets blocked. The distinction between invalid and unavailable is the difference between a decision and a retry.
This Actor makes that distinction explicit, validates a whole list in one run, and returns the consultation number that proves you checked.
2. Key features
- Official VIES source. Queries the European Commission's VAT Information Exchange System directly. No cached mirror, no third-party copy.
- Three-state results. Every number returns valid, invalid, or a typed error, so a service outage never masquerades as a failed check.
- Consultation numbers. Supply your own VAT number as
requesterVatand each valid result carries the official consultation reference for your audit file. - Bulk validation. Pass a whole column of VAT numbers in one run.
- Messy input tolerance. Spaces, dots and mixed case are normalised before the lookup.
- Northern Ireland (XI) support alongside the 27 member states.
- Bounded retries. Transient upstream failures are retried up to 4 times before being reported as unavailable rather than invalid.
- Nothing retained. Results go to your dataset; nothing is stored beyond the run.
3. Who it's for
For finance teams. Before filing a VAT return, paste the customer VAT column in and get back a per-row valid/invalid/unavailable verdict with the trader name VIES holds, so a zero-rated intra-EU sale is defensible if the return is queried.
For accountants. Run a client's supplier ledger through once a quarter and catch the numbers that have been deregistered since onboarding — the ones that will fail an audit two years from now, not today.
For operations. Clean a newly-acquired customer list before it enters the billing system, so bad VAT numbers are fixed at import instead of surfacing as failed invoices.
For developers and AI agents. Call it as one step in an onboarding flow: submit the number, branch on the three states, and only escalate to a human when VIES reports the number invalid.
4. How to use it
- Open the Actor and click Try for free.
- Put your VAT numbers in the VAT numbers field, one per line, each starting with its two-letter country code (
IE6388047V,DE811907980). - Optionally add your own VAT number in Requester VAT to receive consultation numbers.
- Click Start.
- When the run finishes, open the Output tab. Export as JSON, CSV or Excel.
5. Input parameters
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
vatNumbers | array of strings | Yes | ["IE6388047V","IE8256796U"] | VAT numbers to validate, each prefixed with its 2-letter country code. Spaces and punctuation are tolerated. |
requesterVat | string | No | — | Your own EU VAT number, with country prefix. When set, every valid result includes an official consultation number. |
6. Output
A real result, from a live run:
{"vatNumber": "IE6388047V","countryCode": "IE","valid": true,"businessName": "GOOGLE IRELAND LIMITED","address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4","consultationNumber": "WAPIAAAAZ-tXsCjL","checkedAt": "2026-07-29T10:14:56.085Z"}
A number that VIES rejects returns "valid": false with businessName and address null. A number that could not be checked returns "valid": null and an error field describing why — this is the case you retry, not the case you reject.
Note that error is omitted entirely on a successful check rather than set to null, so test for its presence, not its value.
7. Output fields
| Field | Meaning |
|---|---|
vatNumber | The number as submitted, after normalisation. |
valid | true, false, or null when VIES could not be reached. |
businessName | Registered trader name as held by the member state, when disclosed. |
address | Registered address, when the member state discloses it. |
countryCode | The two-letter prefix parsed from the number. |
consultationNumber | Official reference proving the check occurred. Present only when requesterVat was supplied and the number is valid. |
checkedAt | ISO timestamp of the lookup. |
error | Typed reason the check could not complete. Present only on a failed check — absent from successful rows. |
Some member states do not disclose trader name and address. A blank businessName on a valid number is the member state's policy, not a failure.
8. How it works
Each number is normalised — whitespace and punctuation stripped, case raised, country prefix split off — then submitted to VIES. Lookups run at a concurrency of 3, deliberately modest: VIES is a shared public service and hammering it gets an IP throttled, which would degrade every subsequent check.
A failed lookup is retried up to 4 times with backoff. Only after those attempts is the number reported as unavailable. This is why a transient member-state outage produces valid: null rather than valid: false.
9. API & MCP usage
cURL
curl -X POST "https://api.apify.com/v2/acts/apifmcpfactory~eu-vat-validator/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"vatNumbers":["IE6388047V","DE811907980"],"requesterVat":"IE8256796U"}'
As an Apify MCP tool. This Actor is callable directly by AI agents such as Claude and Cursor. Usage bills through your own Apify account.
https://mcp.apify.com?tools=apifmcpfactory/eu-vat-validator
Claude Desktop (claude_desktop_config.json):
{"mcpServers": {"eu-vat-validator": {"command": "npx","args": ["mcp-remote","https://mcp.apify.com?tools=apifmcpfactory/eu-vat-validator","--header","Authorization: Bearer YOUR_APIFY_TOKEN"]}}}
As an MCP tool. The same validation is available as a hosted MCP server for AI agents, with validate_vat for a single number, bulk_check_vat for up to 100, and check_vies_status to see which member states are currently online. See the product page for that endpoint.
10. Pricing
$0.005 per VAT number checked, billed per number written to the dataset. Numbers that are empty or malformed are not charged.
A 1,000-number supplier list therefore costs $5.00 and replaces roughly a day of manual form entry.
11. Limits & performance
| Memory | 256 MB |
| Concurrency | 3 simultaneous VIES lookups |
| Retries | Up to 4 attempts per number |
| Throughput | Governed by VIES response time, typically a few numbers per second |
12. Limitations
- VIES availability is outside our control. Individual member states take their systems offline without notice. The Actor reports this honestly rather than guessing.
- Existence, not entitlement. A valid result confirms the number is registered for intra-EU trade. It does not confirm the trader is entitled to any particular VAT treatment on your transaction.
- Name and address disclosure varies by member state. Some return nothing but a validity flag.
- Consultation numbers require
requesterVat. Without your own VAT number, VIES issues no reference. - EU and XI only. Non-EU VAT and GST numbers are out of scope.
- Not tax advice. A validation result is an input to your VAT determination, not the determination itself.
13. FAQ
What is VIES? The VAT Information Exchange System, the European Commission's official service for confirming that a VAT number is registered for intra-EU trade.
Can I check VAT numbers in bulk? Yes. Pass the whole list in vatNumbers; there is no separate bulk mode to configure.
What is a consultation number and do I need one? It is an official reference proving you checked a number on a given date. Tax authorities may ask for it when you zero-rate an intra-EU supply. Supply requesterVat to receive one.
Why did a number come back with valid: null? VIES could not be reached for that member state after 4 attempts. Retry later — this is explicitly not a statement that the number is invalid.
Does this validate UK VAT numbers? Northern Ireland numbers with the XI prefix, yes. Great Britain GB numbers are not in VIES and are out of scope.
Why is the trader name blank on a valid number? That member state does not disclose name and address through VIES.
Is my data stored? No. Results are written to your own dataset and nothing is retained beyond the run.