EU VIES logo

Leads & companies · Live on Apify

Bulk EU VAT number validator with VIES

Paste a list of EU VAT numbers. Each one is checked with the official VIES service. You get valid or invalid, and the company name when the country shares it.

About $1.90 for 1,000 VAT numbers$0.0019 per VAT number + $0.0007 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: IE6388047V in VAT numbers. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Check a list of EU VAT numbers against the European Commission's VIES service and get one row per number: valid or invalid, the registered company name and address when the country shares them, and an honest status when a country's database is down. No login, no API key.

Good for

  • Check customer VAT numbers before you send an invoice without VAT (EU reverse charge).
  • Clean a CRM or lead list: mark invalid numbers and fill in the registered company name.
  • Re-check a supplier list and keep the VIES consultation number as proof of the check.

Not a good fit

  • UK (GB) numbers are not checked. They left VIES in 2021, and the UK HMRC API needs registered API credentials. They get status: "unsupported_country". Northern Ireland traders (XI prefix) are checked through VIES.
  • Non-EU numbers (Norway, Switzerland, US and others) get unsupported_country.
  • You cannot search by company name. VIES only checks a number.
  • Some countries (for example Germany and Spain) do not share the name and address. Then name and address are null even when the number is valid.
  • This is a one-time check of a list. There is no monitoring mode and no history.

Who uses it

Finance and billing teams

Check customers before a reverse-charge invoice.

CRM owners

Mark bad VAT numbers and add official company names.

Procurement teams

Re-check supplier VAT numbers every month.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.0007Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
VAT number checked$0.0019 (from $0.0016 on paid Apify plans)One unique VAT number that received a VIES verdict (valid or invalid). Unavailable countries, format errors, unsupported countries and not-checked numbers have no check fee.
Result row$0.00002One result row saved to the dataset, for any status.

Examples

  • One VAT number: about $0.0026.
  • 1,000 VAT numbers: about $1.90.
  • Every day 100 VAT numbers, for 30 days: about $5.72 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,600 VAT numbers.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Can I check UK VAT numbers?

Not GB numbers. They left VIES in 2021. XI numbers work.

Is unavailable the same as invalid?

No. The country did not answer. Run it later. There is no check fee.

Why is the company name empty?

Some countries, like Germany and Spain, do not share name and address.

Do I need a login?

No. VIES is a public EU service. You only need an Apify account.

Do I need a login or an API key?

No. VIES is a public service of the European Commission. You only need an Apify account to run the Actor.

Is a service_unavailable number invalid?

No. It means the country did not answer. Run it again later. You do not pay the check fee for it.

How fresh is the data?

Each check is a live VIES request at run time. requestDate shows the time of the VIES answer. The Actor does not cache results.

Is the result legal proof?

When you add your own VAT number in requesterVat, VIES returns a consultation number. It is the VIES record that you checked this number on that date. Whether it is enough proof for your tax office is a question for your tax adviser.

Details

Step by step on Apify
  1. Open the Input tab.
  2. Add your numbers to VAT numbers (vatNumbers), one per line, with the two-letter country prefix. The form is prefilled with 5 public company numbers and one number with a wrong format (DE12).
  3. Optional: add your own EU VAT number in requesterVat to get a consultation number for each valid check.
  4. Click Start.
  5. Open the Output tab. The Results view shows status, valid, name and address for each number.
Use cases
TaskInputKey fieldsNext step
Check a customer before a reverse-charge invoicevatNumbers + requesterVatstatus, valid, consultationNumber, requestDateSave the consultation number with the invoice
Clean a CRM or lead listvatNumbers (export from CRM)status, name, addressExport CSV and update the CRM
Re-check suppliers every monthvatNumbers in a saved taskstatus, errorCodeSchedule the task; follow up on invalid rows
Tips for better results
  • Add your own VAT number to get a consultation number as a record.
  • Keep retry on. Busy countries get a few more tries.
  • Use XI for Northern Ireland. GB numbers are not in VIES.
