EU VAT Number Validator API (VIES): Name, Address, Proof avatar

EU VAT Number Validator API (VIES): Name, Address, Proof

Pricing

from $1.70 / 1,000 verified vat numbers

Go to Apify Store
EU VAT Number Validator API (VIES): Name, Address, Proof

EU VAT Number Validator API (VIES): Name, Address, Proof

Bulk-check EU VAT numbers on official VIES: validity, company name, address, request date and consultation number as proof. CSV or Google Sheets input, auto-retry on VIES errors. No API key, no login. MCP-ready for AI agents. Invalid numbers and errors are free. $2 per 1,000 valid numbers.

Pricing

from $1.70 / 1,000 verified vat numbers

Rating

0.0

(0)

Developer

ABM

ABM

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

EU VAT Number Validator API (VIES) — Bulk Check with Company Name, Address and Proof

$2 per 1,000 verified VAT numbers ($0.002 each). Invalid numbers, format errors and VIES outages are free.

Validate EU VAT numbers in bulk against the official VIES service of the European Commission. For each number you get: validity, registered company name and address, the VIES request timestamp (proof of check) and, if you give your own VAT number, the official VIES consultation number you can keep as legal evidence for zero-rated intra-EU invoices.

  • Paste a list or point to a CSV file / Google Sheet — the VAT column is detected automatically.
  • Automatic retries on VIES temporary errors (MS_MAX_CONCURRENT_REQ, MS_UNAVAILABLE, TIMEOUT...), with per-country throttling.
  • Cleans input: spaces, dots, dashes, lowercase, GR → EL, duplicates removed.
  • All 27 EU member states + Northern Ireland (XI).
  • No API key, no login, no monthly rental. MCP-ready for Claude, Cursor, ChatGPT and AI agents.
  • onlyNew and statusChanged for scheduled re-verification of your customer or supplier base.
  • An audit CSV report is saved in the key-value store (vat-report.csv).

How much does it cost?

Pay per event: numero-verifie = $0.002, charged only when VIES confirms the number is valid.

You checkValid numbersYou pay
100 numbers90 valid, 10 invalid$0.18
1,000 numbers1,000 valid$2.00
10,000 numbers8,500 valid, 1,500 invalid/unavailable$17.00

Invalid numbers, bad formats and numbers VIES could not check (national service down) cost nothing. Set "Max cost per run" in Apify to cap your spend: the actor stops cleanly when the limit is reached.

Input

{
"vatNumbers": ["FR40303265045", "DE811128135", "IE 6388047 V", "gr094014201"],
"csvUrl": "https://docs.google.com/spreadsheets/d/<your-sheet-id>/edit#gid=0",
"requesterVatNumber": "FR12345678901",
"onlyNew": false,
"includeInvalid": true,
"maxConcurrency": 5,
"maxRetries": 6
}
FieldDescription
vatNumbersList of VAT numbers with country prefix.
csvUrlPublic CSV/TXT link or Google Sheet ("anyone with the link"). Combined with the list.
csvColumnColumn header to use if auto-detection is wrong.
requesterVatNumberYour own EU VAT number → VIES returns a consultation number per check.
onlyNewSkip numbers already confirmed valid in previous runs.
includeInvalidOutput invalid / badly formatted numbers too (free). Default true.
maxConcurrencyParallel checks (max 2 per country). Default 5.
maxRetriesRetries on VIES temporary errors. Default 6 (0 = no retry). At most 75 s of retrying per number; national services VIES reports as down get at most 2 retries; numbers left when the run is about to time out are returned as unavailable (free).

Output

One object per VAT number in the dataset:

{
"input": "IE 6388047 V",
"vatNumber": "IE6388047V",
"countryCode": "IE",
"vatNumberLocal": "6388047V",
"isValid": true,
"status": "valid",
"companyName": "GOOGLE IRELAND LIMITED",
"companyAddress": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
"companyAddressLines": ["3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4"],
"nameAvailable": true,
"requestDate": "2026-10-20T04:20:33.853Z",
"checkedAt": "2026-10-20T04:20:34Z",
"consultationNumber": "WAPIAAAAZ3xxxxxx",
"requesterVatNumber": "FR12345678901",
"viesErrorCode": null,
"message": "VAT number is valid and active in VIES.",
"proofText": "On 2026-10-20T04:20:33.853Z, the EU VIES service confirmed that VAT number IE6388047V is valid, registered to GOOGLE IRELAND LIMITED, 3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4. Consultation number: WAPIAAAAZ3xxxxxx.",
"attempts": 1,
"previousStatus": "valid",
"statusChanged": false,
"source": "VIES REST API (European Commission)"
}

status values: valid (charged), invalid, invalid_input (wrong format), unavailable (VIES/national service down after all retries — run again later), error. Only valid is charged.

Use cases

1. Finance team: monthly check of the customer base before zero-rated invoicing

An accounts-receivable manager exports 2,400 B2B EU customers from the ERP into a Google Sheet. The actor runs on the 1st of every month with their own VAT number to get consultation numbers.

Input:

{"csvUrl": "https://docs.google.com/spreadsheets/d/1AbC.../edit#gid=0", "requesterVatNumber": "FR12345678901"}

