# Italy Municipal Direct Awards (ANAC CIG & SmartCIG) (`promptica/italy-municipal-direct-awards`) Actor

Search Italian municipal direct awards in ANAC CIG and SmartCIG, find recurring purchases, and monitor new CIGs.

- **URL**: https://apify.com/promptica/italy-municipal-direct-awards.md
- **Developed by:** [Lorenzo Talamucci](https://apify.com/promptica) (community)
- **Categories:** Business, Lead generation
- **Stats:** 1 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/actors/running/actors-in-store.md#pay-per-usage

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

## Affidamenti diretti dei Comuni italiani — ANAC CIG e SmartCIG

Cerca gli affidamenti diretti dei Comuni nei dati ufficiali ANAC CIG e SmartCIG. Trova oggetti ricorrenti e monitora i CIG entrati di recente nell'indice.
Pensato per fornitori della PA, consulenti gare e analisti degli acquisti pubblici che hanno bisogno di risultati verificabili alla fonte.

**Actor GRATIS:** nessun costo pay-per-event. Possono applicarsi i normali costi di calcolo, archiviazione e traffico del piano Apify.

### Indice e freschezza

L’actor interroga solo l’indice già costruito (`serve.py`, `index.db` e database dei vincitori). Non avvia raccolte dalle fonti durante una ricerca: il backfill iniziale è una tantum e gli aggiornamenti avvengono separatamente. Il tempo di risposta effettivo delle ricerche complete è misurato nel referto di build.

Dati aggiornati ogni notte da ANAC e Pubblicità Legale; vincitori storici dai file L.190 dei Comuni. Ultimo rilascio validato: 2026-10-14T00:22:16.231633+00:00.

**Copertura — Copertura aggiudicatari del rilascio pubblicato — «bagni chimici» e varianti dichiarate**

I numeri seguenti misurano i dati disponibili alla data del candidato, senza aspettare la raccolta L.190. **Crescerà** la copertura storica fino al 2023 con gli XML L.190 ancora in raccolta, e quella 2024–2026 con le determine automatiche. Sono incrementi attesi, non vincitori già acquisiti né percentuali garantite; le nuove evidenze vengono aggiunte nell’aggiornamento notturno, dopo i gate.

| Anno | Tipo | CIG con aggiudicatario / CIG totali | Copertura |
|---|---|---:|---:|
| 2009 | CIG | 0 / 2 | 0.0% |
| 2010 | CIG | 0 / 42 | 0.0% |
| 2011 | CIG | 1 / 240 | 0.4% |
| 2011 | SmartCIG | 0 / 640 | 0.0% |
| 2012 | CIG | 0 / 83 | 0.0% |
| 2012 | SmartCIG | 0 / 1170 | 0.0% |
| 2013 | CIG | 1 / 52 | 1.9% |
| 2013 | SmartCIG | 18 / 1147 | 1.6% |
| 2014 | CIG | 0 / 26 | 0.0% |
| 2014 | SmartCIG | 27 / 1297 | 2.1% |
| 2015 | CIG | 1 / 25 | 4.0% |
| 2015 | SmartCIG | 51 / 1225 | 4.2% |
| 2016 | CIG | 0 / 7 | 0.0% |
| 2016 | SmartCIG | 65 / 1399 | 4.6% |
| 2017 | CIG | 0 / 13 | 0.0% |
| 2017 | SmartCIG | 77 / 1509 | 5.1% |
| 2018 | CIG | 0 / 10 | 0.0% |
| 2018 | SmartCIG | 94 / 1642 | 5.7% |
| 2019 | CIG | 0 / 4 | 0.0% |
| 2019 | SmartCIG | 98 / 1930 | 5.1% |
| 2020 | CIG | 10 / 11 | 90.9% |
| 2020 | SmartCIG | 88 / 1252 | 7.0% |
| 2021 | CIG | 1 / 3 | 33.3% |
| 2021 | SmartCIG | 139 / 1519 | 9.2% |
| 2022 | CIG | 5 / 11 | 45.5% |
| 2022 | SmartCIG | 151 / 2202 | 6.9% |
| 2023 | CIG | 3 / 11 | 27.3% |
| 2023 | SmartCIG | 19 / 2643 | 0.7% |
| 2024 | CIG | 125 / 126 | 99.2% |
| 2024 | SmartCIG | 7 / 2787 | 0.3% |
| 2025 | CIG | 147 / 147 | 100.0% |
| 2025 | SmartCIG | 8 / 2843 | 0.3% |
| 2026 | CIG | 155 / 155 | 100.0% |
| 2026 | SmartCIG | 1 / 1396 | 0.1% |
| **Totale** | | **1292 / 27569** | **4.7%** |

Vincitori per fonte, stesso anno e tipo:

| Anno | Tipo | ANAC | PVL | PNRR | BDAP | SINTEL | XML | determine |
|---|---|---:|---:|---:|---:|---:|---:|---:|
| 2009 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2010 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2011 | cig | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2011 | smartcig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2012 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2012 | smartcig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2013 | cig | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 2013 | smartcig | 0 | 0 | 0 | 0 | 1 | 17 | 0 |
| 2014 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2014 | smartcig | 0 | 0 | 0 | 0 | 2 | 25 | 0 |
| 2015 | cig | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2015 | smartcig | 0 | 0 | 0 | 0 | 0 | 51 | 0 |
| 2016 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2016 | smartcig | 0 | 0 | 0 | 0 | 2 | 63 | 0 |
| 2017 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2017 | smartcig | 0 | 0 | 0 | 0 | 1 | 76 | 0 |
| 2018 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2018 | smartcig | 0 | 0 | 0 | 0 | 3 | 91 | 0 |
| 2019 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2019 | smartcig | 0 | 0 | 0 | 0 | 2 | 96 | 0 |
| 2020 | cig | 10 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2020 | smartcig | 0 | 0 | 0 | 0 | 0 | 88 | 0 |
| 2021 | cig | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 2021 | smartcig | 0 | 0 | 0 | 0 | 0 | 139 | 0 |
| 2022 | cig | 3 | 0 | 0 | 0 | 0 | 2 | 0 |
| 2022 | smartcig | 0 | 0 | 0 | 0 | 0 | 151 | 0 |
| 2023 | cig | 3 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2023 | smartcig | 0 | 0 | 0 | 0 | 0 | 19 | 0 |
| 2024 | cig | 125 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2024 | smartcig | 0 | 0 | 5 | 0 | 0 | 0 | 2 |
| 2025 | cig | 145 | 2 | 0 | 0 | 0 | 0 | 0 |
| 2025 | smartcig | 0 | 0 | 3 | 0 | 0 | 3 | 2 |
| 2026 | cig | 147 | 8 | 0 | 0 | 0 | 0 | 0 |
| 2026 | smartcig | 0 | 0 | 0 | 0 | 1 | 0 | 0 |

Per gli affidamenti diretti di piccolo importo dal 2024 il vincitore manca negli open data ANAC verificati. Le altre fonti coprono solo parte dei CIG; non si promette copertura completa. `anac_detail_url` consente il controllo manuale. PEC e indirizzo provengono da IndicePA e restano vuoti quando non pubblicati. La raccolta gratuita delle determine continua separatamente e non rallenta la ricerca.

Uno zero significa nessun nome disponibile nelle fonti elaborate per quella riga, non l’assenza di un aggiudicatario. I periodi/tipi assenti dalla tabella non hanno CIG nella coorte; i record senza data, se presenti, sono indicati separatamente. L’actor non deduce vincitori dai partecipanti e mantiene vuoti i valori sconosciuti. La baseline storica ANAC di 435 nomi riportata sotto non è la copertura corrente di questa build.

**Copertura delle altre ricerche, stesso rilascio**

| Ricerca | Anno | Tipo | Vincitori / CIG | ANAC | PVL | PNRR | BDAP | SINTEL | XML | determine |
|---|---|---|---:|---:|---:|---:|---:|---:|---:|---:|
| sfalcio erba | 2007 | cig | 0 / 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2008 | cig | 0 / 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2009 | cig | 5 / 29 | 5 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2010 | cig | 5 / 108 | 5 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2011 | cig | 26 / 515 | 26 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2011 | smartcig | 0 / 1188 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2012 | cig | 11 / 184 | 11 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2012 | smartcig | 4 / 2173 | 0 | 0 | 0 | 0 | 0 | 4 | 0 |
| sfalcio erba | 2013 | cig | 14 / 110 | 14 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2013 | smartcig | 5 / 2313 | 0 | 0 | 0 | 0 | 1 | 4 | 0 |
| sfalcio erba | 2014 | cig | 22 / 79 | 22 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2014 | smartcig | 16 / 3057 | 0 | 0 | 0 | 0 | 3 | 13 | 0 |
| sfalcio erba | 2015 | cig | 19 / 49 | 19 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2015 | smartcig | 12 / 2324 | 0 | 0 | 0 | 0 | 6 | 6 | 0 |
| sfalcio erba | 2016 | cig | 7 / 16 | 7 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2016 | smartcig | 24 / 2900 | 0 | 0 | 0 | 0 | 2 | 22 | 0 |
| sfalcio erba | 2017 | cig | 14 / 30 | 12 | 0 | 0 | 0 | 0 | 2 | 0 |
| sfalcio erba | 2017 | smartcig | 16 / 2882 | 0 | 0 | 0 | 0 | 3 | 13 | 0 |
| sfalcio erba | 2018 | cig | 17 / 30 | 17 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2018 | smartcig | 36 / 3337 | 0 | 0 | 0 | 0 | 2 | 34 | 0 |
| sfalcio erba | 2019 | cig | 14 / 38 | 12 | 0 | 0 | 0 | 0 | 2 | 0 |
| sfalcio erba | 2019 | smartcig | 41 / 3797 | 0 | 0 | 0 | 0 | 1 | 40 | 0 |
| sfalcio erba | 2020 | cig | 28 / 62 | 25 | 0 | 0 | 0 | 0 | 3 | 0 |
| sfalcio erba | 2020 | smartcig | 57 / 4099 | 0 | 0 | 0 | 0 | 2 | 55 | 0 |
| sfalcio erba | 2021 | cig | 61 / 121 | 60 | 0 | 0 | 0 | 0 | 1 | 0 |
| sfalcio erba | 2021 | smartcig | 57 / 4079 | 0 | 0 | 0 | 0 | 4 | 53 | 0 |
| sfalcio erba | 2022 | cig | 73 / 135 | 73 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2022 | smartcig | 38 / 3768 | 0 | 0 | 0 | 0 | 0 | 38 | 0 |
| sfalcio erba | 2023 | cig | 86 / 181 | 85 | 0 | 0 | 0 | 0 | 1 | 0 |
| sfalcio erba | 2023 | smartcig | 8 / 4498 | 0 | 0 | 0 | 0 | 2 | 6 | 0 |
| sfalcio erba | 2024 | cig | 1206 / 1210 | 1203 | 3 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2024 | smartcig | 2 / 3354 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| sfalcio erba | 2025 | cig | 1310 / 1310 | 1294 | 16 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2025 | smartcig | 2 / 2941 | 0 | 0 | 0 | 0 | 0 | 2 | 0 |
| sfalcio erba | 2026 | cig | 1127 / 1128 | 1021 | 106 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2026 | smartcig | 1 / 1496 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| trasporto scolastico | 2007 | cig | 0 / 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2008 | cig | 1 / 10 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2009 | cig | 4 / 34 | 4 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2010 | cig | 21 / 586 | 21 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2011 | cig | 62 / 1897 | 62 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2011 | smartcig | 0 / 5188 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2012 | cig | 44 / 709 | 44 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2012 | smartcig | 4 / 10815 | 0 | 0 | 0 | 0 | 0 | 4 | 0 |
| trasporto scolastico | 2013 | cig | 54 / 507 | 53 | 0 | 0 | 0 | 0 | 1 | 0 |
| trasporto scolastico | 2013 | smartcig | 36 / 12465 | 0 | 0 | 0 | 0 | 5 | 31 | 0 |
| trasporto scolastico | 2014 | cig | 75 / 315 | 75 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2014 | smartcig | 74 / 14276 | 0 | 0 | 0 | 0 | 15 | 59 | 0 |
| trasporto scolastico | 2015 | cig | 73 / 189 | 72 | 0 | 0 | 0 | 0 | 1 | 0 |
| trasporto scolastico | 2015 | smartcig | 58 / 12433 | 0 | 0 | 0 | 0 | 16 | 42 | 0 |
| trasporto scolastico | 2016 | cig | 57 / 138 | 56 | 0 | 0 | 0 | 1 | 0 | 0 |
| trasporto scolastico | 2016 | smartcig | 80 / 14586 | 0 | 0 | 0 | 0 | 8 | 72 | 0 |
| trasporto scolastico | 2017 | cig | 73 / 168 | 69 | 0 | 0 | 0 | 0 | 4 | 0 |
| trasporto scolastico | 2017 | smartcig | 101 / 15032 | 0 | 0 | 0 | 0 | 7 | 94 | 0 |
| trasporto scolastico | 2018 | cig | 111 / 208 | 109 | 0 | 0 | 0 | 0 | 2 | 0 |
| trasporto scolastico | 2018 | smartcig | 143 / 15418 | 0 | 0 | 0 | 0 | 4 | 139 | 0 |
| trasporto scolastico | 2019 | cig | 93 / 211 | 89 | 0 | 0 | 0 | 0 | 4 | 0 |
| trasporto scolastico | 2019 | smartcig | 142 / 15967 | 0 | 0 | 0 | 0 | 6 | 136 | 0 |
| trasporto scolastico | 2020 | cig | 143 / 351 | 136 | 0 | 0 | 0 | 0 | 7 | 0 |
| trasporto scolastico | 2020 | smartcig | 112 / 13438 | 0 | 0 | 0 | 0 | 4 | 108 | 0 |
| trasporto scolastico | 2021 | cig | 308 / 774 | 296 | 0 | 0 | 0 | 2 | 10 | 0 |
| trasporto scolastico | 2021 | smartcig | 215 / 14496 | 0 | 0 | 0 | 0 | 8 | 207 | 0 |
| trasporto scolastico | 2022 | cig | 303 / 764 | 285 | 0 | 0 | 0 | 1 | 17 | 0 |
| trasporto scolastico | 2022 | smartcig | 225 / 13364 | 0 | 0 | 0 | 0 | 3 | 222 | 0 |
| trasporto scolastico | 2023 | cig | 324 / 955 | 322 | 0 | 0 | 0 | 1 | 1 | 0 |
| trasporto scolastico | 2023 | smartcig | 27 / 14344 | 0 | 0 | 0 | 0 | 3 | 24 | 0 |
| trasporto scolastico | 2024 | cig | 2523 / 2540 | 2521 | 2 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2024 | smartcig | 1 / 11826 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| trasporto scolastico | 2025 | cig | 2785 / 2785 | 2750 | 35 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2025 | smartcig | 11 / 10415 | 0 | 0 | 1 | 0 | 0 | 10 | 0 |
| trasporto scolastico | 2026 | cig | 2202 / 2206 | 2045 | 157 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2026 | smartcig | 0 / 5189 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

### Esempio: bagni chimici

```json
{"keyword":"bagni chimici","maxResults":1,"outputMode":"items"}
```

Un run verificato dell'actor sull'indice pubblico Promptica ha restituito il **13 ottobre 2026** questo riepilogo `OUTPUT` (campi selezionati):

```json
{"keyword":"bagni chimici","matched":27569,"emitted":1,"truncated_at_index":false}
```

La prima riga del dataset è un record ANAC reale (campi selezionati):

```json
{
  "record_type": "award",
  "cig": "BD1BCA433F",
  "title": "OFFERTA PER FORNITURA BAGNI CHIMICI",
  "municipality": "Anzio",
  "date": "2026-09-28",
  "amount_eur": 5940,
  "winner": null,
  "source": "cig"
}
```

I **27.569** risultati coprono gli affidamenti diretti comunali **dal 2007 agli ultimi rilasci 2026 indicizzati** per «bagni chimici» e le varianti dichiarate. `maxResults` limita le righe salvate; `OUTPUT.matched` indica il totale. Il conteggio può cambiare quando ANAC pubblica nuovi dati. Ogni affidamento include CIG e `source_url` per la verifica su ANAC.

### Ricerca e monitoraggio

- `keyword` cerca nell'oggetto ANAC. `expandSynonyms=true` (default) aggiunge varianti dichiarate per «bagni chimici», «sfalcio erba» e «trasporto scolastico»; le altre parole sono cercate come frasi esatte. Con `false` cerca solo la frase inserita.
- Filtra per nome esatto di `region`, `province` o `municipality` e per `dateFrom`/`dateTo` (`YYYY-MM-DD`). Per CIG si usa la data di pubblicazione ANAC, per SmartCIG quella di comunicazione. `dateMissing=true` seleziona i record senza data e non si combina con un intervallo.
- `outputMode` sceglie affidamenti `items`, gruppi `groups` o `both`. Un gruppo collega oggetti simili dello stesso Comune in almeno due anni. `estimated_next_date` è una stima statistica, mai un rinnovo annunciato.
- Per un monitor schedulato imposta `onlyNew=true` e riusa lo stesso `monitorStore`. Il primo run registra tutti i CIG corrispondenti; i successivi emettono quelli nuovi. Cambiare ricerca o filtri crea una baseline distinta.
- `maxResults` è 1.000.000 per default: la run restituisce **tutti** i risultati, a meno che tu non lo abbassi per un'anteprima (l'actor è gratuito, ma Apify fa pagare a chi lo lancia il salvataggio delle righe: circa $5 per milione, es. «bagni chimici» 27.569 righe ≈ $0,14, «trasporto scolastico» 214.600 righe ≈ $1,07). L'actor legge tutti i CIG corrispondenti a pagine prima di applicare questo limite alle righe del dataset. `indexUrl` è un override facoltativo; per default si usa l'**indice pubblico Promptica già costruito**.