Limits and good to know
  • Up to 1,000 numbers per run. Split bigger lists into several runs
  • Speed: about 100 numbers per minute when the list has many countries (1,000 numbers from 12 countries took about 4.5 minutes in our test). The Actor sends only one request at a time to each country, because VIES limits parallel requests per country. So a list from one country is slower: 194 German numbers took about 1.5 minutes in our test. A very long list from one slow country may not finish within the 900-second timeout; the rest is then marked not_checked (no check fee) — split such lists or raise the timeout
  • Default run options: 256 MB memory, 900-second timeout. More memory does not make the run faster
  • If the run time limit is close, the Actor stops sending numbers 20 seconds before it and marks the rest as not_checked
  • If VIES gives no verdict at all for 2 minutes (only "busy" or "unavailable" answers), the Actor stops early with reason: "VIES_NOT_RESPONDING" instead of waiting until the timeout. Run the list again later

For developers

Sample result

One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.

one result · JSON
[
  {
    "input": "IE6388047V",
    "countryCode": "IE",
    "vatNumber": "6388047V",
    "fullVatNumber": "IE6388047V",
    "status": "valid",
    "valid": true,
    "name": "GOOGLE IRELAND LIMITED",
    "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
    "requestDate": "2026-10-13T16:13:43.268Z",
    "consultationNumber": null,
    "errorCode": null,
    "errorMessage": null,
    "attempts": 1,
    "duplicateInputs": 0,
    "source": "EU VIES (European Commission)",
    "sourceUrl": "https://ec.europa.eu/taxation_customs/vies/",
    "checkedAt": "2026-10-13T16:13:43.314Z"
  },
  {
    "input": "DE12",
    "countryCode": "DE",
    "vatNumber": "12",
    "fullVatNumber": "DE12",
    "status": "format_error",
    "valid": null,
    "name": null,
    "address": null,
    "requestDate": null,
    "consultationNumber": null,
    "errorCode": "FORMAT_ERROR",
    "errorMessage": "Does not match the DE VAT number format.",
    "attempts": 0,
    "duplicateInputs": 0,
    "source": "EU VIES (European Commission)",
    "sourceUrl": "https://ec.europa.eu/taxation_customs/vies/",
    "checkedAt": "2026-10-13T16:13:42.494Z"
  }
]

Use it from code

Actor ID: cliqtomedia/vat-number-validator. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/vat-number-validator").call(run_input={
    "vatNumbers": [
        "IE6388047V",
        "LU20260743",
        "NL810433941B01",
        "DE143454214",
        "ATU33803701",
        "DE12"
    ],
    "retryUnavailable": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~vat-number-validator/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vatNumbers": ["IE6388047V", "LU20260743", "NL810433941B01", "DE143454214", "ATU33803701", "DE12"], "retryUnavailable": true}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/vat-number-validator")
result = tool.invoke({"run_input": {"vatNumbers": ["IE6388047V", "LU20260743", "NL810433941B01", "DE143454214", "ATU33803701", "DE12"], "retryUnavailable": True}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (17)
FieldTypeMeaning
inputstringVAT number exactly as provided.
countryCodestringVIES country code (EL for Greece, XI for Northern Ireland).
vatNumberstringNumber without the country prefix and separators.
fullVatNumberstringCountry code + number, normalised.
statusstringvalid / invalid come from VIES; service_unavailable means the member state could not answer (NOT invalid).
validbooleanVIES verdict; null when VIES gave no verdict.
namestringRegistered trader name; null when the member state does not disclose it.
addressstringRegistered address on one line; null when not disclosed.
requestDatestringVIES request timestamp.
consultationNumberstringOfficial VIES consultation number (only with requesterVat).
errorCodestringVIES error code (e.g. MS_UNAVAILABLE) or FORMAT_ERROR / UNSUPPORTED_COUNTRY / CHARGE_LIMIT.
errorMessagestringPlain-language explanation.
attemptsintegerVIES requests made for this number.
duplicateInputsintegerHow many more times the same number appeared in the input.
sourcestring
sourceUrlstring
checkedAtstringWhen this row was produced (ISO 8601).
Input settings (3)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
VAT numbers requiredvatNumbersarray["IE6388047V", "LU20260743", "NL810433941B01", "DE143454214", "ATU33803701", "DE12"]
Your own EU VAT number (optional)requesterVatstring
Retry unavailable countriesretryUnavailablebooleantrue

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure