Italy IPA Directory – Public Bodies, PEC & Tax Codes
Pricing
$2.00 / 1,000 results
Italy IPA Directory – Public Bodies, PEC & Tax Codes
Search and export 23,000+ Italian public bodies from the official IPA registry (AgID): municipalities, regions, health authorities, schools, universities, agencies. Clean PEC, website, tax code, category, comune, province and region. Official CC BY 4.0 open data.
Pricing
$2.00 / 1,000 results
Rating
0.0
(0)
Developer
Federico Rossi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Share
Search and export records of public administrations and other entities registered in IPA (Indice dei domicili digitali della Pubblica Amministrazione, run by AgID): about 23,700 entities, including ~7,900 municipalities, regions, local health authorities (ASL), hospitals, state schools, universities, chambers of commerce, ministries and agencies, plus companies registered only for e-invoicing or procurement.
Each record: name, codice fiscale, IPA code, category, address, comune, province, region, ISTAT and NUTS-3 codes, certified e-mail (PEC), other official e-mails, website and social links. No login, no API key, no scraping: it reads the official IPA open-data API (CC BY 4.0) live at every run.
Cerchi l'elenco PEC degli enti pubblici, gli indirizzi PEC dei comuni o il codice IPA di un ente? Questo Actor esporta i dati ufficiali IPA in CSV, Excel o JSON.
Use cases
- B2G sales & lead lists: all municipalities of a region, all ASL in Italy, all universities, with official PEC and website.
- Procurement teams: map contracting authorities by region and category.
- CRM / ERP enrichment and checks: paste a list of tax codes or IPA codes, get the official record and a status for every code.
- Research & journalism: a clean master list of the Italian public sector, joinable on ISTAT municipality codes, codice fiscale and IPA code with ANAC, OpenCoesione or ISTAT data. (Records are enriched with ISTAT/NUTS codes; no coordinates are included.)
- Scheduled refresh: with
updatedSince, fetch only records updated since your last run. This selects by update date and does not tell you which fields changed.
Two ways to run it
1. Search (no codes given): name words, categories, regions, provinces, comuni, updatedSince. All filters combine with AND.
2. Exact lookup (any fiscalCodes or ipaCodes given): only the codes are used; search, category, geography and date filters are ignored (a warning is logged). Every requested code gets a free status row (resultType: "LOOKUP_STATUS"):
| status | meaning |
|---|---|
FOUND | returned and billed |
FOUND_NOT_RETURNED | exists in IPA, but your Max results or maximum cost stopped it |
NOT_FOUND | the official query completed with no match |
INVALID_FORMAT_NOT_FOUND | not an 11-digit codice fiscale, and no match |
A code is never reported as missing unless it was actually checked. The run's LOOKUP_REPORT record has the counts.
Name search is word-prefix and accent/case-insensitive: universit matches "Università" and "Universitario", umbria matches "dell'Umbria", asl matches "ASL Asti" but not "Caslino".
Example tasks
Lombardy municipalities (the prefilled demo):
{ "categories": ["L6"], "regions": ["Lombardia"], "maxResults": 2000 }
Tax-code / IPA-code lookup:
{ "fiscalCodes": ["01199250158", "80143490581"], "ipaCodes": ["c_h501"] }
Local health authorities of one region:
{ "categories": ["L7"], "regions": ["Piemonte"] }
Use it from code
curl (runs the Actor and returns the results in one call):
curl -X POST "https://api.apify.com/v2/acts/nobler_zirconia~italy-pa-directory/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"categories": ["L6"], "regions": ["Lombardia"], "maxResults": 20}'
JavaScript (npm i apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('nobler_zirconia/italy-pa-directory').call({"categories": ["L6"], "regions": ["Lombardia"], "maxResults": 20});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("nobler_zirconia/italy-pa-directory").call(run_input={"categories": ["L6"], "regions": ["Lombardia"], "maxResults": 20})items = client.dataset(run["defaultDatasetId"]).list_items().items
You can also use it from Make, Zapier, n8n, schedules, webhooks or the Apify MCP server for AI agents.
Output
A public body (resultType: "PUBLIC_BODY", billed):
{"resultType": "PUBLIC_BODY","ipaCode": "c_f205","name": "Comune di Milano","acronym": null,"fiscalCode": "01199250158","categoryCode": "L6","type": "Pubbliche Amministrazioni","legalNatureCode": "2430","atecoCode": "84.11.10","inLiquidation": false,"istatEntityCode": "800000013","miurCode": null,"address": "Piazza Della Scala, 2","postalCode": "20121","comune": "Milano","comuneIstatCode": "015146","cadastralCode": "F205","province": "MI","region": "Lombardia","nuts3": "ITC4C","pec": ["protocollo@postacert.comune.milano.it"],"primaryPec": "protocollo@postacert.comune.milano.it","otherEmails": ["protocollo@comune.milano.it"],"website": "https://www.comune.milano.it","facebook": null,"linkedin": null,"twitter": null,"youtube": null,"lastUpdated": "2026-09-14","source": "IPA – Indice dei domicili digitali della Pubblica Amministrazione e dei gestori di pubblici servizi (AgID)","sourceUrl": "https://indicepa.gov.it/ipa-dati/","license": "CC BY 4.0","licenseUrl": "https://creativecommons.org/licenses/by/4.0/","attribution": "Fonte: IPA – AgID (CC BY 4.0); comuni: ISTAT (CC BY 4.0). Not endorsed by AgID or the Italian government.","retrievedAt": "2026-10-15T09:28:12.959Z"}
A lookup status row (free):
{"resultType": "LOOKUP_STATUS","lookupType": "fiscalCode","requestedValue": "01199250158","validFormat": true,"status": "FOUND","checked": true,"billable": false,"source": "IPA – Indice dei domicili digitali della Pubblica Amministrazione e dei gestori di pubblici servizi (AgID)","sourceUrl": "https://indicepa.gov.it/ipa-dati/","license": "CC BY 4.0","licenseUrl": "https://creativecommons.org/licenses/by/4.0/","attribution": "Fonte: IPA – AgID (CC BY 4.0); comuni: ISTAT (CC BY 4.0). Not endorsed by AgID or the Italian government.","retrievedAt": "2026-10-15T09:28:12.959Z"}
| Field | Description |
|---|---|
ipaCode | Unique IPA code |
name, acronym | Official name and acronym |
fiscalCode | Codice fiscale of the entity, as published in IPA. Often numerically equal to the VAT number, but IPA does not publish it as a partita IVA. |
categoryCode, type | IPA category and macro-type |
legalNatureCode, atecoCode, istatEntityCode, miurCode | Classification codes (nullable) |
inLiquidation | true if the entity is being wound up |
address, postalCode, comune, comuneIstatCode, cadastralCode, province, region, nuts3 | Location, enriched with ISTAT codes (nullable when IPA has no comune) |
primaryPec, pec | Certified e-mail addresses (legal digital domicile) |
otherEmails | Other official e-mails published in IPA |
website, facebook, linkedin, twitter, youtube | Official web presence (nullable) |
lastUpdated | Last update of the record in IPA |
source, sourceUrl, license, licenseUrl, attribution, retrievedAt | Provenance on every item: data source, licence (CC BY 4.0), required attribution, and the UTC time the data was retrieved |
Each run also stores a SUMMARY record: complete, truncatedReason (MAX_RESULTS / MAX_COST / null), recordsScanned, billableResults, datasetItemsWritten and the lookup counts. A full country export also checks that every page of the source was read and fails otherwise.
Pricing
$0.002 per public body returned (pay per event result, $2 per 1,000), plus Apify's tiny run-start event. Lookup status rows are free. Zero matches cost nothing beyond the start event. All ~1,500 municipalities of Lombardy cost about $3. If the source is down or returns broken data, the run fails instead of finishing with an empty "success".
Data source, licence and privacy
- Source: IPA open data – AgID, dataset Enti, licence CC BY 4.0. Attribution: "Fonte: IPA – Indice dei domicili digitali della Pubblica Amministrazione e dei gestori di pubblici servizi (AgID)". Municipality names and codes: ISTAT, CC BY 4.0.
- Privacy by design: IPA also publishes the names and titles of the officials in charge of each entity. They are never included in the output, and there is no option to include them. If you use official e-mails for outreach, you remain responsible for GDPR and Italian e-communications rules. PEC addresses are legal channels, not marketing channels.
FAQ
I need e-invoicing codes (Codice Univoco Ufficio). Use the companion Actor Italy PA e-Invoicing Codes – Codice Univoco Ufficio (SDI).
How do I keep only public administrations? Turn off Include contracting stations & public-service companies (excludes categories SA, SAG, S01, S01G, L37). This applies in search mode only.
Disclaimer
This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by AgID or any Italian government body. The data is reproduced from official open data under its licence. It is provided "as is", may contain errors or delays from the source, and is not legal or fiscal advice.