VIES VAT Number Checker — bulk EU VAT validation
Pricing
$3.00 / 1,000 vat number checkeds
VIES VAT Number Checker — bulk EU VAT validation
Validate EU VAT numbers in bulk against the official VIES service. Format pre-check per country, company name and address, consultation number as proof, automatic retries when a member state is down.
Pricing
$3.00 / 1,000 vat number checkeds
Rating
0.0
(0)
Developer
fetchlab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 hours ago
Last modified
Categories
Share
Validate one or thousands of EU VAT numbers against VIES, the European Commission's official VAT Information Exchange System. For each number you get: is it valid, the registered company name and address (where the member state publishes them), and optionally a consultation number — a reference to the VIES consultation when issued.
Built for the boring but mandatory part of intra-EU business: zero-rated B2B invoicing, customer onboarding, supplier master-data cleanup, and e-invoicing (Peppol) readiness checks.
What it does better than calling VIES yourself
- Any input format.
BE0202239951,BE 0202.239.951,be-0202239951,GR…orEL…for Greece,XI…for Northern Ireland. Bare numbers get a default country. - Format pre-check per country. Malformed numbers are flagged as
invalid-formatwithout hitting VIES, which keeps large batches fast and avoids pointless errors. - Retries and rate-limit handling. VIES and the national databases behind it go down or throttle regularly (
MS_UNAVAILABLE,MS_MAX_CONCURRENT_REQ, timeouts). The Actor retries with backoff and reports the member state's availability, sounavailablenever gets confused withinvalid. - Consultation numbers. Give your own VAT number and a check can return a VIES consultation number when the service issues one you can archive as evidence for your tax administration.
- Clean, typed output. One record per number, ready for a spreadsheet, a CRM import, an automation (Make, n8n, Zapier) or an AI agent.
Input
| Field | Description |
|---|---|
vatNumbers | List of VAT numbers with country prefix, one per line. |
defaultCountry | Optional country code assumed for numbers typed without prefix. |
requesterVatNumber | Optional. Your own VAT number; enables consultation numbers on valid results. |
skipViesForInvalidFormat | Skip the VIES call for numbers that fail the format check (default on). |
concurrency | Parallel requests, 1–5. Some member states (Belgium, for example) throttle concurrent requests; the default of 1 is safe. |
delayMs | Pause between calls (default 200 ms). |
Example:
{"vatNumbers": ["BE0202239951", "FR40303265045", "IT00743110157", "DE123456789"],"requesterVatNumber": "BE0202239951"}
Output
{"input": "BE 0202.239.951","normalized": "BE0202239951","countryCode": "BE","country": "Belgium","vatNumber": "0202239951","formatValid": true,"valid": true,"status": "valid","name": "SA DPU PROXIMUS","address": "Boulevard du Roi AlbertII 27\n1030 Schaerbeek","consultationNumber": "WAPIAAAAaCcVvXld","requestDate": "2026-09-13T19:56:01.120Z","memberStateAvailability": "Available","errorCode": null,"errorMessage": null,"checkedAt": "2026-09-13T19:56:01.400Z"}
status is one of valid, invalid, invalid-format, unavailable (VIES or the member state could not answer, retry later) or error. Only valid and invalid are definitive answers from VIES.
Pricing
Pay per event: USD 0.003 per unique normalized VAT number with a definitive VIES answer (valid or invalid). Invalid-format results, unavailable services and technical errors are not charged. Equivalent inputs share one check per run, including when processed concurrently; every input still gets its own row with inputIndex, isDuplicate and duplicateOf. The price per event is unchanged.
Runtime depends on VIES and member-state availability, retries and concurrency; no fixed throughput is guaranteed. A returned consultation number is evidence of the VIES request, not by itself a determination of VAT exemption or tax treatment.
Using it from your code
const run = await client.actor('fetchlab/vies-vat-checker').call({ vatNumbers: ['BE0202239951'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].valid, items[0].name);
run = client.actor("fetchlab/vies-vat-checker").call(run_input={"vatNumbers": ["BE0202239951"]})items = client.dataset(run["defaultDatasetId"]).list_items().items
Works with the Apify API, the Apify MCP server (AI agents can call it as a tool), Make, n8n, Zapier and scheduled runs.
Notes and limits
- VIES answers only "is this number currently registered for VAT", as reported by the member state. Name and address are published by some states and withheld by others (Germany and Spain, for example, return no name).
- Great Britain (
GB) numbers are no longer in VIES since Brexit; Northern Ireland usesXI. - The service is operated by the European Commission and has scheduled and unscheduled downtime per member state. Some states (France in particular) throttle concurrent requests aggressively; the Actor retries up to six times with backoff and otherwise reports
unavailablerather than guessing.
Related
Peppol Directory Lookup — is this company reachable on Peppol? · Peppol BIS 3.0 Invoice Validator — is this invoice compliant? More tools by fetchlab.