# EU VAT Number Checker: Validate & Get Company Details (`scrapemint/vat-number-checker`) Actor

Check EU VAT numbers in bulk against VIES, the European Commission's official registry. For each number: valid or not, plus the registered company name and address where the country discloses them. Perfect for invoicing, supplier lists and B2B sales into the EU. No API key needed.

- **URL**: https://apify.com/scrapemint/vat-number-checker.md
- **Developed by:** [Ken M](https://apify.com/scrapemint) (community)
- **Categories:** Business, Lead generation
- **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/platform/actors/running/actors-in-store#pay-per-usage

## 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 Number Checker: Validate & Get Company Details

Check EU VAT numbers in bulk against **VIES, the European Commission's official registry**. Paste one number or thousands and get one clean row per number: whether it is valid, plus the registered company name and address where the country discloses them.

Built for **invoicing and billing teams, accountants, marketplaces and anyone selling B2B into the EU**. A valid customer VAT number is what lets you zero-rate a cross-border B2B invoice (reverse charge), and tax offices expect you to have checked it. The official VIES website only checks one number at a time; this tool does your whole customer or supplier list in one run.

### What you get for each number

- **valid**: true or false, straight from the official registry
- **companyName** and **companyAddress**: the registered details, where the member state discloses them
- **consultationNumber**: official proof of the check for tax audits, when you provide your own VAT number
- **checkedAt**: the timestamp of the check

### Example output

```json
{
  "input": "IE6388047V",
  "countryCode": "IE",
  "vatNumber": "6388047V",
  "valid": true,
  "companyName": "GOOGLE IRELAND LIMITED",
  "companyAddress": "3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4",
  "consultationNumber": null,
  "checkedAt": "2026-07-14T15:55:25.669Z"
}
````

### Coverage and honest limits

- Covers the **27 EU countries plus Northern Ireland (XI)**. Greece can be written as EL or GR.
- **UK numbers (GB) cannot be checked**: the UK left VIES after Brexit and its replacement service requires registration. GB numbers come back as a free, clearly marked row.
- Some countries do not disclose company details: **Germany returns validity only** (name and address come back empty by German policy). Spain discloses partially.
- VIES member state backends occasionally go down. Those numbers come back as a **free** "could not check" row so you can retry them later; you are never charged for a non-answer.

### Pricing

**$0.003 per definitive answer** (valid or invalid). Badly formatted numbers, unsupported countries and temporary backend failures are **free**, and the first 2 rows of every run are free. Validating a 1,000 row supplier list costs about $3, versus $10 to $50 per month for commercial VAT APIs.

### Audit proof (consultation numbers)

If you enter your own EU VAT number in the input, every check is issued an official **consultation number** by VIES. Keep it with the invoice: it is your legal evidence that you validated the customer's number at that date.

### How to run it via API

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapemint~vat-number-checker/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"vatNumbers": ["IE6388047V", "LU26375245", "FR40303265045"]}'
```

### Frequently asked questions

**Is this the official data?** Yes. Every check goes to VIES, the European Commission's own system, which queries the national tax registry of the country in question. This tool adds bulk processing on top; it is not affiliated with the EU.

**Why did a number come back invalid?** Either it does not exist, or it is not registered for cross-border EU transactions. Some companies have a domestic VAT number that is not activated in VIES.

**Can I check UK VAT numbers?** Only Northern Ireland numbers with the XI prefix. UK proper (GB) left the VIES system.

**How fast is it?** Checks run a few at a time to respect the registry's limits. A list of 1,000 numbers takes several minutes.

### More tools from Scrapemint

- [Email List Checker](https://apify.com/scrapemint/email-list-checker): clean email lists in bulk before outreach.
- [Sanctions & Watchlist Screening Scraper](https://apify.com/scrapemint/sanctions-watchlist-scraper): screen names against OFAC and UK sanctions lists.
- [Website Contact Scraper](https://apify.com/scrapemint/website-contact-scraper): pull emails and phones from any company website.

# Actor input Schema

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

VAT numbers with their 2 letter country prefix, one per line (IE6388047V, FR40303265045...). Spaces, dots and dashes inside the number are fine. Covers the 27 EU countries plus Northern Ireland (XI). Greece can be written as EL or GR.

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

Your EU VAT number with country prefix, e.g. IE1234567X. When given, VIES issues an official consultation number for each check, which is your legal proof of validation for tax audits.

## `maxRows` (type: `integer`):

Stop after this many numbers checked (protects your budget on big lists).

## Actor input object example

```json
{
  "vatNumbers": [
    "IE6388047V",
    "LU26375245",
    "NL805734958B01",
    "FR40303265045",
    "IT00743110157"
  ],
  "maxRows": 1000
}
```

# 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",
        "LU26375245",
        "NL805734958B01",
        "FR40303265045",
        "IT00743110157"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapemint/vat-number-checker").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",
        "LU26375245",
        "NL805734958B01",
        "FR40303265045",
        "IT00743110157",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("scrapemint/vat-number-checker").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",
    "LU26375245",
    "NL805734958B01",
    "FR40303265045",
    "IT00743110157"
  ]
}' |
apify call scrapemint/vat-number-checker --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "EU VAT Number Checker: Validate & Get Company Details",
        "description": "Check EU VAT numbers in bulk against VIES, the European Commission's official registry. For each number: valid or not, plus the registered company name and address where the country discloses them. Perfect for invoicing, supplier lists and B2B sales into the EU. No API key needed.",
        "version": "0.1",
        "x-build-id": "e3Ka7zTt4E08QrPwC"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapemint~vat-number-checker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapemint-vat-number-checker",
                "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/scrapemint~vat-number-checker/runs": {
            "post": {
                "operationId": "runs-sync-scrapemint-vat-number-checker",
                "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/scrapemint~vat-number-checker/run-sync": {
            "post": {
                "operationId": "run-sync-scrapemint-vat-number-checker",
                "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": "VAT numbers with their 2 letter country prefix, one per line (IE6388047V, FR40303265045...). Spaces, dots and dashes inside the number are fine. Covers the 27 EU countries plus Northern Ireland (XI). Greece can be written as EL or GR.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "requesterVatNumber": {
                        "title": "Your own VAT number (optional)",
                        "type": "string",
                        "description": "Your EU VAT number with country prefix, e.g. IE1234567X. When given, VIES issues an official consultation number for each check, which is your legal proof of validation for tax audits."
                    },
                    "maxRows": {
                        "title": "Max rows",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Stop after this many numbers checked (protects your budget on big lists).",
                        "default": 1000
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
