# EU VAT Validator (VIES) (`apifmcpfactory/eu-vat-validator`) Actor

Validates EU VAT numbers against the EU's official VIES registry, returning validity, business name and address, and an official consultation number as audit evidence - use before zero-rating an intra-EU B2B invoice or to clean a customer VAT list; $0.005 per number checked.

- **URL**: https://apify.com/apifmcpfactory/eu-vat-validator.md
- **Developed by:** [Fred Jones](https://apify.com/apifmcpfactory) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 vat number validateds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 — bulk VIES VAT validation with audit evidence

Validate EU VAT numbers in bulk against **VIES**, the European Commission's official VAT validation service — and get the official **consultation number** on every check as audit evidence for tax inspections. Built for finance teams, accountants, and B2B sellers verifying invoices and reverse-charge eligibility.

**$5 per 1,000 validations flat** — with a low per-run start fee and nothing else. Comparable tools charge $40+ per 1,000.

### Use with AI agents (MCP)

This Actor is also an **MCP tool** — AI agents like Claude and Cursor can run it for you. Your agent can call this tool directly; usage bills through your Apify account.

**MCP server URL:**

````

https://mcp.apify.com?tools=apifmcpfactory/eu-vat-validator

````

**Claude Desktop** (`claude_desktop_config.json`):

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

**Cursor** (`.cursor/mcp.json`):

```json
{
    "mcpServers": {
        "eu-vat-validator": {
            "url": "https://mcp.apify.com?tools=apifmcpfactory/eu-vat-validator",
            "headers": {
                "Authorization": "Bearer YOUR_APIFY_TOKEN"
            }
        }
    }
}
```

Replace `YOUR_APIFY_TOKEN` with your API token from [Apify Console](https://console.apify.com/settings/integrations).

No Apify account? AI agents can also pay per call with USDC via the [x402 protocol](https://docs.apify.com/integrations/x402): buy a prepaid token at [agi.apify.com](https://agi.apify.com) and use it as the Bearer token above.

### Why this Actor?

- **Official audit evidence** — provide your own VAT number (`requesterVat`) and VIES issues a consultation number for every check. That reference is recognised proof that you verified your counterparty's VAT status at that moment — exactly what tax authorities ask for in reverse-charge audits.
- **Bulk-safe by design** — a 1,000-number batch never dies mid-run. Every input produces exactly one output row: valid, invalid, or a clear per-number error. Automatic retries with backoff ride out VIES's frequent member-state outages.
- **Honest, compliant speed** — VIES rate-limits all callers and blocks abusive IPs. This Actor validates at ~1–3 numbers per second with gentle concurrency: compliant by design, no IP-blocking risk, no burned batches. A 1,000-number run takes roughly 10–15 minutes and simply works.
- **Input tolerance** — accepts messy real-world formats (`ie 6388047v`, `DE 811.569.869`) and normalises them automatically before checking.

### Input

```json
{
    "vatNumbers": ["IE6388047V", "de 811.569-869", "IE0000000A"],
    "requesterVat": "IE8256796U"
}
```

### Output

One dataset item per VAT number — with the consultation number when `requesterVat` is provided:

```json
{
    "vatNumber": "IE6388047V",
    "countryCode": "IE",
    "valid": true,
    "businessName": "GOOGLE IRELAND LIMITED",
    "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
    "consultationNumber": "WAPIAAAAZ97vI0fg",
    "checkedAt": "2026-07-19T18:58:49.289Z"
}
```

Invalid numbers return `valid: false`; numbers VIES could not check (member state down after all retries) return an `error` field — so your spreadsheet always reconciles 1:1 with your input list.

### What is VIES VAT validation?

VIES (VAT Information Exchange System) is the European Commission's search engine over the national VAT registries of all 27 EU member states (plus XI for Northern Ireland). Checking a counterparty's VAT number there — and keeping evidence of the check — is the standard way to support zero-rated intra-EU B2B supplies under the reverse-charge mechanism. This Actor is a bulk VAT validation API on top of that official source: an EU VAT number checker that scales from one invoice to your whole ledger, with VAT compliance audit evidence built in.

### GDPR & lawful use

All data returned by this Actor comes solely from the European Commission's official VIES service, which publishes it for exactly this purpose: verifying the VAT status of business counterparties. The intended use is B2B invoice and VAT compliance verification. The Actor stores nothing beyond your own run's dataset — no copies, no enrichment, no third-party sources.

### FAQ

**Do I need `requesterVat`?** No — validation works without it. With it, every check also returns the official VIES consultation number, which is your audit evidence. Recommended for compliance use.

**Why not faster?** VIES itself is the bottleneck: it rate-limits all callers and temporarily blocks IPs that hammer it. Tools that advertise high concurrency risk blocked runs and half-finished batches. This Actor stays deliberately inside VIES's comfort zone so runs finish reliably.

**What if a member state is offline?** The Actor retries with increasing pauses. If a country stays down, those numbers get a clear `error` in the output and the rest of the batch completes normally — rerun just the failed ones later.

### More tools from MCP Factory

- **[Tech Stack Detector](https://apify.com/apifmcpfactory/tech-stack-detector)** — find out what any website is built with (CMS, ecommerce, frameworks, analytics) at ~$5 per 1,000 sites.
- **[llms.txt Checker](https://apify.com/apifmcpfactory/llms-txt-checker)** — audit any website's AI readiness: llms.txt, AI crawler access in robots.txt, sitemap, and a 0–100 score with plain-English fixes.

# Actor input Schema

## `vatNumbers` (type: `array`):

EU VAT numbers to validate, each starting with its 2-letter country code, e.g. "IE6388047V". Messy real-world formats like "de 811.569-869" are normalised automatically. Each number produces exactly one result item (valid, invalid, or error) and is billed at $0.005. If omitted, two demo numbers (Google Ireland, Microsoft Ireland) are used — always pass your own list.

## `requesterVat` (type: `string`):

The caller's own EU VAT number with country prefix, e.g. "IE8256796U". If provided, every result includes an official VIES consultationNumber — recognised audit evidence for reverse-charge compliance. If omitted, validation works normally but no consultation number is returned. Provide it whenever the user needs proof of the check.

## Actor input object example

```json
{
  "vatNumbers": [
    "IE6388047V",
    "IE8256796U"
  ]
}
```

# 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 = {
    "vatNumbers": [
        "IE6388047V",
        "IE8256796U"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apifmcpfactory/eu-vat-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 = { "vatNumbers": [
        "IE6388047V",
        "IE8256796U",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("apifmcpfactory/eu-vat-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 '{
  "vatNumbers": [
    "IE6388047V",
    "IE8256796U"
  ]
}' |
apify call apifmcpfactory/eu-vat-validator --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU VAT Validator (VIES)",
        "description": "Validates EU VAT numbers against the EU's official VIES registry, returning validity, business name and address, and an official consultation number as audit evidence - use before zero-rating an intra-EU B2B invoice or to clean a customer VAT list; $0.005 per number checked.",
        "version": "0.0",
        "x-build-id": "92tlhSP5Wd9kvzrX6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/apifmcpfactory~eu-vat-validator/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-apifmcpfactory-eu-vat-validator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/apifmcpfactory~eu-vat-validator/runs": {
            "post": {
                "operationId": "runs-sync-apifmcpfactory-eu-vat-validator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/apifmcpfactory~eu-vat-validator/run-sync": {
            "post": {
                "operationId": "run-sync-apifmcpfactory-eu-vat-validator",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "vatNumbers"
                ],
                "properties": {
                    "vatNumbers": {
                        "title": "VAT numbers",
                        "type": "array",
                        "description": "EU VAT numbers to validate, each starting with its 2-letter country code, e.g. \"IE6388047V\". Messy real-world formats like \"de 811.569-869\" are normalised automatically. Each number produces exactly one result item (valid, invalid, or error) and is billed at $0.005. If omitted, two demo numbers (Google Ireland, Microsoft Ireland) are used — always pass your own list.",
                        "default": [
                            "IE6388047V",
                            "IE8256796U"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "requesterVat": {
                        "title": "Your own VAT number (optional)",
                        "type": "string",
                        "description": "The caller's own EU VAT number with country prefix, e.g. \"IE8256796U\". If provided, every result includes an official VIES consultationNumber — recognised audit evidence for reverse-charge compliance. If omitted, validation works normally but no consultation number is returned. Provide it whenever the user needs proof of the check."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
