# Italy VAT Validator — Batch P.IVA Verification via EU VIES (`agoradelmediterraneo/italy-vat-validator`) Actor

Batch validate Italian P.IVA (Partita IVA) numbers via EU VIES. Returns company name, city, province and address for each valid number. Up to 500 VATs per run. No API key required. Official EU Commission source.

- **URL**: https://apify.com/agoradelmediterraneo/italy-vat-validator.md
- **Developed by:** [Agora](https://apify.com/agoradelmediterraneo) (community)
- **Categories:** Business, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

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

## Italy VAT Validator — Batch P.IVA Verification via EU VIES

Validate up to **500 Italian P.IVA numbers in a single run** using the official **EU VIES system** (European Commission). Returns company name, registered address, city, province, and VAT status for each number.

**Data source:** EU VIES (VAT Information Exchange System) — European Commission official endpoint. No API key required. Free to query.

***

### Why This Actor?

Manually checking Italian P.IVA numbers one by one on the VIES portal is slow and doesn't scale. This actor automates bulk verification — ideal for:

- **KYB compliance**: verify supplier or client VAT registrations before signing contracts
- **CRM enrichment**: clean and enrich Italian company records with official name + address
- **Invoice validation**: verify P.IVA numbers on incoming Italian invoices
- **Anti-fraud checks**: detect invalid or fake VAT numbers in bulk
- **Lead list cleaning**: remove dissolved or invalid companies from a prospect list

***

### Use Cases

#### 1. Supplier KYB Before Contract Signing

Before onboarding an Italian supplier, validate their P.IVA. A valid VIES result means the company exists and is VAT-registered in Italy — a basic compliance requirement in B2B contracts.

#### 2. Bulk CRM Enrichment

Feed a CSV of Italian company VAT numbers and get back official company names and addresses directly from the EU Commission database. No scraping, no third-party data.

#### 3. Invoice Verification Workflow

In an n8n or Make automation: extract P.IVA from incoming invoices → send to this actor → validate and enrich → flag invalid numbers for manual review.

#### 4. Lead List Hygiene

Remove dissolved or non-existent companies from a prospect list before launching an outreach campaign.

***

### Input

You can provide P.IVA numbers in two formats — pick whichever is easier for your workflow:

#### Option A: JSON array

```json
{
  "pivaList": ["00159560366", "IT00484960588", "01967000580"],
  "includeInvalid": true
}
```

#### Option B: Text (one per line or comma-separated)

```json
{
  "pivaText": "00159560366\n00484960588\n01967000580",
  "includeInvalid": false
}
```

#### Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `pivaList` | array | — | List of P.IVA numbers (11 digits, `IT` prefix optional) |
| `pivaText` | string | — | P.IVA numbers as text, separated by newlines or commas |
| `includeInvalid` | boolean | `true` | Include invalid/not-found results in output |

**Max 500 P.IVA numbers per run.** For larger batches, split into multiple runs.

Both `pivaList` and `pivaText` can be used together — duplicates are removed automatically.

***

### Output Format

| Field | Description |
|-------|-------------|
| `piva` | Full P.IVA with IT prefix (e.g. `IT00159560366`) |
| `is_valid` | `true` if valid and active in VIES, `false` otherwise |
| `name` | Official company name from VIES |
| `address` | Street address |
| `city` | City |
| `province` | Italian province code (e.g. `MO`, `RM`, `MI`) |
| `postal_code` | 5-digit postal code |
| `vies_error` | Error code if invalid: `INVALID`, `VAT_BLOCKED`, `MS_UNAVAILABLE`, etc. |
| `checked_at` | ISO 8601 timestamp of the VIES check |

#### Sample Output

```json
[
  {
    "piva": "IT00159560366",
    "is_valid": true,
    "name": "Ferrari S.P.A.",
    "address": "Via Emilia Est 1163",
    "city": "Modena",
    "province": "MO",
    "postal_code": "41122",
    "vies_error": "",
    "checked_at": "2026-07-16T10:08:50Z"
  },
  {
    "piva": "IT00469580013",
    "is_valid": true,
    "name": "Stellantis N.V.",
    "address": "Corso Agnelli 200",
    "city": "Torino",
    "province": "TO",
    "postal_code": "10135",
    "vies_error": "",
    "checked_at": "2026-07-16T10:08:51Z"
  },
  {
    "piva": "IT99999999999",
    "is_valid": false,
    "name": "",
    "address": "",
    "city": "",
    "province": "",
    "postal_code": "",
    "vies_error": "INVALID",
    "checked_at": "2026-07-16T10:08:52Z"
  }
]
```

***

### Pricing

\*\*Pay Per Result: $0.01 per validated number per validated number

Validating 100 P.IVA numbers costs **$0.10**. Bulk validation of 500 costs **$0.50**.

***

### VIES Coverage

VIES covers all EU member states. This actor is optimized for **Italy (IT)** — it validates Italian Partita IVA numbers specifically. For validating VAT numbers from other EU countries, see the [EU Company Search actor](https://apify.com/agoradelmediterraneo/eu-company-search) which includes VIES validation for FR and ES.

**Note:** VIES data comes directly from each country's tax authority. For Italy, the source is the **Agenzia delle Entrate**. Not all valid Italian companies are listed in VIES — only VAT-registered businesses (i.e., those that trade commercially). Micro-enterprises and one-person freelancers may not appear.

***

### FAQ

**What is VIES?**
The VAT Information Exchange System (VIES) is an official European Commission service that lets you verify if a VAT number is registered in an EU member state. It queries each country's national tax authority directly.

**Is a valid VIES result a legal guarantee?**
VIES confirmation is widely accepted for B2B compliance purposes. However, the European Commission notes it's advisory — for legal certainty, request the company's official registration documents.

**What does INVALID mean?**
The P.IVA number either doesn't exist, belongs to a dissolved company, or the format is incorrect (must be exactly 11 digits for Italy).

**Can I get a list of Italian companies by sector or region?**
This actor validates known P.IVA numbers — it doesn't search for new companies. For B2B lead generation from French and UK registries, see the [France Company Search](https://apify.com/agoradelmediterraneo/france-company-search) and [EU Company Search](https://apify.com/agoradelmediterraneo/eu-company-search) actors.

**How fast is it?**
Approximately 4-5 P.IVA checks per second, with automatic rate limit handling. 100 numbers in ~25 seconds, 500 numbers in ~2 minutes.

# Actor input Schema

## `pivaList` (type: `array`):

List of Italian P.IVA numbers to validate (11 digits each, with or without 'IT' prefix). Max 500 per run.

## `pivaText` (type: `string`):

Alternative to pivaList: paste P.IVA numbers separated by newlines or commas.

## `includeInvalid` (type: `boolean`):

If true, invalid or not-found P.IVA numbers are included in output with is\_valid: false.

## Actor input object example

```json
{
  "includeInvalid": true
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("agoradelmediterraneo/italy-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("agoradelmediterraneo/italy-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 '{}' |
apify call agoradelmediterraneo/italy-vat-validator --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

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