# Scraper PVP Mobili (`amintouzani/scraper-pvp-mobili`) Actor

Monitora il Portale delle Vendite Pubbliche (Ministero della Giustizia) e avvisa su Telegram ogni nuova asta di beni mobili: auto, moto, natanti, macchinari, preziosi, arredamento. Filtra per regione, comune, raggio, categoria/tipologia e prezzo. Niente controlli manuali, niente occasioni perse.

- **URL**: https://apify.com/amintouzani/scraper-pvp-mobili.md
- **Developed by:** [Amin Touzani](https://apify.com/amintouzani) (community)
- **Categories:** Other, E-commerce, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.06 / actor start

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

### Cosa fa Scraper PVP Mobili?

**Scraper PVP Mobili** monitora automaticamente il [Portale delle Vendite Pubbliche](https://pvp.giustizia.it) del Ministero della Giustizia e ti segnala **ogni nuova asta di beni mobili** pubblicata (auto, moto, natanti, macchinari industriali, preziosi, arredamento, elettronica e altro), filtrata per regione/comune oppure per raggio d'azione attorno a un indirizzo, macro categoria/tipologia e prezzo base d'asta. Gli annunci sono sempre ordinati dal più recente pubblicato. Basta impostare i filtri che ti interessano, avviare l'Actor una volta per popolare la memoria, poi programmarlo con uno schedule (ogni ora, ogni 6 ore...) su Apify: da quel momento riceverai solo gli annunci realmente nuovi, in ordine cronologico, direttamente su un **bot Telegram** e/o nel dataset dell'Actor.

Grazie alla piattaforma Apify ottieni accesso via API, esecuzioni pianificate (schedule), monitoraggio dei run, integrazioni (Zapier, Make, webhook) e rotazione dei proxy, senza dover gestire alcun server o infrastruttura.

### Perché usare Scraper PVP Mobili?

Le aste giudiziarie di beni mobili (soprattutto veicoli) sono spesso un'ottima opportunità per acquistare a prezzi sotto mercato, ma il portale ufficiale non offre notifiche personalizzate: bisogna controllarlo manualmente ogni giorno, rischiando di perdere le occasioni.

Questo Actor è pensato per:

- **Cacciatori di occasioni**: chi cerca l'affare giusto (un'auto, una moto, un macchinario) in una zona precisa e vuole essere avvisato per ogni nuovo annuncio.
- **Autofficine, rivenditori e commercianti**: chi ha bisogno di monitorare costantemente una categoria specifica (es. Autoveicoli, Macchinari) senza controlli manuali quotidiani.
- **Investitori e professionisti** (periti, avvocati, curatori): che vogliono automatizzare il monitoraggio di più zone o categorie di beni mobili.
- **Sviluppatori**: che vogliono integrare i dati delle aste PVP Giustizia nelle proprie applicazioni, fogli di calcolo o CRM tramite API/dataset.

### Come usare Scraper PVP Mobili

1. Clicca su **Try for free** (o **Start**) per aprire l'Actor nella Apify Console.
2. Nella tab **Input**, imposta Regione e/o Comune (scegli dall'elenco ufficiale dei comuni italiani, cercabile digitando). Se preferisci cercare entro un raggio in km dal Comune scelto invece che nell'intera Regione, attiva il toggle **Cerca per Raggio d'azione**. Imposta poi (facoltativamente) una Macro categoria e/o una Tipologia specifica, e un range di prezzo base d'asta.
3. Se vuoi ricevere le notifiche su Telegram, crea un bot con [@BotFather](https://t.me/BotFather), copia il token e incollalo nel campo **Token bot Telegram**, poi inserisci il **Chat ID** della chat/canale che deve ricevere i messaggi.
4. Clicca su **Start** ed esegui l'Actor: la prima esecuzione popola la memoria interna e considera "nuovi" tutti gli annunci trovati con i filtri scelti (vengono salvati nel dataset e, se configurato, inviati al bot).
5. Vai su **Schedules** nella Apify Console e crea uno schedule (es. 6 ore o ogni 12 ore) per far girare l'Actor automaticamente: da quel momento in poi riceverai solo gli annunci realmente nuovi rispetto all'ultima esecuzione, in ordine cronologico.
6. Consulta i risultati nella tab **Storage → Dataset**, oppure scaricali in JSON, CSV, Excel, ecc.

### Input

Tutti i campi di input sono opzionali tranne nessuno (nessun campo è obbligatorio: senza filtri l'Actor cerca in tutta Italia, tutte le categorie di beni mobili). I principali:

| Campo | Descrizione |
|---|---|
| `regione` | Limita la ricerca a una regione italiana (es. "Lombardia"). |
| `comune` | Limita la ricerca a un comune specifico, scelto dall'elenco ufficiale ISTAT di tutti i comuni italiani (niente più problemi di accenti, maiuscole o nomi composti; l'elenco è cercabile anche per sigla provincia, es. "Milano (MI)"). |
| `usaRaggioAzione` | Se attivo, centra la ricerca sul Comune scelto e cerca entro il raggio impostato in `raggioKm`, invece che nell'intera Regione. Richiede un Comune impostato. |
| `raggioKm` | Raggio in km intorno al Comune, usato solo se `usaRaggioAzione` è attivo (default 25, massimo 50 come sul portale). |
| `categoria` | Una singola macro categoria di beni mobili (Nautica, Arte/Oreficeria/Orologeria/Antiquariato, Informatica ed Elettronica, Autoveicoli e Cicli, Abbigliamento e Calzature, Arredamento ed Elettrodomestici, Macchinari/Utensili/Materie Prime, Altra Categoria). Un filtro largo: usalo da solo se ti interessa tutta la macro categoria. |
| `tipologia` | Una singola tipologia specifica (es. Autovetture, Motoveicolo O Ciclomotore, Elettrodomestici...), elencata con il prefisso della sua macro categoria per riconoscerla facilmente. Se la imposti, la macro categoria corretta viene applicata **automaticamente** nella ricerca (sostituendo quella eventualmente scelta in `categoria`, se diversa) — non serve farle coincidere a mano. |
| `prezzoBaseAstaDa` / `prezzoBaseAstaA` | Range di prezzo base d'asta in euro. |
| `onlyActiveAuctions` | Scarta le aste con data già passata (default: attivo). |
| `telegramBotToken` / `telegramChatId` | Credenziali del bot Telegram (opzionali). |

Ogni esecuzione scansiona al massimo 48 annunci (la pagina di risultati più recenti), un limite fisso non configurabile pensato per tenere sotto controllo i costi di ogni singola esecuzione.

Consulta la tab **Input** dell'Actor per la lista completa con descrizioni e valori ammessi.

### Output

Ogni esecuzione salva nel dataset solo i **nuovi** annunci trovati (rispetto alle esecuzioni precedenti), ad esempio:

```json
[
  {
    "idAnnuncio": "2086872",
    "titoloLotto": "2",
    "categoria": "Autoveicoli E Cicli",
    "categoriaBene": ["Autovetture"],
    "indirizzo": "Via Caminanz, 23842 Bosisio Parini (Lecco)",
    "latitudine": 45.798095,
    "longitudine": 9.296883,
    "descrizioneBreve": "Lotto 2: Autovettura BMW X3- anno 2012",
    "dataVendita": "2024-01-10T10:00:00",
    "dataPubblicazione": "2023-11-28T00:00:00",
    "prezzoBaseAsta": 7000.0,
    "tribunale": "Tribunale di LECCO",
    "url": "https://pvp.giustizia.it/pvp/it/detail_annuncio.page?idAnnuncio=2086872"
  }
]
```

Puoi scaricare il dataset in vari formati come JSON, HTML, CSV o Excel direttamente dalla Apify Console o via API.

#### Campi principali

| Campo | Descrizione |
|---|---|
| `idAnnuncio` | ID univoco dell'annuncio sul portale |
| `titoloLotto` | Titolo/numero del lotto |
| `categoria` | Macro categoria del bene |
| `categoriaBene` | Tipologia/e specifica/che del bene |
| `indirizzo` | Indirizzo del bene in forma leggibile, quando disponibile |
| `latitudine` / `longitudine` | Coordinate GPS del bene, quando disponibili |
| `descrizioneBreve` | Descrizione breve mostrata nell'annuncio (spesso contiene marca/modello/targa/km in testo libero) |
| `dataVendita` | Data/ora dell'asta (ISO 8601) |
| `dataPubblicazione` | Data di pubblicazione sul portale (ISO 8601) |
| `prezzoBaseAsta` | Prezzo base d'asta, in euro |
| `tribunale` | Tribunale competente per la procedura |
| `url` | Link alla pagina di dettaglio dell'annuncio |

### Pricing / Costo stimato

Questo Actor usa il modello **pay-per-event** di Apify:

| Evento | Costo |
|---|---|
| Avvio esecuzione (Actor Start) | $0,06 |
| Nuovo annuncio trovato (per risultato) | $0,001 |

Ogni esecuzione scansiona al massimo 48 annunci, quindi il costo massimo teorico di una singola esecuzione è $0,06 + 48 × $0,001 = **$0,108**.

Per un monitoraggio continuo con schedule ogni 24 ore (30 esecuzioni al mese):

- **Caso tipico** (pochi annunci nuovi al giorno): circa **$1,80 – 2,00/mese**.
- **Caso massimo** (48 nuovi annunci trovati a ogni singola esecuzione, scenario estremo): fino a **$3,24/mese**.

Il costo effettivo dipende dal volume reale di nuovi annunci pubblicati per i filtri scelti. Questi prezzi possono cambiare: consulta comunque la tab **Pricing** dell'Actor nella Apify Console per i valori aggiornati.

L'Actor è anche molto leggero dal punto di vista computazionale: ogni esecuzione tipica dura pochi secondi. Per un uso continuativo, uno schedule ogni 12-24 ore è in genere più che sufficiente, dato che il portale non pubblica nuove aste con grande frequenza.

### Tips o opzioni avanzate

- Per cercare solo un tipo di veicolo (es. solo auto), imposta direttamente `tipologia` su "Autoveicoli E Cicli → Autovetture": non serve impostare anche `categoria`, viene applicata da sola. Usa `categoria` da sola solo se ti interessa un'intera macro categoria senza scendere a una tipologia specifica.
- Il portale non ha campi strutturati per marca/modello/targa/chilometraggio di veicoli e mezzi: queste informazioni, quando presenti, sono solo testo libero dentro `descrizioneBreve` nell'output.
- Per ricevere solo gli annunci di una zona ristretta, imposta sia `regione` che `comune` insieme. Se non sono coerenti tra loro (es. un comune scelto per errore che appartiene a un'altra regione), l'Actor lo segnala con un avviso nei log.
- Il campo `comune` è un elenco cercabile: per trovare rapidamente quello giusto tra quasi 8.000 voci, digita anche solo la sigla della provincia (es. "MI", "PI") oltre al nome.
- Su un'area molto ampia (es. un'intera regione), il primo popolamento copre solo gli annunci più recenti: è pensato per segnalarti i nuovi arrivi, non per recuperare tutto lo storico.
- Se non ti serve il bot Telegram, lascia semplicemente vuoti i campi `telegramBotToken`/`telegramChatId`: l'Actor continuerà a funzionare normalmente salvando tutto nel dataset.
- Per uno storico continuo (comune preferito, notifiche quasi in tempo reale), imposta uno schedule ogni 1-6 ore: il portale pubblica nuovi annunci ogni giorno, quindi non serve una frequenza più alta.
- Con `usaRaggioAzione` attivo, il campo `regione` viene ignorato (la ricerca è centrata sul `comune` scelto). Se il comune non viene geocodificato correttamente, l'Actor ricade automaticamente sulla ricerca normale per Regione/Comune, e lo segnala nei log.

### FAQ, disclaimer e supporto

**È legale?** Questo Actor raccoglie esclusivamente dati pubblici già consultabili liberamente sul Portale delle Vendite Pubbliche del Ministero della Giustizia. Sei comunque responsabile di un uso conforme ai Termini di Servizio del sito e alle normative applicabili nella tua giurisdizione.

**Limitazioni note**: il portale non ha campi strutturati per marca/modello/targa/chilometraggio di veicoli e mezzi: quando presenti, sono solo testo libero dentro la descrizione dell'annuncio. Il filtro **Solo aste attive** esclude le aste già concluse in base ai dati disponibili sul portale, ma potrebbero verificarsi rari falsi positivi/negativi.

Hai trovato un bug o hai un suggerimento? Apri un ticket nella tab **Issues** dell'Actor nella Apify Console. Per esigenze di scraping su misura (altre categorie del portale, filtri aggiuntivi, integrazioni personalizzate), contattaci tramite la stessa tab.

# Actor input Schema

## `regione` (type: `string`):

Limita la ricerca a una regione italiana. Lascia vuoto per cercare in tutta Italia.

## `comune` (type: `string`):

Limita la ricerca a un comune italiano specifico. Elenco ufficiale ISTAT: seleziona dalla lista (cerca digitando il nome o la sigla della provincia tra parentesi, es. "Milano (MI)") per evitare problemi di accenti/maiuscole/nomi composti. Lascia vuoto per non filtrare per comune (l'intera regione, o l'intera Italia se anche la Regione è vuota).

## `usaRaggioAzione` (type: `boolean`):

Se attivo, la ricerca è centrata sul Comune scelto sopra e ne cerca gli annunci entro il raggio impostato in "Raggio di ricerca (km)" (il Comune viene geocodificato automaticamente tramite il servizio del portale stesso, nessuna chiave API esterna necessaria). Il campo Regione viene ignorato in questa modalità. Se disattivo (default), si usa la ricerca normale per Regione/Comune. Va impostato anche un Comune, altrimenti non c'è nulla da geocodificare e l'Actor ricade sulla ricerca normale.

## `raggioKm` (type: `integer`):

Raggio in km intorno al Comune scelto. Usato solo se "Cerca per Raggio d'azione" è attivo. Il portale consente al massimo 50 km.

## `categoria` (type: `string`):

Una singola macro categoria di beni mobili da includere (es. Autoveicoli, Nautica, Arredamento...). Lascia vuoto per includerle tutte. Per restringere ulteriormente, usa anche "Tipologia" sotto.

## `tipologia` (type: `string`):

Una singola tipologia specifica da includere (es. Autovetture, Motoveicolo O Ciclomotore...). Lascia vuoto per non filtrare per tipologia. Se scelta, la relativa macro categoria viene applicata automaticamente nella ricerca, sostituendo quella impostata sopra in "Macro categoria" se diversa.

## `prezzoBaseAstaDa` (type: `integer`):

Prezzo minimo del prezzo base d'asta.

## `prezzoBaseAstaA` (type: `integer`):

Prezzo massimo del prezzo base d'asta.

## `onlyActiveAuctions` (type: `boolean`):

Scarta gli annunci con data vendita già passata o con anno palesemente errato (oltre il 2100). Il portale non fornisce un filtro nativo per lo stato dell'annuncio, quindi questo controllo viene fatto lato Actor.

## `telegramBotToken` (type: `string`):

Token del bot creato con @BotFather su Telegram. Se lasciato vuoto, o se non valido, le notifiche Telegram vengono semplicemente disattivate, senza generare errori: gli annunci continuano comunque a essere salvati nel dataset.

## `telegramChatId` (type: `string`):

ID della chat, del gruppo o del canale (es. "123456789" oppure "@tuocanale") a cui il bot invierà le notifiche dei nuovi annunci.

## Actor input object example

```json
{
  "usaRaggioAzione": false,
  "raggioKm": 25,
  "onlyActiveAuctions": true
}
```

# Actor output Schema

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

// Run the Actor and wait for it to finish
const run = await client.actor("amintouzani/scraper-pvp-mobili").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("amintouzani/scraper-pvp-mobili").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 amintouzani/scraper-pvp-mobili --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=amintouzani/scraper-pvp-mobili",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DasDSNf5KIlIFHcgg/builds/HICMSiuZqFv6A861F/openapi.json