### Fonte e accuratezza

L'indice copre i rilasci ANAC CIG dal 2007 e SmartCIG dal 2011. Un record entra se ANAC lo classifica come affidamento diretto e la stazione appaltante è identificata come Comune. Il riconoscimento usa i codici fiscali IndicePA e la geografia ISTAT, con fallback sul nome per i Comuni storici. L'aggiudicatario è unito per CIG e identità del Comune da ANAC, Pubblicità Legale, PNRR Italia Domani, BDAP MOP, SINTEL Lombardia, XML L.190 comunali e determine dei Comuni, in quest’ordine di precedenza; i dati integrativi entrano nel servizio dopo i controlli e l’ok della regia allo scambio. PNRR è in staging; BDAP, SINTEL e L.190 fanno parte della chiusura in corso. Le determine vengono raccolte da un servizio separato, con PDF e regex, senza LLM né costo esterno: questa raccolta non blocca il rilascio.

Ogni riga può includere ragione sociale e CF/P.IVA dell'aggiudicatario, importo e data di aggiudicazione, ribasso, CPV, durata prevista, date contrattuali, SAL, PEC e indirizzo del Comune. I campi vengono dalle fonti corrispondenti ANAC, Pubblicità Legale, PNRR Italia Domani, BDAP MOP, SINTEL Lombardia, XML L.190 comunali, determine dei Comuni e IndicePA, secondo la provenienza indicata; quando la fonte non pubblica un valore, questo resta vuoto. `cig_status` è lo stato del CIG ANAC; `contract_status` resta vuoto se manca uno stato contrattuale distinto. `transparency_url` è il sito del Comune in IndicePA; `act_url` può indicare un collegamento pubblicato da ANAC Pubblicità Legale; `act_url_verified=true` indica che il contenuto è stato verificato per quel CIG. La presenza del link da sola non attesta questa verifica. Controlla le coperture misurate qui sotto prima di usare un campo per contattare un fornitore.

