# Italy PEC Lookup - Certified Email & SDI Code by VAT (`regdata/italy-pec-lookup`) Actor

Resolve an Italian company's certified PEC email (domicilio digitale) and SDI e-invoicing code from a Partita IVA, Codice Fiscale or company name. For fatturazione elettronica, KYC and bulk enrichment. No official API.

- **URL**: https://apify.com/regdata/italy-pec-lookup.md
- **Developed by:** [getregdata](https://apify.com/regdata) (community)
- **Categories:** Lead generation, Automation, Agents
- **Stats:** 14 total users, 5 monthly users, 99.3% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 company contact records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Company Contact & E-Invoicing Lookup - PEC, SDI, VAT & Address

Resolve an **Italian company's billing identity** from a Partita IVA, Codice Fiscale, or company name - in bulk, one row per identifier. Legal name, VAT numbers, Codice Fiscale, registered office, **certified email (PEC / domicilio digitale)** and the **SDI e-invoicing destination code**: everything needed to raise a compliant Italian electronic invoice or verify a counterparty's contact details. Sourced from the official Camera di Commercio / Registro Imprese records. There is no official public API for this.

**No login, no API key, nothing to configure** - identifiers in, clean JSON out.

### What data do you get?

One record per identifier:

| Field | Example |
|---|---|
| `query` | 00159560366 |
| `denominazione` | FERRARI S.P.A. |
| `partitaIVA` | 00159560366 |
| `vatEuropeo` (EU VAT) | IT00159560366 |
| `codiceFiscale` | 00159560366 |
| `pec` (certified email) | ferrari@pec.ferrari.com |
| `codiceDestinatarioSDI` (e-invoicing) | M5UXCR1 |
| `indirizzo` (registered office) | VIA EMILIA EST 1163 - 41122 - MODENA (MO) |
| `via` | VIA EMILIA EST 1163 |
| `cap` | 41122 |
| `comune` | MODENA |
| `provincia` | MO |

The address is returned both as the registry writes it and split into street, postcode, town and province, so you can filter or post to it without parsing.

If a company has not published a PEC, `pec` is returned as `null`. `detailLevel` is `full` for a complete record, or `partial` when the registry served a reduced page - on those the SDI code is unavailable rather than absent, so a `null` is never mistaken for "none on file".

**Looking for REA, ATECO, legal form, share capital, profit or headcount?** Those are the [Italy Registro Imprese Scraper](https://apify.com/regdata/italy-registro-imprese-scraper), which searches by company name and returns the full firmographic profile. This actor is the bulk, by-identifier contact resolver.

### How much does it cost?

**Pay per result** - you are not charged for Apify platform usage, only per lookup. See the **Pricing** tab on this page for the current figure. The free Apify plan returns a small preview. No subscription, no minimum.

### Is it legal, and where does the data come from?

Data originates from the Italian **Camera di Commercio / Registro Imprese** records, surfaced through a public portal - the same free public PEC / SDI data available on the registry layer. Extraction of this public data is permitted; you remain responsible for lawful use downstream.

### How do I use it?

Click **Try it** and paste this input:

```json
{ "identifiers": ["00159560366", "Barilla", "IT00789470519"] }
```

`identifiers` is a list of Partita IVA, Codice Fiscale, or company names - one result row per identifier.

### What you can do with it

- **Fatturazione elettronica** - get the PEC, SDI destination code, VAT number and registered office needed to raise a compliant Italian electronic invoice.
- **Supplier and customer onboarding** - turn a list of VAT numbers into complete billing records for your AP/AR or ERP system.
- **KYC contact verification** - confirm a counterparty's official certified email and registered address.
- **CRM enrichment** - append legal name, EU VAT, Codice Fiscale and a split, filterable address to records you only have an identifier for.

### Run it from code

```bash
## cURL - start a run and get the dataset back
curl -X POST "https://api.apify.com/v2/acts/regdata~italy-pec-lookup/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "identifiers": ["00159560366", "Barilla"] }'
```

```javascript
// Node.js - apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('regdata/italy-pec-lookup').call({ identifiers: ['00159560366', 'Barilla'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
## Python - apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("regdata/italy-pec-lookup").call(run_input={"identifiers": ["00159560366", "Barilla"]})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### Integrations

Runs anywhere Apify does: call it from the **REST API**, **schedule** recurring enrichment, pipe results into **n8n / Make / Zapier**, or use it from any **MCP client** (Claude, Cursor) via [mcp.apify.com](https://mcp.apify.com).

### FAQ

**What is a PEC?** *Posta Elettronica Certificata* - an Italian company's legally certified email (domicilio digitale), required for official correspondence and electronic invoicing.

**What is the SDI code?** The *Codice Destinatario* used to route Italian electronic invoices (fatturazione elettronica) through the Sistema di Interscambio.

**What if a company has no PEC?** `pec` is returned as `null` (the company has not published one).

**Do I need an account, API key, or proxy?** No - none of them. Just an Apify account.

**Do you have the full company profile too?** For REA, camera di commercio, legal form, registration date, ATECO, share capital, profit and employees, use the [Italy Registro Imprese Scraper](https://apify.com/regdata/italy-registro-imprese-scraper). It searches by company name; this actor takes a list of identifiers and returns the contact and billing set.

**Which of the two should I use?** If you already know the identifier and need to invoice or contact the company, use this one - it takes a batch and returns one row each. If you are researching or segmenting companies and need firmographics, use the Registro Imprese scraper.

**Why is a field empty?** A `null` means the registry publishes nothing there. Share capital and profit are not published for every company, and neither is a PEC. Identifiers we could not check at all are never reported as "no PEC" - they are listed in an `UNVERIFIED` record in the run's key-value store so you can re-run exactly those.

**What export formats are supported?** JSON, CSV, Excel, or XML, or read live via the API.

### Related actors

Part of a suite of official government registry actors - **no public API to build or maintain**, pay per result, nothing to configure.

| Country | Actors |
|---|---|
| Poland | [BDO](https://apify.com/regdata/bdo-waste-registry-scraper) · [CRBR](https://apify.com/regdata/crbr-beneficial-owners-scraper) · [KRS (financials)](https://apify.com/regdata/poland-krs-financial-scraper) · [EKW](https://apify.com/regdata/ekw-ksiegi-wieczyste-scraper) · [KNF](https://apify.com/regdata/knf-registry-scraper) · [KRS (board)](https://apify.com/regdata/krs-fullnames-scraper) · [KRZ](https://apify.com/regdata/krz-debtor-scraper) · [MSiG](https://apify.com/regdata/msig-scraper) · [KYB check](https://apify.com/regdata/poland-kyb-check) · [PEP (Sejm)](https://apify.com/regdata/poland-parliamentary-pep-scraper) · [REGON (sites)](https://apify.com/regdata/polish-premises-prospector) · [REGON](https://apify.com/regdata/polish-regon-scraper) · [UOKiK](https://apify.com/regdata/uokik-clauses-scraper) |
| Germany | [Insolvenzbekanntmachungen](https://apify.com/regdata/germany-insolvency-scraper) · [Handelsregister](https://apify.com/regdata/germany-handelsregister-scraper) |
| Spain | [BORME](https://apify.com/regdata/borme-corporate-acts-scraper) · [Registro Mercantil](https://apify.com/regdata/spain-company-directory-scraper) · [Registro Público Concursal](https://apify.com/regdata/spain-concursal-scraper) |
| Italy | **Contact & e-invoicing (this actor)** · [Registro Imprese](https://apify.com/regdata/italy-registro-imprese-scraper) |
| Austria | [Ediktsdatei](https://apify.com/regdata/austria-ediktsdatei-scraper) · [WKO](https://apify.com/regdata/wko-business-directory-scraper) |
| France | [Societe.com](https://apify.com/regdata/societe-com-scraper) |
| Belgium | [KBO / BCE](https://apify.com/regdata/belgium-kbo-company-scraper) |
| Czechia | [ISIR](https://apify.com/regdata/czech-isir-insolvency-scraper) |
| Slovakia | [RPVS](https://apify.com/regdata/slovakia-rpvs-ubo-scraper) |
| Cyprus | [DRCOR](https://apify.com/regdata/cyprus-drcor-company-scraper) |
| Ireland | [CRO](https://apify.com/regdata/ireland-cro-company-scraper) |
| Portugal | [Publicações MJ](https://apify.com/regdata/portugal-corporate-acts-scraper) |
| Nigeria | [CAC](https://apify.com/regdata/nigeria-cac-company-scraper) |
| Colombia | [RUES](https://apify.com/regdata/colombia-rues-company-scraper) |
| USA | [California SoS](https://apify.com/regdata/california-sos-business-scraper) · [California UCC](https://apify.com/regdata/california-ucc-lien-scraper) |
| UAE | [ADGM](https://apify.com/regdata/uae-adgm-public-register-scraper) |
| Global | [Adverse media](https://apify.com/regdata/adverse-media-screener) |

**Common combinations:** company register -> [UBO](https://apify.com/regdata/crbr-beneficial-owners-scraper) -> [insolvency/debtors](https://apify.com/regdata/krz-debtor-scraper) -> [adverse media](https://apify.com/regdata/adverse-media-screener) is the standard KYB/onboarding chain.

For Poland that whole chain is one call: [Poland KYB Risk Check](https://apify.com/regdata/poland-kyb-check) takes a NIP or KRS and returns identity, beneficial owners and insolvency - screened against the company **and every beneficial owner** - as a single verdict. The component registry lookups it runs bill as usual, plus a small orchestration fee.

> Full suite: [apify.com/regdata](https://apify.com/regdata) · Callable from any MCP client via [mcp.apify.com](https://mcp.apify.com)

# Actor input Schema

## `identifiers` (type: `array`):

One or more Italian VAT numbers (Partita IVA), Codici Fiscali, or company names. One result row per identifier.

## Actor input object example

```json
{
  "identifiers": [
    "00159560366",
    "Barilla"
  ]
}
```

# Actor output Schema

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

One record per input identifier: query, denominazione, partitaIVA, vatEuropeo, codiceFiscale, indirizzo (plus via, cap, comune, provincia), pec and codiceDestinatarioSDI. `detailLevel` is 'full' for a complete record, or 'partial' when the source served a reduced page - the SDI code is then unavailable rather than absent. For REA, camera di commercio, legal form, ATECO, share capital, profit and headcount, use the Italy Registro Imprese Scraper.

# 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 = {
    "identifiers": [
        "00159560366",
        "Barilla"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("regdata/italy-pec-lookup").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 = { "identifiers": [
        "00159560366",
        "Barilla",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("regdata/italy-pec-lookup").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 '{
  "identifiers": [
    "00159560366",
    "Barilla"
  ]
}' |
apify call regdata/italy-pec-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,regdata/italy-pec-lookup"
        }
    }
}

```

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/RqAWWAw6XHY4GpMEW/builds/YEllTbqcWLNuYAaiA/openapi.json
