# EU VAT Number VIES Official Validator (`song921619730/eu-vat-vies-validator`) Actor

Real-time European Commission VIES VAT validator supporting single and batch verification, Northern Ireland (XI), and Greece (EL) normalization at $0.005/check.

- **URL**: https://apify.com/song921619730/eu-vat-vies-validator.md
- **Developed by:** [song](https://apify.com/song921619730) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## EU VAT Number VIES Official Validator

> Official, real-time European Commission VIES VAT number verification for B2B cross-border compliance, reverse-charge invoicing, and audit certificates with zero monthly subscriptions.

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue?logo=apify)](https://apify.com)
[![Pricing](https://img.shields.io/badge/Pricing-Pay--Per--Event%20\($0.005\)-green)](https://apify.com)
[![Docker](https://img.shields.io/badge/Container-256MB%20Optimized-orange)](https://docker.com)

***

### 💡 The Problem Solved

Under European Union tax directives (Council Directive 2006/112/EC), cross-border B2B transactions between EU member states qualify for the **0% VAT Reverse Charge Mechanism** only if the customer's VAT ID is officially registered and active in the **VIES (VAT Information Exchange System)** at the transaction date.

Manually validating VAT numbers through the EU web portal is slow, and commercial tax SaaS platforms charge $50–$300/month recurring subscriptions.

This Actor solves this by providing:

- **Zero Monthly Subscription**: Pay only **$0.005 per check** using Apify Pay-Per-Event (PPE).
- **Official EU Gateway**: Queries `ec.europa.eu/taxation_customs/vies/rest-api` directly.
- **Audit Consultation Proof**: Generates official `requestIdentifier` tokens for tax audits when requester VAT details are provided.
- **Smart Sanitization**: Normalizes Greece (`GR` -> `EL`), spaces, and dashes, with full post-Brexit Northern Ireland (`XI`) support.
- **Single & Batch Support**: Verify 1 VAT number or thousands in automated batches.

***

### 💰 Transparent Pay-Per-Event (PPE) Pricing

No recurring monthly subscriptions. You only pay for successful validation queries:

| Billable Event | Unit Price | Deliverable |
|---|---|---|
| `vat_validation` | **$0.005 USD** | Official validation status, registered company name, address, and audit certificate ID |

***

### 📥 Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `vatNumber` | `string` | **Yes** | — | Target VAT number (e.g. `'6388047V'` or `'IE6388047V'`). |
| `countryCode` | `string` | No | `'IE'` | 2-letter Member State code (e.g. `DE`, `FR`, `IT`, `EL`, `XI`). Auto-detected if prefix included in `vatNumber`. |
| `requesterCountryCode`| `string` | No | `""` | Your 2-letter country code to obtain a binding audit consultation certificate. |
| `requesterVatNumber` | `string` | No | `""` | Your own VAT number for audit proof generation. |
| `batchVatNumbers` | `array` | No | `[]` | Optional array of VAT numbers for bulk verification (e.g. `["IE6388047V", "EL094014201"]`). |

#### Sample Input JSON

```json
{
  "vatNumber": "IE6388047V",
  "requesterCountryCode": "IE",
  "requesterVatNumber": "6388047V"
}
```

***

### 📤 Output Format

Each verified item pushed to the Apify dataset contains:

```json
{
  "countryCode": "IE",
  "vatNumber": "6388047V",
  "valid": true,
  "status": "VALID",
  "name": "GOOGLE IRELAND LIMITED",
  "address": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
  "requestIdentifier": "WAPIAAAAaFQiOHmI",
  "requestDate": "2026-10-18T19:41:50.529Z"
}
```

***

### ⚡ Integration Snippets

#### 1. Python (`apify-client`)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_API_TOKEN")

run = client.actor("your-username/eu-vat-vies-validator").call(
    run_input={"vatNumber": "IE6388047V"}
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"Company: {item['name']} | Valid: {item['valid']} | Cert: {item['requestIdentifier']}")
```

#### 2. Make.com (Integromat)

1. Add **Apify -> Run an Actor**.
2. Select `eu-vat-vies-validator`.
3. Map `vatNumber` from your Shopify, WooCommerce, or CRM invoice webhook.
4. Add a router: If `valid == true`, apply 0% VAT rate; if `false`, flag for manual review.

#### 3. Zapier

1. Trigger: **New Order in Stripe / QuickBooks**.
2. Action: **Apify -> Run Actor** (`eu-vat-vies-validator`).
3. Pass customer VAT ID. Store `requestIdentifier` in your ERP for VAT tax audit compliance.

#### 4. cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/your-username~eu-vat-vies-validator/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vatNumber": "IE6388047V"}'
```

***

### 🇪🇺 Supported Member States & Codes

All 27 EU Member States + Northern Ireland Protocol:
`AT` (Austria), `BE` (Belgium), `BG` (Bulgaria), `CY` (Cyprus), `CZ` (Czechia), `DE` (Germany), `DK` (Denmark), `EE` (Estonia), `EL` (Greece, normalized from `GR`), `ES` (Spain), `FI` (Finland), `FR` (France), `HR` (Croatia), `HU` (Hungary), `IE` (Ireland), `IT` (Italy), `LT` (Lithuania), `LU` (Luxembourg), `LV` (Latvia), `MT` (Malta), `NL` (Netherlands), `PL` (Poland), `PT` (Portugal), `RO` (Romania), `SE` (Sweden), `SI` (Slovenia), `SK` (Slovakia), `XI` (Northern Ireland).

# Actor input Schema

## `vatNumber` (type: `string`):

The VAT identification number to validate (with or without 2-letter country code prefix, e.g. '6388047V' or 'IE6388047V').

## `countryCode` (type: `string`):

2-letter EU Member State country code (e.g. AT, BE, BG, CY, CZ, DE, DK, EE, EL/GR, ES, FI, FR, HR, HU, IE, IT, LT, LU, LV, MT, NL, PL, PT, RO, SE, SI, SK, XI). If omitted, extracted automatically from the VAT number.

## `requesterCountryCode` (type: `string`):

Your own 2-letter EU Member State country code (e.g. 'IE', 'DE') to generate a legally binding VIES consultation certificate ID for tax audits.

## `requesterVatNumber` (type: `string`):

Your own VAT registration number to include in the official consultation audit proof.

## `batchVatNumbers` (type: `array`):

Optional list of full VAT numbers (e.g. \['IE6388047V', 'DE115235683', 'XI123456789']) for bulk sequential verification.

## Actor input object example

```json
{
  "vatNumber": "IE6388047V",
  "countryCode": "IE",
  "requesterCountryCode": "",
  "requesterVatNumber": "",
  "batchVatNumbers": []
}
```

# Actor output Schema

## `overview` (type: `string`):

Link to validated VAT records dataset

# 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 = {
    "vatNumber": "IE6388047V",
    "countryCode": "IE"
};

// Run the Actor and wait for it to finish
const run = await client.actor("song921619730/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 = {
    "vatNumber": "IE6388047V",
    "countryCode": "IE",
}

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

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

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

```

## CLI example

```bash
echo '{
  "vatNumber": "IE6388047V",
  "countryCode": "IE"
}' |
apify call song921619730/eu-vat-vies-validator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,song921619730/eu-vat-vies-validator"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/HX51gi4HVHsGfgAOj/builds/RYUNa5Ma9dgEuWTE3/openapi.json