**Baseline storica dei campi, precedente alla build dei vincitori, per la ricerca fissa di 27.569 CIG «bagni chimici», 13 ottobre 2026** (vecchio indice → indice arricchito):

| Campo | Righe piene |
|---|---:|
| Aggiudicatario | 290 → 435 |
| CF/P.IVA aggiudicatario | 0 → 435 |
| Importo / data aggiudicazione | 0 → 438 / 439 |
| Codice CPV | 0 → 968 |
| Data inizio contratto | 0 → 56 |
| PEC / indirizzo Comune | 0 → 27.292 / 27.292 |
| Sito Comune (`transparency_url`) | 0 → 27.271 |
| Link atto verificato (`act_url`) | 0 → 10 |
| Ufficio / stato CIG ANAC | 0 → 27.569 / 27.569 |
| RUP / stato distinto del contratto | 0 → 0 / 0 |

Lo snapshot ANAC aggiudicatari più sette incrementi mensili spiegano tutti i 435 aggiudicatari della ricerca; il confronto diretto non ha trovato righe mancanti né valori diversi.

**Test di accettazione del 13 ottobre 2026:** scansione indipendente di tutti i **420 ZIP ufficiali CIG/SmartCIG** e confronto con run locali dell'actor sull'indice pubblico. Stessi filtri per affidamento diretto, Comune, anno e sinonimi. Ogni cella è **CSV ANAC / actor**. Gli insiemi di CIG coincidono: **0 CIG diversi in 63 confronti anno-parola**; il controllo ha confrontato anche gli identificativi, non soltanto i conteggi.

