EU VAT Number Validator (VIES) & LEI Lookup: Bulk Company Check
Pricing
from $2.00 / 1,000 vat or lei checks
EU VAT Number Validator (VIES) & LEI Lookup: Bulk Company Check
Validate EU VAT numbers in bulk with the official VIES service and look up LEIs in the official GLEIF database: valid or not, registered company name and address, LEI status, renewal date and parent companies. Unavailable answers are retried and never charged.
Pricing
from $2.00 / 1,000 vat or lei checks
Rating
0.0
(0)
Developer
Julian Genuario
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
Check thousands of EU VAT numbers against the official VIES service of the European Commission and look up LEIs (Legal Entity Identifiers) in the official GLEIF database, in one run:
- VAT numbers: valid or not, registered company name and address (when the member state publishes them), the VIES answer code and, if you add your own VAT number, a VIES consultation number you can keep as proof of the check
- LEIs: legal name, other names, legal and headquarters address, jurisdiction, legal form, business-register ID, entity status (ACTIVE / INACTIVE), LEI registration status (ISSUED / LAPSED / RETIRED...), next renewal date, managing LOU, BIC codes, and the direct and ultimate parent company
- Optional: find the LEI of a VAT-registered company (exact legal-name match in the same country)
- VAT numbers and LEIs can be mixed in the same list: each value is recognised automatically (country prefix, format rules per country, LEI check digits)
Only official, public APIs are used (VIES REST API and GLEIF API). No scraping, no API keys.
What does EU VAT Number Validator do?
EU VAT Number Validator checks VAT numbers in bulk against the European Commission's official VIES service and looks up Legal Entity Identifiers (LEI) in the official GLEIF database: valid or not, registered company name and address, LEI status, renewal date and parent companies. Use it for KYB, invoicing and B2B checkout VAT checks.
How to use EU VAT Number Validator
- Click Try for free on this page (a free Apify account is enough to start).
- Fill in the input (see the examples below) or keep the prefilled example.
- Click Start and wait for the run to finish.
- Download the results from the Output tab as JSON, CSV, Excel or HTML, or read them with the Apify API.
- Optional: create a Schedule to run it daily or weekly, and connect a webhook or an integration (Make, Zapier, n8n, Slack).
Use cases
- Invoicing and e-commerce: validate the VAT number of B2B customers before applying the EU reverse charge (0 % VAT), and keep the VIES consultation number as evidence
- KYB / onboarding / compliance: confirm a supplier or customer exists, get its registered name and address, its LEI status and who owns it
- Data cleaning: fix and normalise VAT columns in an ERP or CRM export (spaces, dots, GR instead of EL, Austrian numbers without the U)
- Finance and reporting: check that LEIs of counterparties are still ISSUED (not LAPSED) before regulatory reporting (EMIR, MiFIR, SFTR)
Input
{"identifiers": ["IE6388047V", "FR 40 303 265 045", "DE811569869", "506700GE1G29325QX363"],"includeParents": true,"findLeiForVat": false,"requesterVatNumber": ""}
You can also read the values from an Apify dataset (e.g. the output of another Actor) or a CSV file / Google Sheet by URL: set Field to the column that holds the VAT number or LEI, and Fields to keep to copy columns such as a customer ID into the output.
Output (one row per VAT number or LEI)
{"input": "IE6388047V","type": "vat","status": "valid","isValid": true,"countryCode": "IE","vatNumber": "IE6388047V","lei": null,"name": "GOOGLE IRELAND LIMITED","address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4","viesCode": "VALID","consultationNumber": null,"requestDate": "2026-10-26T22:00:07.665Z","matchedLei": null,"error": null}
{"input": "YYPPRNO5HB304LHFVG31","type": "lei","status": "found","isValid": true,"countryCode": "IE","lei": "YYPPRNO5HB304LHFVG31","name": "GOOGLE IRELAND LIMITED","address": "GORDON HOUSE, BARROW STREET, D04 E5W5 DUBLIN 4, IE","jurisdiction": "IE","entityStatus": "ACTIVE","registrationStatus": "ISSUED","nextRenewalDate": "2027-...","directParent": { "lei": "549300Y7W34DK0WBPY51", "name": "GOOGLE INTERNATIONAL LLC", "country": "US" },"ultimateParent": { "lei": "5493006MHB84DD0ZWV18", "name": "ALPHABET INC.", "country": "US" }}
Every row has the same keys (fields that do not apply are null). Status values:
| status | meaning | charged |
|---|---|---|
valid / invalid | VIES answered: the VAT number is (not) active for intra-EU trade | yes |
found / not_found | the LEI exists (or not) in GLEIF; for found LEIs isValid = registration ISSUED | yes |
invalid_format | wrong format or wrong LEI check digits (no lookup needed) | no |
unsupported_country | not in VIES (UK since 2021 except XI, Switzerland, Norway) | no |
service_unavailable | the country's VAT system or GLEIF did not answer after retries | no |
A RUN_SUMMARY record in the key-value store has counts per status and per country.
Pricing
Pay per event: USD 0.002 per check (USD 2 per 1,000) with a definitive answer (valid, invalid, found, not found). Format errors, unsupported countries, duplicates and unavailable services are free. Your "max charge per run" is respected: the Actor never checks more than you are willing to pay for.
Reliability: how VIES outages are handled
VIES is a gateway to 27 national systems that are sometimes down or overloaded (Germany often answers MS_UNAVAILABLE for some minutes). The Actor:
- reads the VIES status page at the start and tells you which countries are down;
- checks numbers of the same country one at a time, at least 1 second apart (VIES rejects bursts with
MS_MAX_CONCURRENT_REQ); - retries "try later" answers with growing waits (5, 15, 30, 60 s);
- retries what is still unavailable once more at the end of the run;
- returns anything still unanswered as
service_unavailable, not charged, so you can re-run just those.
GLEIF is queried with batches of up to 200 LEIs per call and stays under its limit of 60 calls per minute.
Notes and limits
- Some member states do not publish the name or address of a valid VAT number (e.g. Germany and Spain): the number is still validated,
name/addressstaynull. - VIES confirms that a VAT number is registered for intra-EU transactions; it is not a full company report. Sole traders registered for VAT appear with the name the tax authority publishes.
- UK (GB) numbers are not in VIES since Brexit; Northern Ireland businesses use the XI prefix and are supported.
- Data: VIES (European Commission) and GLEIF (Global LEI data, CC0). This Actor is not affiliated with the European Commission or GLEIF.
Cost examples
Prices at the current pay-per-event rate: USD 2.00 per 1,000 VAT numbers or LEIs with a definitive answer (bad formats, unsupported countries, duplicates and VIES outages are free). You can set a maximum charge per run in the run options.
| Job | Approximate cost |
|---|---|
| Test run: the 3 example identifiers (measured: 8 s) | about $0.006 |
| 500 supplier VAT numbers before an invoice run | about $1.00 |
| 10,000 customer records (VAT and LEI mixed) | about $20.00 |
Use it from your code, an integration or an AI agent
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("latamdatatools/eu-vat-lei-validator").call(run_input={"identifiers": ["IE6388047V","506700GE1G29325QX363","NL123456789B01"],"includeParents": True})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["input"], item["status"], item["name"])
JavaScript / Node.js (npm install apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('latamdatatools/eu-vat-lei-validator').call({identifiers: ['IE6388047V','506700GE1G29325QX363','NL123456789B01'],includeParents: true});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((i) => [i.input, i.status, i.name]));
No code:
- Schedules: save your input as a Task and run it daily or weekly from Apify Console (Schedules).
- Integrations: send the results to Google Sheets, Slack, email, Make, Zapier, n8n or Airbyte from the Integrations tab, or call your own webhook when a run finishes.
- AI agents: add it as a tool in Claude, Cursor, VS Code and other MCP clients through the Apify MCP server (
https://mcp.apify.com), so the agent can check a VAT number or LEI while it works on an order or a supplier.
FAQ
Can I call it from my own code or from an AI agent? Yes. Start runs and fetch results with the Apify API or the JavaScript / Python clients, or use it as a tool from Claude, Cursor and other MCP clients through the Apify MCP server (mcp.apify.com).
Can I run it automatically? Yes. Create a Schedule in Apify Console (for example every morning) and add a webhook or an integration to get the results where you need them.
Which export formats are available? JSON, JSONL, CSV, Excel (XLSX), XML, RSS and HTML table, from the Output tab or the API.
What does it cost? See the Pricing section above. You only pay for the events listed there.