# EU TIN Validator: Tax ID Number Check for 27 EU Countries (`lerider/eu-tin-validator`) Actor

Check Tax Identification Numbers (TINs) of all 27 EU member states with the European Commission's official TIN service: structure and check digit, for DAC7 seller onboarding, KYC and invoices. Batches of up to 200, $0.002 per answered check; outages are free.

- **URL**: https://apify.com/lerider/eu-tin-validator.md
- **Developed by:** [Lerider Technologies](https://apify.com/lerider) (community)
- **Categories:** Business, Developer tools, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 tin checked by the eu tin services

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/actors/running/actors-in-store.md#pay-per-event

## 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 TIN Validator: Tax ID Number Check for 27 EU Countries

Check Tax Identification Numbers (TINs) for every EU member state with the European Commission's official **TIN
service**: is the structure right for that country, and is the check digit right? Built for DAC7 seller onboarding on
platforms and marketplaces, KYC/KYB forms, payroll and invoice checks, and AI agents that collect tax IDs.

- **All 27 EU member states**, for both people and companies, using each country's official rules
- **Two answers per TIN:** `valid_structure` (length and characters) and `valid_syntax` (check digit / algorithm)
- **Batches of up to 200** per run; a TIN repeated in the same run is checked and charged once
- **Clear limits:** the EU publishes no register of issued TINs, so a `valid` TIN has the right format and check
  digit; it does not prove the number was issued to that person or company

### Pricing: you pay only when the EU service answers

| Event | Price | When |
|---|---|---|
| `tin-check` | **$0.002** | The EU TIN service answered: `valid` or `invalid` |
| (free) | $0 | Non-EU country, service down, a repeat in the same run, malformed item |

That is $2 per 1,000 answered checks.

### Input

```json
{"country": "DE", "tin": "86095742719"}
```

```json
{"tins": [{"country": "FR", "tin": "30 23 217 600 053"}, {"country": "IT", "tin": "RSSMRA85T10A562S"},
          {"country": "NL", "tin": "123456782"}, {"country": "GR", "tin": "123456789"}]}
```

Give the TIN without a country prefix. Spaces, dots, dashes and slashes are ignored. `GR` is read as `EL` (Greece).
Clear the single `tin` field when you send `tins`.

### Output

```json
{
  "index": 0,
  "country": "DE",
  "tin": "86095742719",
  "status": "valid",
  "valid": true,
  "valid_structure": true,
  "valid_syntax": true,
  "checked_at": "2026-10-28T19:30:00+00:00",
  "detail": "valid DE TIN format (structure and check digits only: the EU has no public register of issued TINs)",
  "source": "EU TIN service"
}
```

| `status` | Meaning | Charged |
|---|---|---|
| `valid` | Right structure and (where the country has one) the right check digit | yes |
| `invalid` | Wrong structure, wrong check digit, or rejected as malformed for that country | yes |
| `not_checkable` | Not an EU member state code (e.g. GB, CH, NO, US) | no |
| `unavailable` | The EU service did not answer; try again later | no |

Some countries have no check digit; `valid_syntax` is then `null` and the structure decides.

### Privacy

TINs of natural persons are personal data. They are sent only to the European Commission's TIN service and returned
in your own run's dataset. The Actor logs and stores nothing else.

### Related

- [EU VAT Validator (VIES)](https://apify.com/lerider/eu-vat-validator): VAT numbers, live registration check
- [EORI Number Validator](https://apify.com/lerider/eori-validator): EU customs IDs
- [Payee Check](https://apify.com/lerider/payee-check): IBAN, VAT, Peppol and invoice checks before you pay a supplier

Not tax or legal advice. Made by Lerider Technologies (lerider.com).

# Changelog

This Actor's version history is a separate document: https://apify.com/lerider/eu-tin-validator/changelog.md

# Actor input Schema

## `country` (type: `string`):

2-letter code of the EU country that issued the TIN, e.g. DE, FR, IT, NL (Greece: EL or GR).

## `tin` (type: `string`):

The tax identification number, without a country prefix. Spaces, dots, dashes and slashes are ignored. Leave empty when you use 'TINs (batch)'.

## `tins` (type: `array`):

Up to 200 items per run: \[{"country": "DE", "tin": "..."}, ...]. Clear the single 'TIN' field when you use this.

## Actor input object example

```json
{
  "country": "DE",
  "tin": "86095742719"
}
```

# Actor output Schema

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

No description

## `overview` (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 = {
    "country": "DE",
    "tin": "86095742719"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lerider/eu-tin-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 = {
    "country": "DE",
    "tin": "86095742719",
}

# Run the Actor and wait for it to finish
run = client.actor("lerider/eu-tin-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 '{
  "country": "DE",
  "tin": "86095742719"
}' |
apify call lerider/eu-tin-validator --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lerider/eu-tin-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/W49XEusQWMa6kksRL/builds/1RREf1GJgl9dts1pn/openapi.json