| Anno | Bagni chimici | Sfalcio erba | Trasporto scolastico |
|---|---:|---:|---:|
| 2007 | 0/0 | 6/6 | 1/1 |
| 2008 | 0/0 | 5/5 | 10/10 |
| 2009 | 2/2 | 29/29 | 34/34 |
| 2010 | 42/42 | 108/108 | 586/586 |
| 2011 | 880/880 | 1.703/1.703 | 7.085/7.085 |
| 2012 | 1.253/1.253 | 2.357/2.357 | 11.524/11.524 |
| 2013 | 1.199/1.199 | 2.423/2.423 | 12.972/12.972 |
| 2014 | 1.323/1.323 | 3.136/3.136 | 14.591/14.591 |
| 2015 | 1.250/1.250 | 2.373/2.373 | 12.622/12.622 |
| 2016 | 1.406/1.406 | 2.916/2.916 | 14.724/14.724 |
| 2017 | 1.522/1.522 | 2.912/2.912 | 15.200/15.200 |
| 2018 | 1.652/1.652 | 3.367/3.367 | 15.626/15.626 |
| 2019 | 1.934/1.934 | 3.835/3.835 | 16.178/16.178 |
| 2020 | 1.263/1.263 | 4.161/4.161 | 13.789/13.789 |
| 2021 | 1.522/1.522 | 4.200/4.200 | 15.270/15.270 |
| 2022 | 2.213/2.213 | 3.903/3.903 | 14.128/14.128 |
| 2023 | 2.654/2.654 | 4.679/4.679 | 15.299/15.299 |
| 2024 | 2.913/2.913 | 4.564/4.564 | 14.366/14.366 |
| 2025 | 2.990/2.990 | 4.251/4.251 | 13.200/13.200 |
| 2026 | 1.551/1.551 | 2.624/2.624 | 7.395/7.395 |
| Senza data | 0/0 | 0/0 | 0/0 |
| **Totale** | **27.569/27.569** | **53.552/53.552** | **214.600/214.600** |

### Limiti

- `winner` è `null` quando le fonti validate del rilascio servito non forniscono un aggiudicatario per quel CIG. Nella baseline ANAC precedente alla build, lo snapshot e sette incrementi mensili non avevano un aggiudicatario per **nessuno dei 26.601 SmartCIG**; lo avevano per 435 dei 968 CIG ordinari. La copertura della build dei vincitori è indicata separatamente per periodo e tipo. L'actor non deduce il fornitore da partecipanti, oggetto o nome dell'ente.
- Per Comuni storici assenti dagli elenchi ISTAT e IndicePA attuali si può usare il nome ANAC, ma codice ISTAT o provincia possono restare vuoti.
- Sono dati strutturati delle fonti indicate, con collegamenti agli atti quando disponibili. ANAC può pubblicare correzioni o dati arretrati; controlla sempre data e fonte prima di agire.

### FAQ

**«Nuovo» significa contratto appena firmato?** Significa CIG visto per la prima volta da questo monitor. ANAC può pubblicare record tardivi o correzioni.

**Cosa succede se l'indice non risponde o l'input è errato?** Il run termina con zero righe e una spiegazione in `OUTPUT`, senza inventare risultati.

**C'è un costo pay-per-event?** No. L'actor è gratis; restano gli eventuali normali costi della piattaforma Apify.

### Changelog

- **Ottobre 2026:** indice ANAC pubblico, filtri comunali e temporali, gruppi ricorrenti, monitoraggio e verifica integrale della parità dei CIG.

***

## English — Italy Municipal Direct Awards — ANAC CIG & SmartCIG

Find direct awards issued by Italian municipalities in official ANAC CIG and SmartCIG data. Search contract subjects, spot recurring purchases, and monitor newly indexed CIGs.
Built for public-sector suppliers, tender consultants, and procurement analysts who need a traceable starting point for research.

**FREE Actor:** no pay-per-event charge. Standard Apify compute, storage, and transfer charges may still apply under your plan.

### Index and freshness

The Actor queries only the prebuilt index (`serve.py`, `index.db`, and the winners database). Searches do not trigger source collection: the initial backfill runs once and updates run separately. Actual complete-query response times are measured in the build report.

Data updated every night from ANAC and Pubblicità Legale; historical winners from municipalities’ L.190 files. Last validated release: 2026-10-14T00:22:16.231633+00:00.

**Copertura — Winner coverage of the published release — “bagni chimici” and declared variants**

The numbers below measure data available at the candidate date, without waiting for L.190 collection. **Coverage will grow** for years through 2023 as remaining L.190 XML files are collected, and for 2024–2026 through automatic municipal award documents. These are expected additions, not already acquired winners or guaranteed percentages; newly verified evidence is merged during nightly updates after gates pass.

