EU VAT Number Validator (VIES) avatar

EU VAT Number Validator (VIES)

Pricing

from $0.90 / 1,000 vat number checks

Go to Apify Store
EU VAT Number Validator (VIES)

EU VAT Number Validator (VIES)

Check EU VAT numbers in batches against the official VIES service. Get validity plus the registered name and address where the member state provides them.

Pricing

from $0.90 / 1,000 vat number checks

Rating

0.0

(0)

Developer

mia.cx

mia.cx

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Security

Limited permissions

Share

Check a list of EU VAT numbers in one run instead of typing them into the VIES web form one at a time. The Actor checks each number against the European Commission's VIES service. You get one row per number with its validity, plus the registered name and address when the member state shares them. UK VAT numbers and other non-EU IDs come back as UNSUPPORTED_COUNTRY rows at no charge. Each answered VAT number costs $0.0009, plus $0.00005 per run start at default memory.

Try it

{ "ids": ["IE6388047V", "DE811907980"] }

An empty input {} checks these same two numbers. An empty ids list fails the run. VIES needs no API key or account.

Use from an agent

Add https://mcp.apify.com?tools=miacx/eu-vat-validator to your MCP client and sign in to Apify. Call the dedicated Actor tool with the input above, then read its completed dataset with get-dataset-items. Or set APIFY_TOKEN to your Apify API token and request JSON rows:

curl --fail-with-body 'https://api.apify.com/v2/actors/miacx~eu-vat-validator/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" -H 'Content-Type: application/json' \
-d '{"ids":["IE6388047V","DE811907980"]}'

What you get

Read status first. On ok, inspect valid. An invalid answer is still a completed, billable check. There is one row per processed input, in input order, including duplicates. Every row has every key. Missing details are null.

This row comes from the recorded Irish VIES fixture, processed with the fixed test clock.

{
"input": "IE6388047V",
"ok": true,
"status": "ok",
"id": "IE6388047V",
"country": "IE",
"registry": "vies",
"valid": true,
"name": "GOOGLE IRELAND LIMITED",
"address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
"reference": null,
"source": "https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number",
"fetchedAt": "2026-10-31T00:00:00.000Z",
"cached": false,
"error": null,
"errorMessage": null
}

id is normalized; input keeps the text you sent. country uses VIES codes, so Greece is EL and Northern Ireland is XI. valid is null on failure. Some member states, Germany among them, withhold names and addresses. Those fields stay null. reference holds the VIES request identifier when you supply your own VAT number as viesRequester. source is the VIES endpoint, without the queried number. fetchedAt records when the last VIES request finished, including failures. Both are null when no request went to VIES. Cached answers keep their original timestamp and reference.

Input

FieldDefaultAccepted input
ids["IE6388047V","DE811907980"]1–10,000 VAT numbers with prefixes for the 27 member states or XI.
viesRequester""Your own EU VAT number with its prefix, to request a VIES reference.
useCachetrueReuse recent VIES answers. False skips cross-run reads and writes; duplicates still share one lookup within the run.

Numbers ignore case, spaces, dots, dashes and slashes, and GR becomes EL. A number without a two-letter prefix, or with fewer than 2 or more than 12 characters after it, returns INVALID_FORMAT before any VIES request. An empty or null viesRequester means no requester. A malformed or rejected requester returns INVALID_REQUESTER instead of an answer.

Pricing

A VAT number check (tax-id-check) costs $0.0009 per unique normalized number VIES answers within one run. Valid, invalid and cached answers count. Errors, unsupported prefixes and repeated numbers incur no result events. Duplicates keep their own dataset rows, so the row count can exceed the number of charged checks.

1,000 answered numbers cost $0.90005, including the $0.00005 run start at default 256 MB memory. The start charge applies even with no billable checks. Apify counts one start event per GB, with a minimum of one. The Actor stops at the first input needing a new lookup beyond your spending limit. Later inputs get no rows.

Limits and data freshness

  • At most 10,000 numbers per run, four VIES lookups in flight, a ten-second request timeout and 256 KiB per VIES response.
  • Network failures, timeouts, HTTP 429 and 5xx responses and VIES concurrency limits get up to two retries.
  • A Retry-After longer than ten seconds fails the row at once instead of waiting.
  • When VIES reports a member state down, other numbers from that state fail for 30 seconds. Other states continue.
  • Valid answers are reused for 24 hours and invalid answers for one hour. Errors never enter the cross-run cache.

The named store taxid-check-cache in the running account keeps up to 10,000 unexpired answers when saved. Expiry limits reuse; the last saved record stays until overwritten or deleted. Set useCache: false for fresh lookups. It does not delete earlier cache records. cached marks a cross-run cache hit. Duplicate rows reuse the first answer's cache flag.

The synchronous API waits up to 300 seconds. Use asynchronous runs for longer batches.

If a row fails

StatusNext step
INVALID_FORMATCheck the prefix and number. VIES also returns this for numbers it cannot parse.
UNSUPPORTED_COUNTRYUse an EU member state or XI prefix. VIES does not cover UK VAT or other countries.
INVALID_REQUESTERCorrect viesRequester or leave it empty.
RATE_LIMITED, REGISTRY_UNAVAILABLE, UPSTREAM_TIMEOUTRetry later, or run fewer batches at once.
AUTH_FAILEDVIES blocked the request. Retry later.
UPSTREAM_ERRORRead errorMessage for a network or response-format failure.

A failed row has ok: false, valid: null and matching status and error codes. It does not mean the VAT number is invalid.