EU VAT Number Validation Scraper (VIES): Company Name & Address
Pricing
from $12.75 / 1,000 results
EU VAT Number Validation Scraper (VIES): Company Name & Address
Validate EU VAT numbers against the European Commission VIES service. For each VAT number get the validity flag, request date and, where the member state provides them, the registered company name and address. Export to JSON, CSV or Excel.
Pricing
from $12.75 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
EU VAT Number Validation Scraper (VIES): Company Name & Address
Here is one real result, with every field the actor returns (AI address extraction enabled on this run):
{"countryCode": "FR","vatNumber": "FR40303265045","vatNumberLocal": "40303265045","valid": true,"userError": "VALID","requestDate": "2026-08-14T07:37:29.373Z","traderName": "SA SODIMAS","traderAddress": "11 RUE AMPERE\n26600 PONT DE L ISERE","approxName": null,"approxStreet": null,"approxPostalCode": null,"approxCity": null,"approxCompanyType": null,"requestIdentifier": null,"traderNameMatch": null,"traderStreetMatch": null,"traderPostalCodeMatch": null,"traderCityMatch": null,"traderCompanyTypeMatch": null,"aiStreet": "11 RUE AMPERE","aiPostalCode": "26600","aiCity": "PONT DE L ISERE","aiRegion": null,"aiCountry": "FR","aiCompanyType": "SA","source": "EU VIES","observedAt": "2026-08-14T07:37:29.419Z","error": null}
The most complete EU VAT validation scraper available. It validates any EU (plus Northern Ireland) VAT number against the official VIES service, returns the registered company name and address that VIES holds, can capture the official consultation number that tax authorities accept as audit proof, and optionally parses the raw address into structured fields.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor checks each VAT number you pass against VIES (the EU VAT Information Exchange System), the official validation service run by the European Commission, and writes one normalized record per number to the run's dataset. For a valid number it returns the registered company name and address that VIES holds. If you supply your own VAT number, each check also returns the official consultation number (requestIdentifier), which tax authorities accept as dated proof that you verified the counterparty. Missing source values are returned as null and never invented.
Coverage spans all EU member states plus Greece (EL/GR) and Northern Ireland (XI). An optional paid AI add-on parses the raw registered-address string into structured street, postal code, city, region, country and company-type fields.
Quickstart
Open the actor, paste this into the input, and press Run. It validates five VAT numbers across different member states.
{"vatNumbers": ["IE6388047V", "LU26375245", "DE811193231", "ES A28015865", "FR40303265045"],"maxChecks": 10}
Set requesterVatNumber to your own VAT number to also receive the official consultation number for each check. Free plans validate up to 10 numbers per run.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
vatNumbers | string[] | yes | (5 samples) | EU VAT numbers to validate, each with its two-letter country prefix, for example DE811193231, IE6388047V, LU26375245. Greece is EL or GR; Northern Ireland is XI. |
requesterVatNumber | string | no | (empty) | Your own EU VAT number. When set, each validation also returns an official consultation number (requestIdentifier), the audit-grade proof accepted by tax authorities that you checked the counterparty on this date. |
maxChecks | integer | no | 10 | Maximum number of VAT numbers to validate in one run. Free Apify plans are capped at 10 per run. |
withAddressExtract | boolean | no | false | Paid AI add-on. Parses each valid company's raw VIES address into structured fields (aiStreet, aiPostalCode, aiCity, aiRegion, aiCountry, aiCompanyType). Billed per address parsed. Requires a paid Apify plan. |
Output reference
One dataset item per VAT number checked. Types: string, boolean, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
countryCode | string | Two-letter country code of the VAT number. |
vatNumber | string | The full VAT number as submitted. |
vatNumberLocal | string | The VAT number without the country prefix. |
valid | boolean | true if VIES confirms the number is currently valid, else false. |
userError | string | VIES status code, for example VALID, INVALID, INVALID_INPUT. |
requestDate | string | Timestamp VIES recorded for the check. |
traderName | string | Registered company name held by VIES, or null when not disclosed. |
traderAddress | string | Registered address string held by VIES, or null when not disclosed. |
approxName | string | Name returned by an approximate (name/address) match request, else null. |
approxStreet | string | Street returned by an approximate match, else null. |
approxPostalCode | string | Postal code returned by an approximate match, else null. |
approxCity | string | City returned by an approximate match, else null. |
approxCompanyType | string | Company type returned by an approximate match, else null. |
requestIdentifier | string | Official VIES consultation number. Present when requesterVatNumber is supplied, else null. |
traderNameMatch | string | VIES match indicator for a submitted name, else null. |
traderStreetMatch | string | VIES match indicator for a submitted street, else null. |
traderPostalCodeMatch | string | VIES match indicator for a submitted postal code, else null. |
traderCityMatch | string | VIES match indicator for a submitted city, else null. |
traderCompanyTypeMatch | string | VIES match indicator for a submitted company type, else null. |
aiStreet | string | Street parsed from the address. Present only with withAddressExtract. |
aiPostalCode | string | Postal code parsed from the address. Present only with withAddressExtract. |
aiCity | string | City parsed from the address. Present only with withAddressExtract. |
aiRegion | string | Region parsed from the address. Present only with withAddressExtract. |
aiCountry | string | Country parsed from the address. Present only with withAddressExtract. |
aiCompanyType | string | Company type parsed from the name. Present only with withAddressExtract. |
source | string | Always EU VIES. |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"vatNumbers":["IE6388047V"],"requesterVatNumber":"DE811193231"}), showing the official consultation number:
{"countryCode": "IE","vatNumber": "IE6388047V","vatNumberLocal": "6388047V","valid": true,"userError": "VALID","requestDate": "2026-07-25T13:31:58.916Z","traderName": "GOOGLE IRELAND LIMITED","traderAddress": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4","requestIdentifier": "WAPIAAAAZ-Zebf2u","source": "EU VIES","observedAt": "2026-07-25T13:31:58.972Z","error": null}
Null fields are omitted above for brevity; the values shown are unmodified.
Run via API and CLI
Start a run and wait for it to finish, then read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~eu-vat-vies-validation-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"vatNumbers":["DE811193231","IE6388047V"],"requesterVatNumber":"DE811193231"}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~eu-vat-vies-validation-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"vatNumbers":["FR40303265045","LU26375245"],"maxChecks":10}'
Apify CLI:
apify call scrapers_lat/eu-vat-vies-validation-scraper \--input '{"vatNumbers":["ES A28015865"]}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets. clean=true drops empty and internal fields.
Billing and limits
- Pay per result. You are charged per VAT number checked (
resultevent). See the pricing tab for the current per-result price. - AI add-on billed separately.
withAddressExtractcharges its own event and only when an address is parsed. It requires a paid Apify plan and is disabled for free users. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 numbers per run. Upgrade for higher
maxChecks.
FAQ and troubleshooting
A number came back valid: false. What does that mean?
VIES does not currently recognise that VAT number as active. Check the country prefix and digits. Some member states also return false for numbers that are valid domestically but not enabled for intra-EU trade.
Why is traderName or traderAddress null even though the number is valid?
A few member states do not disclose the name and address through VIES. The number is still confirmed valid; the identity fields are simply not returned.
How do I get audit-grade proof of a check?
Set requesterVatNumber to your own VAT number. VIES then returns a consultation number in requestIdentifier, which tax authorities accept as dated proof that you verified the counterparty.
How do I check Greek or Northern Irish numbers?
Use the EL (or GR) prefix for Greece and XI for Northern Ireland, for example EL094019245 or XI123456789.
Why did a check return INVALID_INPUT or a service error?
VIES depends on each member state's own database, which can be temporarily unavailable. The status code is returned in userError. Re-run the affected numbers later.
Is this an official EU tool? No. This actor is independent and has no affiliation with the European Commission. It queries only the publicly available VIES service. Use it in accordance with the VIES terms of use.
Related scrapers
- EU Sanctions List Scraper: EU consolidated financial sanctions list of persons and entities.
- GLEIF LEI Company Records Scraper: global Legal Entity Identifier records.
- Belgium KBO Companies Scraper: Belgian company register records.
- Germany Company Financials Scraper: German company filings and financials.
- France Company Search Scraper: French company registry records.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US, European and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the European Commission. Queries only the publicly available VIES service. Use in accordance with the VIES terms of use.