| Year | Type | CIGs with a winner / total CIGs | Coverage |
|---|---|---:|---:|
| 2009 | CIG | 0 / 2 | 0.0% |
| 2010 | CIG | 0 / 42 | 0.0% |
| 2011 | CIG | 1 / 240 | 0.4% |
| 2011 | SmartCIG | 0 / 640 | 0.0% |
| 2012 | CIG | 0 / 83 | 0.0% |
| 2012 | SmartCIG | 0 / 1170 | 0.0% |
| 2013 | CIG | 1 / 52 | 1.9% |
| 2013 | SmartCIG | 18 / 1147 | 1.6% |
| 2014 | CIG | 0 / 26 | 0.0% |
| 2014 | SmartCIG | 27 / 1297 | 2.1% |
| 2015 | CIG | 1 / 25 | 4.0% |
| 2015 | SmartCIG | 51 / 1225 | 4.2% |
| 2016 | CIG | 0 / 7 | 0.0% |
| 2016 | SmartCIG | 65 / 1399 | 4.6% |
| 2017 | CIG | 0 / 13 | 0.0% |
| 2017 | SmartCIG | 77 / 1509 | 5.1% |
| 2018 | CIG | 0 / 10 | 0.0% |
| 2018 | SmartCIG | 94 / 1642 | 5.7% |
| 2019 | CIG | 0 / 4 | 0.0% |
| 2019 | SmartCIG | 98 / 1930 | 5.1% |
| 2020 | CIG | 10 / 11 | 90.9% |
| 2020 | SmartCIG | 88 / 1252 | 7.0% |
| 2021 | CIG | 1 / 3 | 33.3% |
| 2021 | SmartCIG | 139 / 1519 | 9.2% |
| 2022 | CIG | 5 / 11 | 45.5% |
| 2022 | SmartCIG | 151 / 2202 | 6.9% |
| 2023 | CIG | 3 / 11 | 27.3% |
| 2023 | SmartCIG | 19 / 2643 | 0.7% |
| 2024 | CIG | 125 / 126 | 99.2% |
| 2024 | SmartCIG | 7 / 2787 | 0.3% |
| 2025 | CIG | 147 / 147 | 100.0% |
| 2025 | SmartCIG | 8 / 2843 | 0.3% |
| 2026 | CIG | 155 / 155 | 100.0% |
| 2026 | SmartCIG | 1 / 1396 | 0.1% |
| **Total** | | **1292 / 27569** | **4.7%** |

Winners by source, same year and record type:

| Year | Type | ANAC | PVL | PNRR | BDAP | SINTEL | XML | determine |
|---|---|---:|---:|---:|---:|---:|---:|---:|
| 2009 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2010 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2011 | cig | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2011 | smartcig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2012 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2012 | smartcig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2013 | cig | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 2013 | smartcig | 0 | 0 | 0 | 0 | 1 | 17 | 0 |
| 2014 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2014 | smartcig | 0 | 0 | 0 | 0 | 2 | 25 | 0 |
| 2015 | cig | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2015 | smartcig | 0 | 0 | 0 | 0 | 0 | 51 | 0 |
| 2016 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2016 | smartcig | 0 | 0 | 0 | 0 | 2 | 63 | 0 |
| 2017 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2017 | smartcig | 0 | 0 | 0 | 0 | 1 | 76 | 0 |
| 2018 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2018 | smartcig | 0 | 0 | 0 | 0 | 3 | 91 | 0 |
| 2019 | cig | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2019 | smartcig | 0 | 0 | 0 | 0 | 2 | 96 | 0 |
| 2020 | cig | 10 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2020 | smartcig | 0 | 0 | 0 | 0 | 0 | 88 | 0 |
| 2021 | cig | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
| 2021 | smartcig | 0 | 0 | 0 | 0 | 0 | 139 | 0 |
| 2022 | cig | 3 | 0 | 0 | 0 | 0 | 2 | 0 |
| 2022 | smartcig | 0 | 0 | 0 | 0 | 0 | 151 | 0 |
| 2023 | cig | 3 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2023 | smartcig | 0 | 0 | 0 | 0 | 0 | 19 | 0 |
| 2024 | cig | 125 | 0 | 0 | 0 | 0 | 0 | 0 |
| 2024 | smartcig | 0 | 0 | 5 | 0 | 0 | 0 | 2 |
| 2025 | cig | 145 | 2 | 0 | 0 | 0 | 0 | 0 |
| 2025 | smartcig | 0 | 0 | 3 | 0 | 0 | 3 | 2 |
| 2026 | cig | 147 | 8 | 0 | 0 | 0 | 0 | 0 |
| 2026 | smartcig | 0 | 0 | 0 | 0 | 1 | 0 | 0 |

For small direct awards from 2024 onward, verified ANAC open data omit the winner. Other sources cover only some CIGs; complete coverage is not promised. `anac_detail_url` supports manual checking. PEC and addresses come from IndicePA and remain empty when unpublished. Free municipal document collection runs separately and does not delay searches.

A zero means no name is available from the sources processed for that row, not that no winner exists. Periods/types omitted from the table have no CIGs in this cohort; undated records, if present, appear separately. The Actor does not infer winners from participants and leaves unknown values empty. The historical ANAC baseline of 435 names below is not the current coverage of this build.

**Coverage of other searches, same release**

