EU VAT Number Validator (VIES)
Pricing
from $2.00 / 1,000 vat validateds
EU VAT Number Validator (VIES)
Bulk validate EU VAT numbers via the official VIES API. Returns company name, address, and validity for all 27 EU countries plus Northern Ireland. Auto-retries on rate limits. Export to CSV, JSON, Excel.
Pricing
from $2.00 / 1,000 vat validateds
Rating
0.0
(0)
Developer

ryan clinton
Actor stats
0
Bookmarked
4
Total users
0
Monthly active users
2 hours ago
Last modified
Categories
Share
EU VAT Number Validator -- Bulk verify EU VAT registrations via official VIES
EU VAT Number Validator is an Apify actor that bulk-validates European Union VAT identification numbers through the official VIES (VAT Information Exchange System) REST API operated by the European Commission. Submit one or thousands of VAT numbers, and the actor returns a structured dataset confirming whether each number is currently registered and valid, along with the company name and address when available from the member state.
The actor supports all 27 EU member states plus Northern Ireland (XI prefix, post-Brexit). It handles the VIES service's rate limiting automatically with built-in delays and exponential-backoff retries, so you get reliable results even when individual country nodes are temporarily overloaded. No API key is required -- the actor calls the same free, public VIES endpoint that powers the European Commission's own web portal at ec.europa.eu/taxation_customs/vies.
Whether you are verifying a new supplier before issuing a zero-rated intra-community invoice, running quarterly compliance checks on your customer database, or building automated KYC pipelines, this actor gives you direct access to the authoritative EU VAT registry used by tax authorities across Europe -- all in a clean, export-ready format.
Why use EU VAT Number Validator?
- Official source of truth -- queries the European Commission's VIES REST API directly, the same backend used by national tax authorities across all EU member states.
- Bulk processing -- validate hundreds or thousands of VAT numbers in a single run instead of entering them one by one on the EU portal.
- Zero configuration -- no API keys, no accounts, no registration. The actor uses the free public VIES endpoint out of the box.
- Automation-ready -- trigger runs via API, schedule recurring validations, or integrate into existing workflows using webhooks, Zapier, Make, or n8n.
- Built-in reliability -- automatic retry with exponential backoff for VIES rate limits (MS_MAX_CONCURRENT_REQ) and temporary service outages (MS_UNAVAILABLE, SERVICE_UNAVAILABLE).
- Structured output -- results are delivered as a clean JSON dataset, exportable to CSV, Excel, Google Sheets, or any downstream system via the Apify API.
Key features
- Validates VAT numbers against the official European Commission VIES database in real time
- Covers all 27 EU member states: AT, BE, BG, CY, CZ, DE, DK, EE, EL, ES, FI, FR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK
- Supports Northern Ireland (XI) post-Brexit VAT numbers
- Returns registered company name and business address when provided by the member state
- Flexible input parsing -- automatically strips spaces, dots, and dashes from VAT numbers
- Automatic 1.2-second delay between requests to respect VIES rate limits
- Exponential backoff retry logic (up to 3 retries) for rate limiting and service unavailability errors
- Clear, machine-readable error codes for every failure scenario (INVALID_FORMAT, MS_UNAVAILABLE, NETWORK_ERROR)
- Option to exclude company name and address from results for privacy-sensitive workflows
- Lightweight 256 MB memory footprint -- runs on Apify free tier with minimal compute cost
How to use
Using Apify Console
- Go to the EU VAT Number Validator page on Apify Store.
- Click Try for free to open the actor in Apify Console.
- In the Input tab, add one or more VAT numbers to the VAT Numbers list. Use the format: 2-letter country code followed by the number (e.g.,
DE129273398,FR40303265045). - Optionally uncheck Include Address if you only need the validity check without company details.
- Click Start to run the actor.
- When the run finishes, go to the Dataset tab to view, download, or export your results.
Using the Apify API with Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ryanclinton/eu-vat-validator").call(run_input={"vatNumbers": ["DE129273398","FR40303265045","NL123456789B01","IT00950501007"],"includeAddress": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():status = "VALID" if item["valid"] else "INVALID"print(f"{item['vatNumber']}: {status} -- {item.get('name', 'N/A')}")
Using the Apify API with JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('ryanclinton/eu-vat-validator').call({vatNumbers: ['DE129273398', 'FR40303265045', 'NL123456789B01', 'IT00950501007'],includeAddress: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
vatNumbers | Array of strings | Yes | -- | List of EU VAT numbers to validate. Each must start with a 2-letter country code followed by the number (e.g., DE129273398, FR40303265045). Spaces, dots, and dashes are stripped automatically. |
includeAddress | Boolean | No | true | Whether to include the registered company name and address in results. Set to false if you only need the validity status. |
Input JSON example
{"vatNumbers": ["DE129273398","FR40303265045","NL123456789B01","IT00950501007","ES A28015865","XI 123456789"],"includeAddress": true}
Tips:
- Always include the 2-letter country code prefix. Use
DE129273398, not just129273398. - Greece uses
ELas its VIES country code, notGR. Example:EL123456789. - Northern Ireland uses
XI, notGB. Standard UK VAT numbers are not supported post-Brexit. - Formatting is flexible:
DE 129.273.398,DE-129-273-398, andDE129273398all resolve to the same number.
Output
Each run produces a dataset with one record per VAT number. Here is a realistic example:
[{"vatNumber": "DE129273398","countryCode": "DE","number": "129273398","valid": true,"name": "SAP SE","address": "DIETMAR-HOPP-ALLEE 16, 69190 WALLDORF","requestDate": "2026-02-19T10:22:14.000+01:00"},{"vatNumber": "FR40303265045","countryCode": "FR","number": "40303265045","valid": true,"name": "TOTAL ENERGIES SE","address": "2 PLACE JEAN MILLIER\nLA DEFENSE 6\n92400 COURBEVOIE","requestDate": "2026-02-19T10:22:16.000+01:00"},{"vatNumber": "NL000000000B00","countryCode": "NL","number": "000000000B00","valid": false,"name": null,"address": null,"requestDate": "2026-02-19T10:22:18.000+01:00"},{"vatNumber": "INVALID","countryCode": "","number": "","valid": false,"name": null,"address": null,"requestDate": "2026-02-19T10:22:18.000Z","error": "INVALID_FORMAT"}]
Output fields
| Field | Type | Description |
|---|---|---|
vatNumber | String | Full VAT number as processed (country code + number) |
countryCode | String | 2-letter EU country code (e.g., DE, FR, NL, XI) |
number | String | Numeric portion of the VAT number without the country code prefix |
valid | Boolean | Whether the VAT number is currently registered and active in VIES |
name | String or null | Registered company or trader name. Null if unavailable or includeAddress is false |
address | String or null | Registered business address. Null if unavailable or includeAddress is false |
requestDate | String | ISO 8601 timestamp of when the VIES validation was performed |
error | String (optional) | Error code if validation could not complete (INVALID_FORMAT, MS_UNAVAILABLE, MS_MAX_CONCURRENT_REQ, SERVICE_UNAVAILABLE, NETWORK_ERROR) |
Use cases
- Invoice compliance -- verify that your customer or supplier holds a valid EU VAT number before issuing zero-rated intra-community invoices under EU VAT Directive Article 138.
- Supplier onboarding -- automatically validate VAT registrations as part of your vendor due diligence and procurement workflow.
- KYC and AML checks -- cross-reference VAT registration data with company identity information to verify legitimate business entities.
- Database hygiene -- run bulk validation against your CRM or ERP customer database to flag deregistered, expired, or incorrectly recorded VAT numbers.
- E-commerce tax automation -- validate buyer VAT numbers in real time to determine whether to charge VAT on B2B cross-border sales within the EU.
- Accounting audit preparation -- generate timestamped validation records to demonstrate due diligence during VAT audits.
- M&A due diligence -- verify VAT registrations of acquisition targets and their subsidiaries across multiple EU jurisdictions.
- Periodic compliance monitoring -- schedule monthly or quarterly validation runs to catch VAT deregistrations in your customer or partner base.
- Trade compliance -- validate trading partner VAT numbers alongside sanctions screening and entity verification for cross-border supply chains.
- API integration -- embed VAT validation into custom applications, ERPs, or automated onboarding flows via the Apify API.
API and integration
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("ryanclinton/eu-vat-validator").call(run_input={"vatNumbers": ["DE129273398", "FR40303265045"],"includeAddress": True,})dataset = client.dataset(run["defaultDatasetId"])for item in dataset.iterate_items():print(f"{item['vatNumber']}: valid={item['valid']}, name={item.get('name')}")
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('ryanclinton/eu-vat-validator').call({vatNumbers: ['DE129273398', 'FR40303265045'],includeAddress: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach(item => {console.log(`${item.vatNumber}: valid=${item.valid}, name=${item.name}`);});
cURL
# Start a runcurl -X POST "https://api.apify.com/v2/acts/rWVbpJW5ejo1eoy7Z/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"vatNumbers": ["DE129273398", "FR40303265045"],"includeAddress": true}'# Fetch results from the default datasetcurl "https://api.apify.com/v2/acts/rWVbpJW5ejo1eoy7Z/runs/last/dataset/items?token=YOUR_API_TOKEN"
Integrations
EU VAT Number Validator connects with the full Apify platform ecosystem:
- Google Sheets -- export results directly to a spreadsheet for team review
- Webhooks -- trigger downstream processing when a validation run completes
- Zapier -- connect VAT validation to 5,000+ apps without code
- Make (Integromat) -- build visual automation workflows with VAT checks
- n8n -- self-hosted workflow automation with Apify integration nodes
- Slack / Email -- receive notifications when invalid VAT numbers are detected
- Apify Schedules -- automate recurring validation runs (daily, weekly, monthly)
How it works
- Input parsing -- the actor reads the
vatNumbersarray from the input and iterates through each entry. - Format cleaning -- each VAT number is stripped of spaces, dots, and dashes, then converted to uppercase. The first two characters are extracted as the country code and the remainder as the number.
- Format validation -- if the cleaned string is fewer than 4 characters or does not start with two letters, the number is flagged as
INVALID_FORMATwithout calling the API. - VIES API call -- for each valid-format number, the actor sends a POST request to the European Commission's VIES REST API with the country code and number as JSON payload.
- Retry logic -- if VIES returns
MS_MAX_CONCURRENT_REQ,SERVICE_UNAVAILABLE, orMS_UNAVAILABLE, the actor waits with exponential backoff (3s, 6s, 9s) and retries up to 3 times. - Response processing -- successful responses are parsed to extract validity status, company name, and address. Placeholder values (
---) are cleaned to null. - Rate limit delay -- a 1.2-second pause is enforced between consecutive API calls to stay within VIES rate limits.
- Dataset push -- all results are pushed to the Apify dataset as structured JSON records.
Pipeline diagram
Input: vatNumbers[]|v+------------------+| Parse & Clean | -- strip spaces/dots/dashes, extract country code+------------------+|v+------------------+| Format Valid? |---NO---> { valid: false, error: "INVALID_FORMAT" }+------------------+|YESv+------------------+ retry (up to 3x)| VIES REST API |<-----------+| POST request | |+------------------+ || |v |+------------------+ || Rate limited / |---YES-----+| Unavailable? |+------------------+|NOv+------------------+| Parse response | -- extract valid, name, address, requestDate+------------------+|v+------------------+| 1.2s delay | -- respect VIES rate limits+------------------+|v+------------------+| Push to dataset |+------------------+
Performance and cost
The actor runs on 256 MB memory. The primary bottleneck is the 1.2-second delay between VIES API calls, not compute power.
| Scenario | VAT Numbers | Estimated Time | Estimated Cost (USD) |
|---|---|---|---|
| Quick check | 1--5 | ~6 seconds | < 0.001 |
| Small batch | 10--50 | 12--60 seconds | < 0.002 |
| Medium batch | 100 | ~2 minutes | ~0.005 |
| Large batch | 500 | ~10 minutes | ~0.015 |
| Bulk validation | 1,000 | ~20 minutes | ~0.03 |
Costs are based on Apify platform compute units at 256 MB memory. The Apify free tier provides 5 USD of monthly credits, which is sufficient for validating thousands of VAT numbers. For scheduled or high-volume workloads, paid plans start at 49 USD/month.
Limitations
- VIES rate limits -- the European Commission enforces rate limits on the VIES API. The actor mitigates this with a 1.2-second delay and retries, but very large batches may still encounter intermittent
MS_MAX_CONCURRENT_REQerrors. - Member state availability -- VIES depends on each EU country's national tax database. Individual country services go offline for scheduled maintenance, especially evenings and weekends. The actor retries, but prolonged outages result in
MS_UNAVAILABLEerrors. - Incomplete name/address data -- not all member states return company name and address through VIES. Germany, for example, confirms validity but may not provide address details. This is a limitation of the national implementation.
- No historical data -- VIES only confirms current registration status. It does not provide historical records of when a VAT number was registered or deregistered.
- UK VAT numbers not supported -- standard GB-prefixed UK VAT numbers are not part of the VIES system since Brexit. Only Northern Ireland (XI) numbers are supported.
- No format validation per country -- the actor verifies that the input starts with a 2-letter code but does not enforce country-specific number formats (e.g., the specific digit count or check digits for each member state). Invalid formats will be caught by the VIES API itself.
- Sequential processing -- VAT numbers are validated one at a time with a delay between each, due to VIES rate limits. Parallel validation is not possible with this API.
Responsible use
- Rate limit compliance -- the actor enforces a 1.2-second delay between requests and respects VIES rate limits. Do not run multiple concurrent instances targeting the same country, as this may trigger stricter rate limiting by the European Commission.
- Data protection -- company names and addresses returned by VIES are publicly available business registration data. However, consider GDPR obligations if you store or process this data as part of profiles linked to natural persons (e.g., sole traders).
- Accurate representation -- do not misrepresent VIES validation results as tax advice or legal certification. The actor confirms registration status at the time of the query; consult a qualified tax professional for compliance decisions.
- Fair use -- the VIES API is a free public service provided by the European Commission for legitimate business purposes. Avoid unnecessary high-frequency querying and re-validate only when business needs require it.
- Timestamped evidence -- each result includes a
requestDatefield from the VIES response. Use this timestamp as evidence of when the validation was performed for audit purposes.
FAQ
Q: Is this using the official EU VIES service?
A: Yes. The actor calls the official VIES REST API at ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number, the same backend that powers the European Commission's VIES web portal. No third-party services or proxies are involved.
Q: Do I need an API key for VIES? A: No. The VIES REST API is a free public service provided by the European Commission. No API key, registration, or authentication is required.
Q: How many VAT numbers can I validate in one run? A: There is no hard limit from the actor side. The practical constraint is the 1.2-second delay between requests -- 1,000 numbers takes roughly 20 minutes. For batches larger than 5,000, consider splitting across multiple runs.
Q: Why does my result show valid: false for a number I know is correct?
A: Common causes: (1) the member state's VIES node is temporarily down -- check the error field for MS_UNAVAILABLE, (2) the company recently deregistered, (3) the VAT number format is incorrect for that country. Re-run later if you see a service error.
Q: Does this work for UK VAT numbers?
A: Standard UK (GB) VAT numbers are not supported since Brexit removed the UK from the VIES system. Northern Ireland VAT numbers with the XI prefix are supported.
Q: Why is the name or address null for a valid VAT number? A: Not all EU member states share company details through VIES. Some countries (notably Germany in certain cases) only confirm validity without disclosing the registered name or address. This is a national policy decision, not an actor limitation.
Q: What does the EL country code mean?
A: EL is the VIES country code for Greece (Ellada). Use EL instead of GR when submitting Greek VAT numbers.
Q: Can I schedule automatic validation runs? A: Yes. Use Apify Schedules to trigger the actor on a recurring basis -- daily, weekly, monthly, or with a custom cron expression. This is ideal for ongoing compliance monitoring of customer or supplier databases.
Q: How do I handle VIES downtime for specific countries?
A: Check the error field in the results. If you see MS_UNAVAILABLE for a particular country, the national tax service is temporarily offline. Collect the failed numbers and re-run them in a few hours. The actor already retries up to 3 times with exponential backoff before reporting the error.
Q: Can I use the results for VAT compliance on invoices? A: The actor provides the same data as the official VIES web portal. Many businesses use VIES validation results as evidence of VAT number verification for zero-rated intra-community supplies under EU VAT Directive Article 138. Consult your tax advisor for jurisdiction-specific requirements.
Q: What happens if I submit a non-EU country code?
A: The actor will still attempt the VIES API call, but VIES will return an error since the country is not part of the system. The result will include valid: false with the corresponding error code.
Q: Is the data returned in real time?
A: Yes. Each VAT number is validated against the live VIES database at the time of the request. The requestDate field in the output reflects the exact timestamp of each validation.
Related actors
| Actor | Description |
|---|---|
| UK Companies House Search | Search UK company registrations, directors, and filing history from the official Companies House API. Complements EU VAT validation for UK business partner verification. |
| OpenCorporates Search | Search the world's largest open database of company registrations covering 140+ jurisdictions. Cross-reference company details returned by the VAT validator. |
| GLEIF LEI Lookup | Look up Legal Entity Identifiers (LEI) for corporations and financial institutions. Pairs with VAT validation for financial compliance and KYC workflows. |
| OpenSanctions Search | Screen entities against global sanctions, PEP, and watchlist databases. Combine with VAT validation for comprehensive due diligence and AML checks. |
| OFAC Sanctions Search | Search the US Treasury OFAC sanctions list for blocked persons and entities. Use alongside VAT validation for trade compliance screening. |
| Australia ABN Lookup | Validate Australian Business Numbers (ABN) via the official ABR. The Australian equivalent of EU VAT validation for APAC business partner verification. |