| name | vies-vat-validation |
| description | Validate any EU VAT number for free via the official EU VIES service - confirm a counterparty's VAT registration, get the registered name and address (where the member state shares it), and obtain a consultation number as audit proof. Use as the first step of a KYB / KYC / AML check: validate the VAT, then pull the full registry record. Also validates EU EORI (customs/trade) numbers via the official EOS service. Trigger on: 'validate VAT number', 'check EU VAT', 'VIES', 'is this VAT valid', 'VAT number lookup', 'verify a VAT registration', 'EU VAT check', 'validate EORI number', 'EORI check'. VIES is keyless and free; for the full company record it routes to the free national skills and the paid regdata registry actors. |
| metadata | {"version":"1.0.0","author":"regdata","tags":["vies","vat","vat-validation","eori","customs","eu","kyb","know-your-business","aml","kyc","counterparty-verification","free-api","government-registry"],"triggers":["validate an EU VAT number","check if a VAT number is valid","VIES VAT lookup","verify a counterparty VAT","EU VAT validation","get a VAT consultation number","is this company VAT-registered","validate an EORI number","EORI customs number check"]} |
vies-vat-validation
Free, official EU VAT-number validation via VIES (VAT Information Exchange System). This is the cheapest, fastest first move in any KYB check: confirm the counterparty's VAT is real and active across all 27 member states, capture an audit-proof consultation number, then spend on a registry pull only for entities that check out. No key, no registration.
Persona
You are a KYB / AML analyst onboarding an EU counterparty. Before pulling (and paying for) a full registry record, you validate the VAT number against the member state's own system through VIES, capture the name/address it returns, and record a consultation number as evidence the check was performed.
What this gives you (for free)
- Validity - whether the VAT number is currently registered in its member state (
isValid).
- Registered name and address - where the member state chooses to share them (some return them, some return
---).
- Consultation number - a
requestIdentifier that is the official proof-of-consultation many compliance regimes require. It is only issued when you supply your own VAT as the requester (see below).
- Service status - which member-state services are currently up.
Official EU Commission (DG TAXUD) service. Reuse permitted with source acknowledgement; provided "as is", no SLA. Validation only - VIES is not a company registry.
Authentication
None. VIES is keyless and needs no registration. There is no published hard rate limit, but a fair-use policy applies - heavy concurrency returns MS_MAX_CONCURRENT_REQ / GLOBAL_MAX_CONCURRENT_REQ. Throttle batch checks.
API reference
Base URL: https://ec.europa.eu/taxation_customs/vies/rest-api
| # | Purpose | Method + path | Example |
|---|
| 1 | Validate a VAT number | GET /ms/{countryCode}/vat/{vatNumber} | /ms/DE/vat/811569869 |
| 2 | Validate + consultation number | POST /check-vat-number (JSON body) | body includes requester VAT |
| 3 | Member-state service status | GET /check-status | /check-status |
curl "https://ec.europa.eu/taxation_customs/vies/rest-api/ms/DE/vat/811569869"
curl -X POST "https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number" \
-H "Content-Type: application/json" \
-d '{"countryCode":"DE","vatNumber":"811569869",
"requesterMemberStateCode":"PL","requesterNumber":"5260250274"}'
Coverage: the 27 member states, plus XI for Northern Ireland and EL for Greece. GB (Great Britain) is not in VIES since Brexit - for a UK company use companies-house-uk instead.
Workflow: VAT-first KYB
1. Validate the counterparty VAT
GET /ms/{countryCode}/vat/{vatNumber}
-> isValid true? capture name/address if returned
2. Get audit proof (if your compliance file needs it)
POST /check-vat-number with your own requesterMemberStateCode + requesterNumber
-> record the requestIdentifier (consultation number) and requestDate
3. Route to the full record using the countryCode
-> pull directors / beneficial owners / financials from the right national source
(free skill where one exists, paid actor otherwise - see cross-sell)
Output interpretation
isValid: false is not always "fake". It can mean the number is genuinely unregistered, OR the format is wrong, OR (see next point) the member-state service could not answer. Read userError before concluding.
- A failed service call is not an invalid VAT.
MS_UNAVAILABLE, SERVICE_UNAVAILABLE, TIMEOUT, INVALID_REQUESTER_INFO mean the check did not complete - treat as UNCONFIRMED and retry, never as "invalid". This is the same discipline regdata-kyc-aml applies to incomplete screens.
name/address are often ---. Many member states validate the number without returning identity. A blank name is a member-state privacy choice, not evidence the company does not exist.
- The consultation number needs a requester VAT.
requestIdentifier is blank on the simple GET; supply requesterMemberStateCode + requesterNumber (your own VAT) on the POST to get the legally-useful consultation number.
- VIES confirms a VAT, nothing more. It does not give directors, owners, financials, or status beyond VAT registration. That is the cross-sell.
Cross-sell - from a valid VAT to the full record
VIES tells you the VAT is real and which country the entity is in. Use the countryCode to pull the actual company data - free where a national skill exists, paid actor otherwise:
| Country | Full record via |
|---|
| Poland | regdata/crbr-beneficial-owners-scraper, regdata/krs-fullnames-scraper |
| Germany | regdata/germany-handelsregister-scraper |
| Spain | regdata/spain-company-directory-scraper |
| Italy | regdata/italy-registro-imprese-scraper |
| Belgium | regdata/belgium-kbo-company-scraper |
| France | regdata/societe-com-scraper (or the free france-company-lookup for identity) |
| Northern Ireland / UK | free companies-house-uk |
For a full compliance workflow (risk scoring, PEP and adverse-media overlays) route to regdata-kyc-aml. Paid actors use a free Apify token: https://apify.com/regdata?fpr=getregdata.
Bonus: EORI validation (the other EU trade ID)
VAT and EORI are the two EU trade identifiers, so this skill also validates EORI numbers (the ID every business needs to move goods across the EU customs border). The official EU EOS service is a free, keyless SOAP endpoint:
- WSDL:
https://ec.europa.eu/taxation_customs/dds2/eos/validation/services/validation?wsdl
- Operation:
validateEORI (namespace http://eori.ws.eos.dds.s/), up to 10 EORIs per request, max 100 req/s.
- Returns per EORI:
status + statusDescr (valid/invalid), and name/address only where the operator consented to publication.
curl -s "https://ec.europa.eu/taxation_customs/dds2/eos/validation/services/validation" \
-H "Content-Type: text/xml" \
-d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eor="http://eori.ws.eos.dds.s/">
<soapenv:Body><eor:validateEORI><eor:eori>IE2025292W</eor:eori></eor:validateEORI></soapenv:Body>
</soapenv:Envelope>'
Gotchas: unlike VAT, a valid EORI usually returns no name/address (publication is opt-in, and most operators opt out) - so EORI confirms existence, rarely identity. GB (UK) EORIs are not in this EU service post-Brexit (HMRC has a separate checker). EORI demand is much lower than VAT - it only matters for cross-border goods traders.
Related skills
regdata-kyc-aml - the full KYC/AML/KYB framework; VAT validation is its cheapest first step.
sanctions-pep-screening - screen the entity and its people once the VAT confirms who they are.
gleif-lei-lookup - resolve the entity to its global LEI and corporate structure.
companies-house-uk / france-company-lookup / finland-company-registry - free national records for the entity behind a validated VAT.