| Query | Year | Type | Winners / CIGs | ANAC | PVL | PNRR | BDAP | SINTEL | XML | determine |
|---|---|---|---:|---:|---:|---:|---:|---:|---:|---:|
| sfalcio erba | 2007 | cig | 0 / 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2008 | cig | 0 / 5 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2009 | cig | 5 / 29 | 5 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2010 | cig | 5 / 108 | 5 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2011 | cig | 26 / 515 | 26 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2011 | smartcig | 0 / 1188 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2012 | cig | 11 / 184 | 11 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2012 | smartcig | 4 / 2173 | 0 | 0 | 0 | 0 | 0 | 4 | 0 |
| sfalcio erba | 2013 | cig | 14 / 110 | 14 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2013 | smartcig | 5 / 2313 | 0 | 0 | 0 | 0 | 1 | 4 | 0 |
| sfalcio erba | 2014 | cig | 22 / 79 | 22 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2014 | smartcig | 16 / 3057 | 0 | 0 | 0 | 0 | 3 | 13 | 0 |
| sfalcio erba | 2015 | cig | 19 / 49 | 19 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2015 | smartcig | 12 / 2324 | 0 | 0 | 0 | 0 | 6 | 6 | 0 |
| sfalcio erba | 2016 | cig | 7 / 16 | 7 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2016 | smartcig | 24 / 2900 | 0 | 0 | 0 | 0 | 2 | 22 | 0 |
| sfalcio erba | 2017 | cig | 14 / 30 | 12 | 0 | 0 | 0 | 0 | 2 | 0 |
| sfalcio erba | 2017 | smartcig | 16 / 2882 | 0 | 0 | 0 | 0 | 3 | 13 | 0 |
| sfalcio erba | 2018 | cig | 17 / 30 | 17 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2018 | smartcig | 36 / 3337 | 0 | 0 | 0 | 0 | 2 | 34 | 0 |
| sfalcio erba | 2019 | cig | 14 / 38 | 12 | 0 | 0 | 0 | 0 | 2 | 0 |
| sfalcio erba | 2019 | smartcig | 41 / 3797 | 0 | 0 | 0 | 0 | 1 | 40 | 0 |
| sfalcio erba | 2020 | cig | 28 / 62 | 25 | 0 | 0 | 0 | 0 | 3 | 0 |
| sfalcio erba | 2020 | smartcig | 57 / 4099 | 0 | 0 | 0 | 0 | 2 | 55 | 0 |
| sfalcio erba | 2021 | cig | 61 / 121 | 60 | 0 | 0 | 0 | 0 | 1 | 0 |
| sfalcio erba | 2021 | smartcig | 57 / 4079 | 0 | 0 | 0 | 0 | 4 | 53 | 0 |
| sfalcio erba | 2022 | cig | 73 / 135 | 73 | 0 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2022 | smartcig | 38 / 3768 | 0 | 0 | 0 | 0 | 0 | 38 | 0 |
| sfalcio erba | 2023 | cig | 86 / 181 | 85 | 0 | 0 | 0 | 0 | 1 | 0 |
| sfalcio erba | 2023 | smartcig | 8 / 4498 | 0 | 0 | 0 | 0 | 2 | 6 | 0 |
| sfalcio erba | 2024 | cig | 1206 / 1210 | 1203 | 3 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2024 | smartcig | 2 / 3354 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| sfalcio erba | 2025 | cig | 1310 / 1310 | 1294 | 16 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2025 | smartcig | 2 / 2941 | 0 | 0 | 0 | 0 | 0 | 2 | 0 |
| sfalcio erba | 2026 | cig | 1127 / 1128 | 1021 | 106 | 0 | 0 | 0 | 0 | 0 |
| sfalcio erba | 2026 | smartcig | 1 / 1496 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| trasporto scolastico | 2007 | cig | 0 / 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2008 | cig | 1 / 10 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2009 | cig | 4 / 34 | 4 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2010 | cig | 21 / 586 | 21 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2011 | cig | 62 / 1897 | 62 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2011 | smartcig | 0 / 5188 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2012 | cig | 44 / 709 | 44 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2012 | smartcig | 4 / 10815 | 0 | 0 | 0 | 0 | 0 | 4 | 0 |
| trasporto scolastico | 2013 | cig | 54 / 507 | 53 | 0 | 0 | 0 | 0 | 1 | 0 |
| trasporto scolastico | 2013 | smartcig | 36 / 12465 | 0 | 0 | 0 | 0 | 5 | 31 | 0 |
| trasporto scolastico | 2014 | cig | 75 / 315 | 75 | 0 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2014 | smartcig | 74 / 14276 | 0 | 0 | 0 | 0 | 15 | 59 | 0 |
| trasporto scolastico | 2015 | cig | 73 / 189 | 72 | 0 | 0 | 0 | 0 | 1 | 0 |
| trasporto scolastico | 2015 | smartcig | 58 / 12433 | 0 | 0 | 0 | 0 | 16 | 42 | 0 |
| trasporto scolastico | 2016 | cig | 57 / 138 | 56 | 0 | 0 | 0 | 1 | 0 | 0 |
| trasporto scolastico | 2016 | smartcig | 80 / 14586 | 0 | 0 | 0 | 0 | 8 | 72 | 0 |
| trasporto scolastico | 2017 | cig | 73 / 168 | 69 | 0 | 0 | 0 | 0 | 4 | 0 |
| trasporto scolastico | 2017 | smartcig | 101 / 15032 | 0 | 0 | 0 | 0 | 7 | 94 | 0 |
| trasporto scolastico | 2018 | cig | 111 / 208 | 109 | 0 | 0 | 0 | 0 | 2 | 0 |
| trasporto scolastico | 2018 | smartcig | 143 / 15418 | 0 | 0 | 0 | 0 | 4 | 139 | 0 |
| trasporto scolastico | 2019 | cig | 93 / 211 | 89 | 0 | 0 | 0 | 0 | 4 | 0 |
| trasporto scolastico | 2019 | smartcig | 142 / 15967 | 0 | 0 | 0 | 0 | 6 | 136 | 0 |
| trasporto scolastico | 2020 | cig | 143 / 351 | 136 | 0 | 0 | 0 | 0 | 7 | 0 |
| trasporto scolastico | 2020 | smartcig | 112 / 13438 | 0 | 0 | 0 | 0 | 4 | 108 | 0 |
| trasporto scolastico | 2021 | cig | 308 / 774 | 296 | 0 | 0 | 0 | 2 | 10 | 0 |
| trasporto scolastico | 2021 | smartcig | 215 / 14496 | 0 | 0 | 0 | 0 | 8 | 207 | 0 |
| trasporto scolastico | 2022 | cig | 303 / 764 | 285 | 0 | 0 | 0 | 1 | 17 | 0 |
| trasporto scolastico | 2022 | smartcig | 225 / 13364 | 0 | 0 | 0 | 0 | 3 | 222 | 0 |
| trasporto scolastico | 2023 | cig | 324 / 955 | 322 | 0 | 0 | 0 | 1 | 1 | 0 |
| trasporto scolastico | 2023 | smartcig | 27 / 14344 | 0 | 0 | 0 | 0 | 3 | 24 | 0 |
| trasporto scolastico | 2024 | cig | 2523 / 2540 | 2521 | 2 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2024 | smartcig | 1 / 11826 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
| trasporto scolastico | 2025 | cig | 2785 / 2785 | 2750 | 35 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2025 | smartcig | 11 / 10415 | 0 | 0 | 1 | 0 | 0 | 10 | 0 |
| trasporto scolastico | 2026 | cig | 2202 / 2206 | 2045 | 157 | 0 | 0 | 0 | 0 | 0 |
| trasporto scolastico | 2026 | smartcig | 0 / 5189 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |

### Try it: chemical toilets

```json
{"keyword":"bagni chimici","maxResults":1,"outputMode":"items"}
```

A verified Actor run against the public Promptica index returned this `OUTPUT` summary on **13 October 2026** (selected fields):

```json
{"keyword":"bagni chimici","matched":27569,"emitted":1,"truncated_at_index":false}
```

The first dataset item was a real ANAC record (selected fields):

