EU VAT Number Validation Scraper (VIES): Company Name & Address avatar

EU VAT Number Validation Scraper (VIES): Company Name & Address

Pricing

from $12.75 / 1,000 results

Go to Apify Store
EU VAT Number Validation Scraper (VIES): Company Name & Address

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

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share

EU VAT Number Validation Scraper (VIES): Company Name & Address

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

Apify Coverage Output Billing

Table of contents

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

FieldTypeRequiredDefaultDescription
vatNumbersstring[]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.
requesterVatNumberstringno(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.
maxChecksintegerno10Maximum number of VAT numbers to validate in one run. Free Apify plans are capped at 10 per run.
withAddressExtractbooleannofalsePaid 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.

FieldTypeDescription
countryCodestringTwo-letter country code of the VAT number.
vatNumberstringThe full VAT number as submitted.
vatNumberLocalstringThe VAT number without the country prefix.
validbooleantrue if VIES confirms the number is currently valid, else false.
userErrorstringVIES status code, for example VALID, INVALID, INVALID_INPUT.
requestDatestringTimestamp VIES recorded for the check.
traderNamestringRegistered company name held by VIES, or null when not disclosed.
traderAddressstringRegistered address string held by VIES, or null when not disclosed.
approxNamestringName returned by an approximate (name/address) match request, else null.
approxStreetstringStreet returned by an approximate match, else null.
approxPostalCodestringPostal code returned by an approximate match, else null.
approxCitystringCity returned by an approximate match, else null.
approxCompanyTypestringCompany type returned by an approximate match, else null.
requestIdentifierstringOfficial VIES consultation number. Present when requesterVatNumber is supplied, else null.
traderNameMatchstringVIES match indicator for a submitted name, else null.
traderStreetMatchstringVIES match indicator for a submitted street, else null.
traderPostalCodeMatchstringVIES match indicator for a submitted postal code, else null.
traderCityMatchstringVIES match indicator for a submitted city, else null.
traderCompanyTypeMatchstringVIES match indicator for a submitted company type, else null.
aiStreetstringStreet parsed from the address. Present only with withAddressExtract.
aiPostalCodestringPostal code parsed from the address. Present only with withAddressExtract.
aiCitystringCity parsed from the address. Present only with withAddressExtract.
aiRegionstringRegion parsed from the address. Present only with withAddressExtract.
aiCountrystringCountry parsed from the address. Present only with withAddressExtract.
aiCompanyTypestringCompany type parsed from the name. Present only with withAddressExtract.
sourcestringAlways EU VIES.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull 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:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "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 (result event). See the pricing tab for the current per-result price.
  • AI add-on billed separately. withAddressExtract charges 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 error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on 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.

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.