# EU VAT Checker (VIES) — 27 States + XI, Bulk, No Key (`themineworks/eu-vat-vies-validator`) Actor

Validate EU VAT numbers in bulk via the official VIES service. Returns validity, registered company name & address for all 27 states + XI. No API key, no SOAP. For finance, tax, KYB & invoicing. Works in Claude, ChatGPT & any MCP agent.

- **URL**: https://apify.com/themineworks/eu-vat-vies-validator.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Business, Lead generation, MCP servers
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 vat checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 🇪🇺 EU VAT Validator (VIES): Bulk Checks with Company Details

### Overview

EU VAT Validator turns the official VIES (VAT Information Exchange System) service into a clean, structured, bulk API. Pass a list of EU VAT numbers with country prefixes, get back one record per number with validity, status, and, for most member states, the registered company name and address.

It is built for finance, compliance, tax, and KYB (Know Your Business) teams that need to verify counterparties, validate invoices for reverse charge, or clean a customer master file. The actor covers all 27 EU member states plus Northern Ireland (`XI`) and paces requests to stay within VIES limits. You are charged only for definitive answers.

✅ No login required | ✅ No API key, no SOAP | ✅ All 27 EU states + XI | ✅ MCP-ready for AI agents

### Features

Bulk validation of EU VAT numbers against the official VIES service.
Company name and address returned for most member states.
Honest result handling: `unavailable` and `invalid_format` are never charged.
Structured JSON output ready for a spreadsheet, ERP, or ledger.
Zero charge on empty runs. You pay only for each check actually delivered.

### How it works

VIES is the European Commission's official VAT validation service, but it ships as a one at a time web form and a fiddly SOAP endpoint. This actor wraps VIES in a bulk friendly interface, paces requests to stay within the service limits, and normalizes the response.

For each VAT ID you submit, the actor strips spaces and punctuation, splits the 2 letter country prefix from the number, calls VIES, and writes one dataset record with validity, status, and any company details returned. If a member state's registry is temporarily down, the record is marked `unavailable` and not charged, so retries stay cheap.

### 🧾 Input configuration

```json
{
  "vatIds": [
    "IE6388047V",
    "FR40303265045",
    "DE811569869",
    "NL000099998B57"
  ]
}
```

VAT IDs must include the 2 letter country prefix. Spaces and punctuation are ignored. Greece is accepted as `EL` or `GR`.

### 📤 Output format

```json
{
  "vat_id": "IE6388047V",
  "country_code": "IE",
  "vat_number": "6388047V",
  "valid": true,
  "status": "valid",
  "name": "GOOGLE IRELAND LIMITED",
  "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
  "request_date": "2026-06-11+02:00",
  "checked_at": "2026-06-11T13:10:00.000Z"
}
```

Every VAT check record contains these fields:

| Field | Description |
| --- | --- |
| 🆔 `vat_id` | Full VAT ID as submitted, normalized |
| 🌍 `country_code` | 2 letter EU country prefix (or `XI`, `EL`) |
| 🔢 `vat_number` | Numeric portion of the VAT ID (no prefix) |
| ✅ `valid` | Boolean: whether the number is currently valid |
| 📶 `status` | `valid`, `invalid`, `unavailable`, or `invalid_format` |
| 🏢 `name` | Registered company name (null for member states that hide it) |
| 📍 `address` | Registered address (null for member states that hide it) |
| 🗓️ `request_date` | Date VIES processed the request |
| ⏱️ `checked_at` | ISO timestamp when the record was written |

`status` legend: `valid` and `invalid` are definitive answers and count against your usage. `unavailable` means the member state registry was down and is never charged. `invalid_format` means the VAT ID could not be parsed and is never charged.

### 💼 Common use cases

**Invoice and reverse charge compliance**
Verify every EU customer's VAT number before applying zero rated, reverse charge invoicing. Keep the `request_date` on file as evidence of good faith.

**KYB and vendor onboarding**
Confirm a business counterparty exists and capture its registered name and address. Cheaper and faster than a paid data vendor.

**Customer master cleanup**
Batch validate a CRM or ERP export and flag invalid or dormant VAT numbers. Route the flagged rows to your finance team.

**Marketplace and platform compliance**
Validate seller VAT numbers at scale during onboarding, and schedule monthly re checks on your active seller base.

### 🚀 Getting started

1. Open the actor and paste your list of VAT IDs into `vatIds`. Include the 2 letter country prefix on every entry.
2. Click Start. The actor paces requests to stay within VIES rate limits.
3. Watch results stream into the dataset as each country registry responds.
4. Export the dataset as JSON, CSV, or Excel, or pull it via the Apify API.
5. Review the final summary record (`_type: summary`) for counts of valid, invalid, and unavailable results.

### FAQ

**Do I need an API key?**
No. VIES is a free, official European Commission service, and this actor wraps it in a bulk friendly interface without any account setup.

**Why is name or address sometimes empty?**
Some member states (notably Germany) return only a valid or invalid flag, not the company details. The actor returns `null` for those fields. The validation is still authoritative.

**What does `unavailable` mean?**
VIES depends on each member state's own tax registry. When one is temporarily down, VIES returns a service error. The actor records `unavailable` and does not charge you, since there is no definitive answer.

**Is this legally sufficient proof of validation?**
VIES is the official EU validation service. Many tax authorities accept a VIES check (with date) as evidence of good faith. This actor records the `request_date` returned by VIES on every check.

**Does it cover Northern Ireland?**
Yes. Use the `XI` prefix.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/eu-vat-vies-validator
```

Or call it programmatically with the Apify client:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/eu-vat-vies-validator').call({
  vatIds: ['IE6388047V', 'FR40303265045', 'DE811569869'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((i) => !i._type));
```

### 🛠️ Complete your KYB pipeline

Pair this validator with the rest of the themineworks compliance suite:

- **[Company Identity Resolver](https://apify.com/themineworks/company-identity-resolver)**: resolve a company name to GLEIF LEI, legal name, and SEC EDGAR CIK.
- **[Crunchbase Scraper](https://apify.com/themineworks/crunchbase-companies)**: company funding, investors, and firmographics.
- **[B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)**: find named decision makers at target companies.

Typical flow: company-identity-resolver locks down legal identity, eu-vat-vies-validator confirms tax registration, and b2b-leads-finder attaches the humans to contact.

Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.

# Actor input Schema

## `vatIds` (type: `array`):

Full EU VAT IDs including the 2-letter country prefix (e.g. DE811569869, IE6388047V, FR40303265045). Spaces and punctuation are ignored.

## Actor input object example

```json
{
  "vatIds": [
    "DE811569869",
    "IE6388047V"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "vatIds": [
        "DE811569869",
        "IE6388047V"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/eu-vat-vies-validator").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "vatIds": [
        "DE811569869",
        "IE6388047V",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("themineworks/eu-vat-vies-validator").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "vatIds": [
    "DE811569869",
    "IE6388047V"
  ]
}' |
apify call themineworks/eu-vat-vies-validator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=themineworks/eu-vat-vies-validator",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/gJxKTJz0Bx4hffZgq/builds/U0h4oPg1P9EDPvxPn/openapi.json