```json
{
  "record_type": "award",
  "cig": "BD1BCA433F",
  "title": "OFFERTA PER FORNITURA BAGNI CHIMICI",
  "municipality": "Anzio",
  "date": "2026-09-28",
  "amount_eur": 5940,
  "winner": null,
  "source": "cig"
}
```

The **27,569** matches cover municipal direct awards from **2007 through the latest indexed 2026 releases** for “bagni chimici” and its declared variants. `maxResults` limits dataset rows; `OUTPUT.matched` reports the full match count. Counts can change as ANAC publishes updates. Each award also includes a CIG and `source_url` so you can verify it at ANAC.

### Search and monitor

- `keyword` searches the ANAC subject. `expandSynonyms=true` (default) adds declared variants for “bagni chimici,” “sfalcio erba,” and “trasporto scolastico”; other keywords are searched as exact phrases. Set it to `false` to search only your phrase.
- Filter by exact `region`, `province`, or `municipality` name, and by `dateFrom`/`dateTo` (`YYYY-MM-DD`). Dates use ANAC publication for CIG and communication for SmartCIG. `dateMissing=true` selects undated records and cannot be combined with a date range.
- `outputMode` selects individual `items`, `groups` of recurring awards, or `both`. A group links similar subjects from the same municipality across at least two years. `estimated_next_date` is a statistical estimate, never an announced renewal.
- For scheduled monitoring, set `onlyNew=true` and keep the same `monitorStore` name. The first run establishes a baseline for every matching CIG; later runs emit newly seen CIGs. Changing the query or filters starts a separate baseline.
- `maxResults` defaults to 1,000,000, so a run returns **all** matches unless you lower it for a quick preview (the Actor is free, but Apify bills dataset writes to whoever runs it: about $5 per million rows, e.g. “bagni chimici” 27,569 rows ≈ $0.14, “trasporto scolastico” 214,600 rows ≈ $1.07). The Actor reads every matching CIG in pages before applying this dataset row limit. `indexUrl` is an optional override; the default is the **prebuilt public Promptica index**.

### Data and accuracy

The index covers ANAC CIG releases from 2007 onward and SmartCIG releases from 2011 onward. A record is included when ANAC marks it as a direct award and the contracting authority is identified as a municipality. The municipality match uses IndicePA tax IDs and ISTAT geography, with a name-based fallback for historical municipalities. Winners are joined by CIG and municipality identity from ANAC, Pubblicità Legale, PNRR Italia Domani, BDAP MOP, SINTEL Lombardia, municipal L.190 XML files, and municipal award documents, in that order of priority; supplementary data enter the service after checks pass and release approval is given. PNRR is in staging; BDAP, SINTEL and L.190 are part of the closure in progress. Municipal award documents are collected separately using PDF text and regular expressions, without LLMs or external costs; that collection does not block release.

Each item can include the supplier name and tax ID, award amount and date, discount, CPV, planned duration, contract dates, progress records, and the municipality's PEC and address. These fields come from matching ANAC, Pubblicità Legale, PNRR Italia Domani, BDAP MOP, SINTEL Lombardia, municipal L.190 XML, municipal award documents, and IndicePA records, according to their stated provenance; missing source values stay empty. `cig_status` is ANAC's CIG status, while `contract_status` is left empty when no separate contract status is published. `transparency_url` is the municipality website supplied by IndicePA; `act_url` may point to a link published by ANAC Pubblicità Legale; `act_url_verified=true` means its contents were checked for that CIG. A link alone does not establish that verification. See the measured coverage below before relying on any field for outreach.

**Historical field baseline, before the winner build, for the fixed 27,569-record chemical-toilets search, 13 October 2026** (old index → enriched index):

| Field | Records with a value |
|---|---:|
| Supplier name | 290 → 435 |
| Supplier tax ID | 0 → 435 |
| Award amount / award date | 0 → 438 / 439 |
| CPV code | 0 → 968 |
| Contract start date | 0 → 56 |
| Municipality PEC / address | 0 → 27,292 / 27,292 |
| Municipality website (`transparency_url`) | 0 → 27,271 |
| Verified act link (`act_url`) | 0 → 10 |
| Buyer department / ANAC CIG status | 0 → 27,569 / 27,569 |
| RUP / separate contract status | 0 → 0 / 0 |

ANAC's awardee snapshot plus seven monthly releases account for all 435 suppliers in this search; a direct comparison found no missing or differing awardee rows.

**Acceptance snapshot, 13 October 2026:** an independent scan of all **420 official CIG/SmartCIG ZIP files** was compared with local Actor runs through the public index. The same direct-award, municipality, year, and synonym filters were applied. Every cell below is **ANAC CSV / Actor**. The sets of CIGs matched exactly: **0 differing CIGs across 63 year-and-keyword comparisons**; the check compared CIG identities as well as counts.

| Year | Chemical toilets | Grass cutting | School transport |
|---|---:|---:|---:|
| 2007 | 0/0 | 6/6 | 1/1 |
| 2008 | 0/0 | 5/5 | 10/10 |
| 2009 | 2/2 | 29/29 | 34/34 |
| 2010 | 42/42 | 108/108 | 586/586 |
| 2011 | 880/880 | 1,703/1,703 | 7,085/7,085 |
| 2012 | 1,253/1,253 | 2,357/2,357 | 11,524/11,524 |
| 2013 | 1,199/1,199 | 2,423/2,423 | 12,972/12,972 |
| 2014 | 1,323/1,323 | 3,136/3,136 | 14,591/14,591 |
| 2015 | 1,250/1,250 | 2,373/2,373 | 12,622/12,622 |
| 2016 | 1,406/1,406 | 2,916/2,916 | 14,724/14,724 |
| 2017 | 1,522/1,522 | 2,912/2,912 | 15,200/15,200 |
| 2018 | 1,652/1,652 | 3,367/3,367 | 15,626/15,626 |
| 2019 | 1,934/1,934 | 3,835/3,835 | 16,178/16,178 |
| 2020 | 1,263/1,263 | 4,161/4,161 | 13,789/13,789 |
| 2021 | 1,522/1,522 | 4,200/4,200 | 15,270/15,270 |
| 2022 | 2,213/2,213 | 3,903/3,903 | 14,128/14,128 |
| 2023 | 2,654/2,654 | 4,679/4,679 | 15,299/15,299 |
| 2024 | 2,913/2,913 | 4,564/4,564 | 14,366/14,366 |
| 2025 | 2,990/2,990 | 4,251/4,251 | 13,200/13,200 |
| 2026 | 1,551/1,551 | 2,624/2,624 | 7,395/7,395 |
| Undated | 0/0 | 0/0 | 0/0 |
| **Total** | **27,569/27,569** | **53,552/53,552** | **214,600/214,600** |

### Limits