Output extract:

[{"vatNumber": "NL004495445B01", "status": "valid", "companyName": "OPENJONGERENVERENIGING DE KOORNBEURS", "consultationNumber": "WAPIAAAAZ3..."},
{"vatNumber": "BE0123456789", "status": "invalid", "previousStatus": "valid", "statusChanged": true}]

Next: rows with statusChanged: true go to a "VAT revoked" tab; the billing team switches those customers to domestic VAT. Cost: ~2,300 valid × $0.002 = $4.60 per month, with consultation numbers archived for tax audits.

2. E-commerce / SaaS: verify B2B sign-ups every morning

A growth ops engineer stores new business sign-ups in a CSV. A schedule at 7:00 runs with onlyNew: true, so only the ~40 new numbers of the day are checked.

Input:

{"csvUrl": "https://example.com/exports/new-b2b-signups.csv", "csvColumn": "vat_id", "onlyNew": true}

Output extract:

[{"input": "de 811 128 135", "vatNumber": "DE811128135", "status": "valid", "nameAvailable": false},
{"input": "IT0074311015", "status": "invalid_input", "message": "VIES rejected the number format (wrong length or characters for this country)."}]

Next: valid accounts get reverse-charge invoices automatically; invalid_input rows trigger an email asking the customer to fix their VAT number. Cost: ~$0.08 per day.

3. Procurement / KYB: supplier onboarding with name matching

A procurement analyst checks 300 new suppliers before the first payment and compares companyName with the name on the supplier's invoice.

Input:

{"vatNumbers": ["PL7740001454", "EL094014201", "LU26375245", "IT00743110157"]}

Output extract:

[{"vatNumber": "PL7740001454", "companyName": "ORLEN SPÓŁKA AKCYJNA", "companyAddress": "CHEMIKÓW 7, 09-411 PŁOCK"},
{"vatNumber": "EL094014201", "companyName": "ΤΡΑΠΕΖΑ ΕΘΝΙΚΗ ΤΗΣ ΕΛΛΑΔΟΣ ΑΝΩΝΥΜΗ ΕΤΑΙΡΕΙΑ"}]

Next: an LLM compares companyName with the invoice name (any alphabet), mismatches go to manual review. Cost: 300 × $0.002 = $0.60.

Call it from the API

Python:

from apify_client import ApifyClient
client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("<username>/eu-vat-vies-validator").call(
run_input={"vatNumbers": ["FR40303265045", "DE811128135"]}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["vatNumber"], item["status"], item["companyName"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('<username>/eu-vat-vies-validator').call({
vatNumbers: ['FR40303265045', 'DE811128135'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => `${i.vatNumber} ${i.status} ${i.companyName ?? ''}`));

Synchronous HTTP (one call, results in the response):

POST https://api.apify.com/v2/acts/<username>~eu-vat-vies-validator/run-sync-get-dataset-items?token=<APIFY_TOKEN>
{"vatNumbers": ["IE6388047V"]}

Integrations (Make, Zapier, n8n, Google Sheets)

  • n8n: Schedule Trigger (monthly) → Apify: Run actor (csvUrl = your Google Sheet export) → Apify: Get dataset items → IF statusChanged = true → Google Sheets "Append row" + Slack message to the finance channel.
  • Make: Watch new rows in Google Sheets → Apify "Run an actor" with {"vatNumbers": ["{{VAT}}"]} → write status, companyName and consultationNumber back into the row.
  • Zapier: New customer in your CRM → Apify "Run actor" → update the CRM field "VAT verified".
  • Google Sheets: export the dataset as CSV/XLSX, or use the vat-report.csv audit file from the key-value store.

Use with AI agents (MCP)

The actor works as a tool in the Apify MCP server (https://mcp.apify.com) for Claude, Cursor, ChatGPT and other agents. Ask "Check whether these EU VAT numbers are valid and give me the company names: …" — the agent calls the actor and gets structured JSON plus a ready-to-quote proofText sentence for each number.

FAQ

Is this the official VIES data? Yes. Every number is checked live against the European Commission VIES REST API. Nothing is cached or guessed.

Why is the company name empty for some countries? Some member states (e.g. Germany, Spain) don't disclose name and address through VIES. The validity check still works; nameAvailable is false.

What is a consultation number? An identifier VIES issues when you give your own VAT number as requester. Tax authorities accept it as proof that you checked your customer's VAT number on a given date.

What happens when VIES is down? The actor retries with exponential backoff (per-country throttling). If a national service stays down, the number is returned with status: "unavailable" and is not charged — run it again later.

Can I validate UK (GB) numbers? No: VIES covers EU member states and Northern Ireland (XI) only.

Does "invalid" mean the company doesn't exist? It means the number is not active for intra-EU transactions in VIES (not registered, deregistered, or not activated for cross-border trade).

Limits

  • VIES limits concurrent requests per member state; large countries (FR, DE, IT) can be busy during office hours, which slows big batches. Expect roughly 1,000–3,000 numbers per 10 minutes depending on VIES load.
  • Name/address availability depends on the member state.
  • Consultation numbers require a valid EU VAT number of your own.
  • CSV files are limited to 20 MB per run; onlyNew memory holds ~150,000 numbers.