EU VAT Number Validator (VIES) is an Apify actor on ApifyForge. 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. Best for teams who need automated eu vat number validator (vies) data extraction and analysis. Not ideal for use cases requiring real-time streaming data or sub-second latency. Maintenance pulse: 90/100. Last verified March 27, 2026. Built by Ryan Clinton (ryanclinton on Apify).
EU VAT Number Validator (VIES)
EU VAT Number Validator (VIES) is an Apify actor available on ApifyForge. 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.
Best for teams who need automated eu vat number validator (vies) data extraction and analysis.
Not ideal for use cases requiring real-time streaming data or sub-second latency.
What to know
- Results depend on the availability and structure of upstream data sources.
- Large-scale runs may be subject to platform rate limits.
- Requires an Apify account — free tier available with limited monthly usage.
Maintenance Pulse
90/100Documentation
EU VAT Number Validator is an Apify actor that bulk-validates EU VAT numbers through the official VIES REST API operated by the European Commission. It checks whether each VAT number is currently registered, returns the company name and address when available, and processes batches of any size at $0.002 per number validated -- no API key, no subscription, no external accounts required.
EU VAT Number Validator sends each VAT number directly to the European Commission's VIES endpoint at ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number, the same backend used by tax authorities across all 27 EU member states. The actor parses and cleans input automatically (stripping spaces, dots, and dashes), handles VIES rate limiting with exponential-backoff retries, and outputs structured JSON ready for export. Whether you need to verify EU VAT registrations for a single supplier or validate thousands of VAT numbers for quarterly compliance, EU VAT Number Validator returns timestamped results that serve as audit-ready evidence of due diligence.
What it does -- Validates EU VAT numbers against the official VIES database, returns validity status plus registered company name and address Best for -- accountants, finance teams, procurement, KYC/AML compliance, e-commerce tax automation, ERP integration Speed -- 10 VAT numbers in ~3 seconds, 100 in ~25 seconds, 1,000 in ~4 minutes (200ms delay between requests) Pricing -- $0.002 per VAT number validated, pay-per-event, no subscription Output -- JSON/CSV with vatNumber, countryCode, valid, name, address, requestDate, error code
What data can you extract with EU VAT validation?
| Data Point | Source | Example |
|---|---|---|
| VAT Number | Input (cleaned) | FR40303265045 |
| Country Code | Parsed from input | FR |
| Validity Status | VIES API response | true |
| Company Name | VIES member state data | TOTAL ENERGIES SE |
| Registered Address | VIES member state data | 2 PLACE JEAN MILLIER, LA DEFENSE 6, 92400 COURBEVOIE |
| Request Date | VIES API timestamp | 2026-03-30T10:22:16.000+01:00 |
| Error Code | VIES API / actor logic | MS_UNAVAILABLE, INVALID_FORMAT |
| Number (without prefix) | Parsed from input | 40303265045 |
Why use EU VAT Number Validator?
Validating VAT numbers manually on the European Commission's VIES portal means entering them one at a time, waiting for each response, and copy-pasting the results into a spreadsheet. For 50 numbers, that takes over an hour. For 500, it takes a full working day. If a country node is temporarily down, you have to remember to go back and recheck later.
EU VAT Number Validator automates the entire process. Submit your full list, and the actor handles parsing, cleaning, rate limiting, retries, and output formatting. Results arrive in a structured dataset you can download as CSV, push to Google Sheets, or pipe into your ERP via API.
- Scheduling -- run daily, weekly, or monthly to catch VAT deregistrations in your customer or supplier database
- API access -- trigger validation runs from Python, JavaScript, or any HTTP client for real-time integration
- Built-in retries -- automatic exponential backoff handles VIES rate limits and temporary country node outages
- Monitoring -- get Slack or email alerts when validation runs fail or produce unexpected results
- Integrations -- connect to Zapier, Make, Google Sheets, HubSpot, or webhooks for downstream processing
Features
- Official VIES API -- queries the European Commission's production REST endpoint, the same backend national tax authorities use across all EU member states
- All 28 country codes supported -- covers 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, plus XI (Northern Ireland post-Brexit)
- Germany opt-in handling -- Germany's VIES node is chronically unreliable; DE numbers are skipped by default with a clear
COUNTRY_UNRELIABLE_SKIPPEDstatus, and an opt-in checkbox lets you attempt DE validation when needed - Flexible input parsing -- strips spaces, dots, dashes, and normalizes to uppercase before submission (
DE 129.273.398becomesDE129273398) - Exponential backoff retries -- retries up to 3 times with increasing delays (3s, 6s, 9s) when VIES returns
MS_MAX_CONCURRENT_REQorSERVICE_UNAVAILABLE - 200ms request spacing -- enforces a 200-millisecond delay between consecutive API calls to stay within VIES rate limits
- Company name and address -- returns the registered business name and address when the member state provides them, with a toggle to disable for privacy-sensitive workflows
- Clean null handling -- strips VIES placeholder values (
---) and returns proper null values instead of empty strings - Machine-readable error codes -- every failure includes a specific error code:
INVALID_FORMAT,MS_UNAVAILABLE,MS_MAX_CONCURRENT_REQ,SERVICE_UNAVAILABLE,COUNTRY_UNRELIABLE_SKIPPED,NETWORK_ERROR - Pay-per-event pricing -- $0.002 per VAT number validated, with spending limit support to cap costs per run
- Lightweight footprint -- runs on 128-512 MB memory; the bottleneck is VIES response time, not compute
Use cases for EU VAT number validation
Best for invoice compliance and zero-rating verification
Finance teams issuing intra-community invoices under EU VAT Directive Article 138 need to verify that the buyer holds a valid VAT registration before applying zero-rate treatment. EU VAT Number Validator provides timestamped proof of verification that auditors accept as evidence of due diligence. Run it before each invoice batch or schedule weekly checks on your active customer list.
Best for supplier onboarding and procurement
Procurement teams adding new vendors need to confirm VAT registrations during the onboarding process. EU VAT Number Validator checks each supplier's VAT number against the official VIES database and returns the registered company name and address, which you can cross-reference against the supplier's submitted details to flag mismatches.
Best for KYC and AML compliance pipelines
Compliance officers building automated Know Your Customer workflows need to verify that business entities are legitimately registered. EU VAT Number Validator confirms active registration status and returns the official registered name and address, which can feed into entity matching and screening pipelines alongside sanctions checks.
Best for e-commerce B2B tax automation
Online sellers processing B2B orders within the EU need to validate buyer VAT numbers in real time to determine tax treatment. EU VAT Number Validator integrates via API, returning results in under 2 seconds per number so checkout flows stay fast while tax compliance stays accurate.
Best for quarterly compliance audits
Accounting firms running periodic compliance reviews need to re-validate entire client databases to catch deregistered or expired VAT numbers. EU VAT Number Validator processes 1,000 numbers in about 4 minutes. Schedule it monthly or quarterly on Apify to automate the check entirely.
Best for M&A due diligence across EU jurisdictions
Deal teams evaluating acquisition targets with operations across multiple EU countries need to verify VAT registrations for the parent entity and every subsidiary. EU VAT Number Validator accepts mixed-country batches and returns results grouped by entity, saving hours of manual portal lookups.
When to use EU VAT Number Validator
Best for:
- Batch validation of 10-5,000 VAT numbers in a single run
- Scheduled compliance checks on customer or supplier databases (weekly, monthly, quarterly)
- Automated KYC/onboarding pipelines that need programmatic VIES access via API
- Audit preparation requiring timestamped evidence of VAT verification
Not ideal for:
- UK (GB) VAT numbers -- standard GB numbers left the VIES system after Brexit; only Northern Ireland (XI) is supported
- Real-time single-number validation under 100ms -- the VIES API typically responds in 500ms-2s per number; for sub-second needs, cache results locally
- German (DE) VAT numbers requiring guaranteed results -- Germany's VIES node is frequently offline; enable the opt-in flag, but expect intermittent failures
How to validate EU VAT numbers in bulk
- Enter your VAT numbers -- Add them to the VAT Numbers list, one per line. Use the format: 2-letter country code followed by the number (e.g.,
FR40303265045,NL004495445B01). Spaces, dots, and dashes are stripped automatically. - Configure options -- Leave "Include Address" checked (default) to get company names and addresses. If you need to validate German numbers, check "Include unreliable countries (DE)" -- but expect some failures.
- Run the actor -- Click "Start" and wait. 100 numbers complete in about 25 seconds. Large batches of 1,000+ take around 4 minutes.
- Download results -- Go to the Dataset tab. Export as JSON, CSV, or Excel. Each row shows the VAT number, validity status, company name, address, timestamp, and any error codes.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
vatNumbers | Array of strings | Yes | ["NL004495445B01"] | List of EU VAT numbers to validate. Each must start with a 2-letter country code followed by the number. Spaces, dots, and dashes are stripped automatically. |
includeAddress | Boolean | No | true | Include registered company name and address in results. Set to false if you only need validity status. |
includeUnreliableCountries | Boolean | No | false | Attempt validation for Germany (DE), whose VIES node is frequently offline. When disabled, DE numbers are skipped with a COUNTRY_UNRELIABLE_SKIPPED status. |
Input examples
Standard multi-country batch:
{
"vatNumbers": [
"FR40303265045",
"NL004495445B01",
"IE6388047V",
"IT00950501007",
"ES A28015865"
],
"includeAddress": true,
"includeUnreliableCountries": false
}
Validation with German numbers included:
{
"vatNumbers": [
"DE129273398",
"DE811115368",
"FR40303265045"
],
"includeAddress": true,
"includeUnreliableCountries": true
}
Minimal validity-only check:
{
"vatNumbers": ["NL004495445B01"],
"includeAddress": false
}
Input tips
- Always include the country code prefix -- use
DE129273398, not129273398. The actor parses the first two letters as the EU country code. - Use EL for Greece -- the VIES system uses
EL(Ellada), notGR. Greek VAT numbers must use theELprefix. - Use XI for Northern Ireland -- standard UK (
GB) numbers are not supported post-Brexit. Northern Ireland uses theXIprefix. - Batch in one run -- processing 500 numbers in one run is faster and cheaper than 500 individual runs due to startup overhead.
- Skip DE unless you need it -- leave "Include unreliable countries" unchecked unless you specifically need German validation. This avoids wasted time on retries that fail anyway.
Output example
{
"vatNumber": "FR40303265045",
"countryCode": "FR",
"number": "40303265045",
"valid": true,
"name": "TOTAL ENERGIES SE",
"address": "2 PLACE JEAN MILLIER\nLA DEFENSE 6\n92400 COURBEVOIE",
"requestDate": "2026-03-30T10:22:16.000+01:00"
}
{
"vatNumber": "NL000000000B00",
"countryCode": "NL",
"number": "000000000B00",
"valid": false,
"name": null,
"address": null,
"requestDate": "2026-03-30T10:22:18.000+01:00"
}
{
"vatNumber": "DE129273398",
"countryCode": "DE",
"number": "129273398",
"valid": false,
"name": null,
"address": null,
"requestDate": "2026-03-30T14:05:22.000Z",
"error": "COUNTRY_UNRELIABLE_SKIPPED"
}
Output fields
| Field | Type | Description |
|---|---|---|
vatNumber | String | Full VAT number as processed (country code + number) |
countryCode | String | Two-letter EU country code (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, XI) |
number | String | 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 the member state does not share this data 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 or null | Error code if validation failed: INVALID_FORMAT, MS_UNAVAILABLE, MS_MAX_CONCURRENT_REQ, SERVICE_UNAVAILABLE, COUNTRY_UNRELIABLE_SKIPPED, NETWORK_ERROR |
How much does it cost to validate EU VAT numbers?
EU VAT Number Validator uses pay-per-event pricing -- you pay $0.002 per VAT number validated. Platform compute costs are included in this price.
| Scenario | VAT Numbers | Cost per number | Total cost |
|---|---|---|---|
| Quick test | 1 | $0.002 | $0.002 |
| Small batch | 50 | $0.002 | $0.10 |
| Medium batch | 200 | $0.002 | $0.40 |
| Large batch | 1,000 | $0.002 | $2.00 |
| Enterprise | 5,000 | $0.002 | $10.00 |
You can set a maximum spending limit per run to control costs. The actor stops charging when your budget is reached.
Compare this to commercial VAT validation APIs like Vatstack ($0.01-0.05/lookup), VATLayer ($14.99-99.99/month), or Vatlookup.eu ($0.02/query) -- EU VAT Number Validator validates at $0.002/number with no monthly commitment. Most users spend under $2/month. Apify's free tier includes $5 of monthly credits, enough to validate 2,500 VAT numbers at no cost.
How EU VAT Number Validator compares
| Feature | EU VAT Number Validator | Vatstack | VATLayer |
|---|---|---|---|
| Data source | Official VIES REST API | VIES (via proxy) | VIES (via proxy) |
| Company name + address | Yes (when member state provides) | Yes | Yes (paid tiers) |
| Bulk batch processing | Yes (any size) | Yes (API) | Yes (API) |
| Germany handling | Opt-in skip for unreliable DE node | No special handling | No special handling |
| Retry on rate limits | Yes (3x exponential backoff) | Server-side | Server-side |
| Pricing model | Pay per validation ($0.002) | Per lookup ($0.01-0.05) | Monthly subscription ($14.99+) |
| Free tier | 2,500 validations/month (Apify credits) | 100 lookups/month | 100 lookups/month |
| API access | REST + Python + JS SDKs | REST API | REST API |
| Scheduling | Built-in (Apify Schedules) | Not included | Not included |
| Output formats | JSON, CSV, Excel, Google Sheets | JSON | JSON, XML |
| Subscription required | No | No | Yes |
Typical performance
| Metric | Typical value |
|---|---|
| VAT numbers per run | 1-5,000 (no hard limit) |
| Run time (10 numbers) | 3-5 seconds |
| Run time (100 numbers) | 20-30 seconds |
| Run time (1,000 numbers) | 3-5 minutes |
| Name/address return rate | 70-85% of valid numbers (varies by member state) |
| VIES uptime (most countries) | 95-99% during business hours |
| Germany (DE) VIES uptime | 40-60% (frequently offline) |
| Cost per run (typical) | $0.01-$2.00 depending on batch size |
Performance varies based on VIES server load. Evening and weekend hours in Central European Time see more maintenance windows. Based on internal testing across all 28 supported country codes.
Validate EU VAT numbers using the API
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/eu-vat-validator").call(run_input={
"vatNumbers": [
"FR40303265045",
"NL004495445B01",
"IE6388047V",
"IT00950501007"
],
"includeAddress": True,
"includeUnreliableCountries": False,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
status = "VALID" if item["valid"] else "INVALID"
name = item.get("name") or "N/A"
print(f"{item['vatNumber']}: {status} -- {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: [
"FR40303265045",
"NL004495445B01",
"IE6388047V",
"IT00950501007",
],
includeAddress: true,
includeUnreliableCountries: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
const status = item.valid ? "VALID" : "INVALID";
console.log(`${item.vatNumber}: ${status} -- ${item.name || "N/A"}`);
}
cURL
# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~eu-vat-validator/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"vatNumbers": ["FR40303265045", "NL004495445B01", "IE6388047V"],
"includeAddress": true,
"includeUnreliableCountries": false
}'
# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How EU VAT Number Validator works
Input parsing and cleaning
EU VAT Number Validator reads the vatNumbers array from the input and processes each entry sequentially. Each raw VAT string is stripped of spaces, dots, and dashes, then converted to uppercase. The first two characters are extracted as the EU country code, and the remainder becomes the number portion. Strings shorter than 4 characters or lacking a two-letter prefix are flagged as INVALID_FORMAT without calling the VIES API.
Unreliable country filtering
Before making an API call, EU VAT Number Validator checks whether the country code belongs to a known unreliable VIES node. Germany (DE) is currently the only country in this list. When includeUnreliableCountries is false (the default), DE numbers are skipped immediately and returned with the error code COUNTRY_UNRELIABLE_SKIPPED. This prevents wasted time on retries against a node that fails 40-60% of the time.
VIES API validation with retry logic
For each valid-format number, EU VAT Number Validator sends a POST request to the VIES REST API at ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number with the country code and number as a JSON payload. If VIES returns MS_MAX_CONCURRENT_REQ or SERVICE_UNAVAILABLE, the actor retries with exponential backoff -- waiting 3 seconds after the first failure, 6 seconds after the second, and 9 seconds after the third. After 3 failed retries, the error code is recorded in the output. A 200-millisecond delay is enforced between consecutive requests to avoid triggering VIES rate limits.
Response processing and output
Successful VIES responses are parsed to extract the validity boolean, company name, address, and request timestamp. Placeholder values returned by some member states (such as ---) are cleaned to proper null values using the cleanField function. All results -- valid, invalid, and errored -- are pushed to the Apify dataset as structured JSON records. If the actor is running in pay-per-event mode, it charges $0.002 per result after all validations complete.
Tips for best results
-
Start with a small test batch. Validate 5-10 numbers first to confirm your formatting is correct and the countries you need are responding. This costs under $0.02.
-
Schedule recurring checks. VAT registrations change over time -- companies deregister, merge, or relocate. Set up a weekly or monthly Apify Schedule to re-validate your customer database automatically.
-
Handle DE numbers separately. If you have German VAT numbers to validate, run them in a separate batch with
includeUnreliableCountries: true. This way, VIES downtime for Germany does not slow down your other validations. -
Check error codes, not just validity. A
valid: falseresult with anMS_UNAVAILABLEerror means the country node was down, not that the number is invalid. Filter for error codes and re-run those numbers later. -
Use the requestDate for audit trails. Each result includes a VIES-provided timestamp. Store this alongside the validation result as evidence of when you performed the check -- tax auditors expect timestamped proof under Article 138.
-
Combine with entity verification. Pair EU VAT Number Validator with OpenCorporates Search or GLEIF LEI Lookup to cross-reference the company name and address against independent corporate registries.
-
Export directly to Google Sheets. Use the Apify Google Sheets integration to push validation results into a shared spreadsheet that your finance or compliance team can review without logging into Apify.
Combine with other Apify actors
| Actor | How to combine |
|---|---|
| OpenCorporates Search | Cross-reference company names and addresses returned by EU VAT Number Validator against official corporate registrations in 140+ jurisdictions |
| UK Companies House Search | Validate UK business partners separately, since GB VAT numbers are not in VIES post-Brexit |
| GLEIF LEI Lookup | Match validated VAT entities to their Legal Entity Identifiers for financial compliance and reporting |
| OpenSanctions Search | Screen validated companies against global sanctions, PEP, and watchlist databases for AML compliance |
| OFAC Sanctions Search | Add US Treasury OFAC screening to your VAT validation pipeline for trade compliance with American counterparties |
| Australia ABN Lookup | Validate Australian Business Numbers for APAC trading partners alongside EU VAT checks |
| HubSpot Lead Pusher | Push validated company names and addresses from EU VAT Number Validator directly into HubSpot CRM records |
Limitations
- VIES rate limits -- the European Commission enforces rate limits on the VIES API. The actor mitigates this with 200ms delays and exponential backoff retries, but very large concurrent runs may still encounter
MS_MAX_CONCURRENT_REQerrors. - Germany (DE) node reliability -- Germany's VIES node is frequently offline, returning
MS_UNAVAILABLEerrors. The actor skips DE by default; enabling it means accepting intermittent failures even after retries. - Incomplete name/address data -- not all member states return company details through VIES. Some countries confirm validity but do not disclose the registered name or address. This is a national policy decision, not a limitation of the actor.
- No historical data -- VIES only confirms current registration status. It does not provide records of when a VAT number was registered or deregistered.
- UK (GB) VAT numbers not supported -- standard GB-prefixed UK VAT numbers left the VIES system after Brexit. Only Northern Ireland (XI) numbers are supported. For UK business verification, use UK Companies House Search.
- Sequential processing -- VAT numbers are validated one at a time with a 200ms delay between each call. The VIES API does not support batch endpoints, so parallel validation is not possible.
- No country-specific format validation -- the actor verifies that input starts with a 2-letter code but does not enforce country-specific digit counts or check digits. Invalid formats are caught by the VIES API itself.
- VIES maintenance windows -- individual country nodes go offline for scheduled maintenance, especially during European evenings and weekends. Re-run failed numbers during business hours for best results.
Integrations
- Zapier -- trigger VAT validation from a new CRM record or form submission, push results back to your business tools
- Make -- build visual workflows that validate VAT numbers during supplier onboarding or order processing
- Google Sheets -- export validation results directly to a shared spreadsheet for team review and approval workflows
- Apify API -- embed VAT validation into ERP systems, checkout flows, or custom compliance dashboards via REST API
- Webhooks -- trigger downstream processing (alerts, database updates, invoice holds) when a validation run completes
- LangChain / LlamaIndex -- feed validated company data into AI-powered compliance analysis or entity resolution workflows
Troubleshooting
- MS_UNAVAILABLE errors for a specific country -- the member state's VIES node is temporarily offline. This is outside the actor's control. Collect the failed VAT numbers (filter by
errorfield) and re-run them in a few hours, preferably during European business hours (8:00-17:00 CET). - All German (DE) numbers show COUNTRY_UNRELIABLE_SKIPPED -- this is expected default behavior. Germany's VIES node is frequently unavailable. To attempt DE validation, set
includeUnreliableCountriestotruein the input, but expect some failures. - INVALID_FORMAT for numbers that look correct -- ensure the VAT number starts with the correct 2-letter country code. Greece uses
EL, notGR. Northern Ireland usesXI, notGBorUK. The number must be at least 4 characters total. - Slow run times for large batches -- the 200ms delay between requests is intentional to respect VIES rate limits. 1,000 numbers take approximately 4 minutes. Splitting into smaller batches does not help -- it adds startup overhead without reducing per-number time.
- Name or address is null for a valid number -- some EU member states do not share company details through VIES as a matter of national policy. The number is valid, but the registration details are restricted. This cannot be overridden.
Key takeaways
- Official EU data source -- EU VAT Number Validator queries the European Commission's VIES REST API directly, the same backend used by tax authorities in all 27 EU member states plus Northern Ireland
- Low-cost bulk validation -- $0.002 per VAT number validated with no subscription, compared to $0.01-0.05/lookup on commercial alternatives like Vatstack or VATLayer
- Fast batch processing -- validates 1,000 VAT numbers in approximately 4 minutes with automatic rate limit handling and exponential backoff retries
- Audit-ready output -- each result includes a VIES-provided timestamp that serves as evidence of verification under EU VAT Directive Article 138
- Smart Germany handling -- skips chronically unreliable DE VIES node by default, preventing wasted time and retries; opt-in flag available when DE validation is required
Responsible use
- EU VAT Number Validator queries publicly available business registration data from the European Commission's VIES REST API. It does not bypass authentication, CAPTCHAs, or access restricted content.
- The VIES API is a free public service provided by the European Commission for legitimate business purposes. The actor enforces rate limiting to avoid overloading the service.
- Users are responsible for ensuring their use of VAT validation results complies with applicable laws, including GDPR when storing company data linked to natural persons (e.g., sole traders).
- Do not misrepresent VIES validation results as legal certification or tax advice. Consult a qualified tax professional for compliance decisions.
- For guidance on web scraping legality, see Apify's guide.
FAQ
How do I validate EU VAT numbers in bulk using the VIES API? Enter your VAT numbers into EU VAT Number Validator as a list (one per line or as a JSON array), click Start, and the actor validates each one against the official VIES REST API. Results include validity status, company name, address, and timestamp. Export as CSV, JSON, or Excel from the Dataset tab.
Does EU VAT Number Validator use the official VIES service?
Yes. EU VAT Number Validator calls the official VIES REST API at ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number, operated by the European Commission. No third-party proxy or intermediary is involved. The results are identical to what you get from the VIES web portal.
Do I need an API key to validate EU VAT numbers with VIES? No. The VIES API is a free public service. EU VAT Number Validator does not require any external API key, registration, or authentication. You only need an Apify account to run the actor.
How many VAT numbers can I validate in one run? There is no hard limit. The practical constraint is time: EU VAT Number Validator processes roughly 5 numbers per second (200ms delay between requests). 100 numbers take about 25 seconds, 1,000 take about 4 minutes. For batches larger than 5,000, consider splitting across multiple scheduled runs.
Why does EU VAT Number Validator skip German (DE) VAT numbers by default?
Germany's VIES node is chronically unreliable, going offline frequently and returning MS_UNAVAILABLE errors even after retries. To avoid wasting time and credits, EU VAT Number Validator skips DE numbers by default. Enable "Include unreliable countries (DE)" in the input to attempt German validation when you specifically need it.
Can I validate UK VAT numbers with EU VAT Number Validator?
Standard UK (GB) VAT numbers are not supported. The UK left the VIES system after Brexit. Only Northern Ireland VAT numbers using the XI prefix remain in VIES. For UK business verification, use UK Companies House Search.
Why is the company name or address null for a valid VAT number? Not all EU member states share registration details through VIES. Some countries confirm validity but withhold the company name and address as a matter of national policy. This affects roughly 15-30% of valid numbers depending on the country mix.
Is it legal to validate EU VAT numbers using the VIES API? The VIES API is a public service explicitly provided by the European Commission for business-to-business VAT verification. Using it for legitimate business purposes (invoice compliance, KYC, supplier verification) is its intended use case. If you store the returned company data, ensure you comply with GDPR requirements in your jurisdiction, especially for data linked to sole traders.
How is EU VAT Number Validator different from Vatstack or VATLayer? Vatstack charges $0.01-0.05 per lookup with tiered pricing. VATLayer requires a monthly subscription starting at $14.99. EU VAT Number Validator costs $0.002 per validation with no subscription. All three use the same underlying VIES API. EU VAT Number Validator adds built-in scheduling, Germany unreliable-node handling, and direct export to CSV/Sheets/Excel without extra setup.
Can I schedule EU VAT Number Validator to run automatically? Yes. Use Apify Schedules to trigger validation runs on any cadence -- daily, weekly, monthly, or custom cron expressions. This is the recommended approach for ongoing compliance monitoring of customer or supplier databases.
What error codes does EU VAT Number Validator return?
The actor returns specific, machine-readable error codes: INVALID_FORMAT (malformed input), MS_UNAVAILABLE (country node offline), MS_MAX_CONCURRENT_REQ (VIES rate limit hit after retries), SERVICE_UNAVAILABLE (VIES system-wide issue), COUNTRY_UNRELIABLE_SKIPPED (DE number skipped by default), and NETWORK_ERROR (connection failure). Check the error field in each result to determine next steps.
How long does a typical EU VAT validation run take? EU VAT Number Validator enforces a 200ms delay between requests plus VIES response time (typically 200-500ms per number). Expect 10 numbers in 3-5 seconds, 100 numbers in 20-30 seconds, and 1,000 numbers in 3-5 minutes. Country node response times vary -- some member states are consistently faster than others.
Help us improve
If you encounter issues, you can help us debug faster by enabling run sharing in your Apify account:
- Go to Account Settings > Privacy
- Enable Share runs with public Actor creators
This lets us see your run details when something goes wrong, so we can fix issues faster. Your data is only visible to the actor developer, not publicly.
Support
Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page. For custom solutions or enterprise integrations, reach out through the Apify platform.
Related actors
AI Cold Email Writer — $0.01/Email, Zero LLM Markup
Generates personalized cold emails from enriched lead data using your own OpenAI or Anthropic key. Subject line, body, CTA, and optional follow-up sequence — $0.01/email, zero LLM markup.
AI Outreach Personalizer — Emails with Your LLM Key
Generate personalized cold emails using your own OpenAI or Anthropic API key. Subject lines, opening lines, full bodies — tailored to each lead's role, company, and signals. $0.01/lead compute + your LLM costs. Zero AI markup.
B2B Lead Generation Suite - Find Emails, Score & Qualify Leads
All-in-one B2B lead pipeline. Enter company URLs, get enriched leads with emails, phone numbers, contacts, email patterns, quality scores (0-100), grades, and business signals from a 3-step automated pipeline.
B2B Lead Qualifier - Score & Rank Company Leads
B2B lead scoring tool and API that scores companies 0-100 from 30+ website signals. 5 scoring categories, 4 profiles (sales, marketing, recruiting, default). Plain-English explanations, hiring detection, industry classification, score change tracking. $0.15/lead, no subscription.
Ready to try EU VAT Number Validator (VIES)?
Start for free on Apify. No credit card required.
Open on Apify Store