- `winner` is `null` when validated sources in the served release provide no winner for that CIG. In the ANAC baseline before the winner build, the snapshot and seven monthly awardee releases contained **no winner for any of 26,601 SmartCIGs**; they contained one for 435 of 968 ordinary CIGs. Winner-build coverage is reported separately by period and type. The Actor does not guess a supplier from a participant list, subject, or authority name.
- Historical municipalities absent from current ISTAT and IndicePA lists can be identified from ANAC's municipality name, but their ISTAT code or province may be blank.
- These are structured records from the stated sources, with links to acts when available. ANAC can publish corrections or older records later; verify dates and the linked source before acting.

### FAQ

**Does “new” mean a newly signed contract?** It means a CIG newly seen by this monitor. ANAC may publish delayed records or corrections.

**What if the index is unavailable or my input is invalid?** The run finishes with zero dataset rows and an explanation in `OUTPUT`; it does not invent results.

**Is there a pay-per-event fee?** No. The Actor is free; normal Apify platform usage may still apply.

### Changelog

- **October 2026:** public ANAC index, municipality and date filters, recurring-award groups, monitoring, and full-history CIG parity validation.

**Limite dei vincitori 2024+ / Winner coverage limitation from 2024 onward.** Per gli affidamenti diretti di piccolo importo, gli open data ANAC verificati non riportano il vincitore: fonti aggiuntive possono coprire alcuni CIG, senza garanzia di completezza. Ogni affidamento include `anac_detail_url` per il controllo manuale su ANAC. PEC e indirizzo vengono da IndicePA e restano vuoti quando non pubblicati.

Verified ANAC open data do not provide winners for small direct awards from 2024 onward. Additional sources cover some CIGs, with no promise of complete coverage. Every award includes `anac_detail_url` for manual ANAC verification. PEC and addresses come from IndicePA and remain empty when unpublished.

`winner_available=false` accompagna un vincitore assente; `unavailable_reason` e `winner_unavailable_reason` riportano lo stesso motivo. I campi `winner_source` e `winner_source_url` identificano la fonte scelta per un vincitore disponibile.

Missing winners have `winner_available=false`; `unavailable_reason` and `winner_unavailable_reason` contain the same explanation. `winner_source` and `winner_source_url` identify the selected source for available winners.

### MePA / PAD

`platform`, `platform_source`, `platform_source_url` e `platform_unavailable_reason` distinguono MePA e SINTEL dalla procedura giuridica. MePA richiede un riferimento esplicito all’acquisto nel titolo ANAC; SINTEL usa il dataset CC0 con CIG e CF ente esatti. Menzioni negative o ambigue restano sconosciute. Il campo non certifica l’accesso a una RdO riservata.

These fields attribute MePA and SINTEL separately from the legal procedure. MePA requires an explicit acquisition context in the ANAC title; SINTEL uses exact CIG and buyer tax ID evidence from its CC0 dataset. Negative, ambiguous or unsupported evidence remains unknown. Platform attribution does not grant access to a restricted negotiation.

### Bandi in corso / Open notices

Il servizio indice condiviso espone anche `/bandi?q=…&regione=…&scadenza_dopo=…&comuni=true`. Include soltanto lotti con offerte ancora aperte e cronologia verificata: scadenza esatta, ente e PEC quando pubblicata, importo stimato distinto dalla base d’asta, CPV e link ai documenti. I valori assenti restano vuoti; fonte, cutoff e copertura sono dichiarati. I bandi scaduti sono esclusi a ogni richiesta; aggiornamento notturno separato dalla ricerca.

The shared index service also exposes `/bandi` for verified open-offer lots, with exact deadlines, published authority contacts, estimated values distinct from base prices, CPV and document links. Missing values remain empty, source cutoff and coverage are explicit, and expired notices are excluded on every request. Nightly collection does not block queries.

# Actor input Schema

## `keyword` (type: `string`):

Cerca nell'oggetto dell'affidamento. Per alcune espressioni comuni include sinonimi.

## `expandSynonyms` (type: `boolean`):

Espande bagni chimici, sfalcio erba e trasporto scolastico. Per altre parole cerca la frase indicata.

## `region` (type: `string`):

Nome esatto della regione ISTAT, facoltativo.

## `province` (type: `string`):

Nome esatto della provincia ISTAT, facoltativo.

## `municipality` (type: `string`):

Nome esatto del comune ISTAT, facoltativo.

## `dateFrom` (type: `string`):

Data iniziale YYYY-MM-DD; per SmartCIG si usa la comunicazione, per CIG la pubblicazione.

## `dateTo` (type: `string`):

Data finale YYYY-MM-DD.

## `dateMissing` (type: `boolean`):

Opzione avanzata per controllare gli eventuali record ANAC senza data di pubblicazione/comunicazione.

## `maxResults` (type: `integer`):

Per default salva TUTTI i risultati (fino a 1.000.000 di righe). Abbassalo solo per un'anteprima veloce. L'actor è gratuito, ma Apify fa pagare a chi lo lancia il salvataggio delle righe: circa $5 per 1.000.000 di righe (es. «bagni chimici», 31.859 righe ≈ $0,16; «trasporto scolastico», 244.173 righe ≈ $1,23). Il totale dei CIG trovati resta comunque in OUTPUT.

## `outputMode` (type: `string`):

Scegli se salvare affidamenti, gruppi di affidamenti ricorrenti, oppure entrambi.

## `onlyNew` (type: `boolean`):

Salva i CIG già emessi in uno store nominato e mostra solo quelli nuovi ai run successivi.

## `monitorStore` (type: `string`):

Nome stabile dello store che conserva i CIG già visti. Riusa lo stesso nome nei run successivi con onlyNew=true.

## `indexUrl` (type: `string`):

Endpoint HTTPS pubblico di sola lettura.

## Actor input object example

```json
{
  "keyword": "bagni chimici",
  "expandSynonyms": true,
  "dateMissing": false,
  "maxResults": 1000000,
  "outputMode": "both",
  "onlyNew": false,
  "monitorStore": "municipal-direct-awards-monitor",
  "indexUrl": "https://affidamenti.57-129-163-168.sslip.io"
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "keyword": "bagni chimici"
};

// Run the Actor and wait for it to finish
const run = await client.actor("promptica/italy-municipal-direct-awards").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 = { "keyword": "bagni chimici" }

# Run the Actor and wait for it to finish
run = client.actor("promptica/italy-municipal-direct-awards").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 '{
  "keyword": "bagni chimici"
}' |
apify call promptica/italy-municipal-direct-awards --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,promptica/italy-municipal-direct-awards"
        }
    }
}
```

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/e3KKg2Gq7mbOaqiMq/builds/e5CpcPSCkjchqj54m/openapi.json
