VIES VAT Number Checker — bulk EU VAT validation avatar

VIES VAT Number Checker — bulk EU VAT validation

Pricing

$3.00 / 1,000 vat number checkeds

Go to Apify Store
VIES VAT Number Checker — bulk EU VAT validation

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

fetchlab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

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… or EL… for Greece, XI… for Northern Ireland. Bare numbers get a default country.
  • Format pre-check per country. Malformed numbers are flagged as invalid-format without 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, so unavailable never gets confused with invalid.
  • 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

FieldDescription
vatNumbersList of VAT numbers with country prefix, one per line.
defaultCountryOptional country code assumed for numbers typed without prefix.
requesterVatNumberOptional. Your own VAT number; enables consultation numbers on valid results.
skipViesForInvalidFormatSkip the VIES call for numbers that fail the format check (default on).
concurrencyParallel requests, 1–5. Some member states (Belgium, for example) throttle concurrent requests; the default of 1 is safe.
delayMsPause 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 uses XI.
  • 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 unavailable rather than guessing.

Peppol Directory Lookup — is this company reachable on Peppol? · Peppol BIS 3.0 Invoice Validator — is this invoice compliant? More tools by fetchlab.