# Subito.it 🧡 Cars & Automotive Scraper (`nogards95/subito-scraper-cars`) Actor

Scrape used car listings from Subito.it. Search by brand, model, price, mileage and year. Extract km, registration year, fuel, gearbox, seller type and publication date. Perfect for buyers, dealers, and market analysts.

- **URL**: https://apify.com/nogards95/subito-scraper-cars.md
- **Developed by:** [Nogards](https://apify.com/nogards95) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## Subito.it Cars Scraper

Extract used car listings from **[Subito.it](https://www.subito.it)**, Italy's largest classifieds site. Search by **brand, model, price, mileage and registration year** — a fast, no-code alternative to a Subito.it cars API.

***

### What does Subito.it Cars Scraper do?

This Actor scrapes the **Cars (Auto)** vertical of Subito.it and returns structured data for every listing: price, mileage, registration year, fuel type, gearbox, seller type, city and publication date. It does **not** collect private contact details or log-in-protected data — only what sellers publish openly.

- Dedicated to the **Automotive** category — no noise from general search
- Search by **brand**, **model** and free-text **keyword**
- Filter by **province**, **price**, **mileage (km)** and **registration year**
- Extracts **km**, **year**, **fuel**, **gearbox**, **seller type** (dealer vs private) and **publication date**
- Export in JSON, CSV, Excel, XML — or pull straight from the Apify API

***

### Why scrape Subito.it car listings?

- **Buyers** monitoring a specific model in their area and getting alerted to good deals
- **Dealers** tracking competitor stock and pricing across provinces
- **Investors and analysts** studying how used-car prices move by brand, fuel and region
- **Developers** building price-comparison dashboards or alerting tools

Running on Apify adds **scheduling**, **API access**, **proxy rotation**, **integrations** (Slack, Zapier, Make, Google Sheets) and **run monitoring** on top of the scraper.

***

### What data can Subito.it Cars Scraper extract?

| Field | Type | Description |
|---|---|---|
| `titolo` | string | Listing title |
| `prezzo` | number | Price in EUR (parsed) |
| `prezzoRaw` | string | Price as shown on the page (e.g. `"12.500 €"`) |
| `condizione` | string | `Usato`, `Nuovo` or `Km 0` |
| `km` | number | Mileage in kilometers (when listed) |
| `anno` | number | Registration year (when listed) |
| `immatricolazione` | string | Registration month/year, e.g. `"06/2018"` |
| `carburante` | string | `Benzina`, `Diesel`, `GPL`, `Metano`, `Ibrida`, `Elettrica` |
| `cambio` | string | `Manuale`, `Automatico` or `Semiautomatico` (when listed) |
| `classeEmissione` | string | Euro emission class, e.g. `"Euro 6"` |
| `tipoVenditore` | string | `privato` or `concessionaria` |
| `nomeVenditore` | string | Dealer name (for `concessionaria` listings) |
| `citta` | string | City / location of the listing |
| `link` | string | Full URL to the listing |
| `immagini` | array | Listing image URLs |

***

### How to scrape Subito.it car listings

1. Click **Try for free** / open the Actor in Apify Console.
2. Set a **brand** (e.g. `volkswagen`) and optionally a **model** (e.g. `golf`).
3. Optionally choose a **province** — the region is resolved automatically.
4. Add **price**, **mileage** or **year** filters if you need them.
5. Set **Maximum Pages** (each page ≈ 30 listings).
6. Click **Start** and download the dataset as JSON, CSV or Excel when it finishes.

***

### How much will it cost to scrape Subito.it?

This Actor runs on the Apify platform and consumes **compute units** based on run time. A typical run of 3–5 pages (~90–150 listings) uses a small fraction of a compute unit and completes in a minute or two. Deeper crawls (up to 50 pages) scale linearly. New Apify accounts include **monthly free credits** that cover regular monitoring of a few searches.

***

### Input

See the **Input** tab for full configuration options.

```json
{
  "marca": "volkswagen",
  "modello": "golf",
  "province": "milano",
  "keyword": "automatica",
  "minPrice": 3000,
  "maxPrice": 15000,
  "minKm": 0,
  "maxKm": 150000,
  "minYear": 2015,
  "maxYear": 2024,
  "maxPages": 5
}
```

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `marca` | string | ❌ | — | Car brand (e.g. `fiat`, `bmw`, `audi`) |
| `modello` | string | ❌ | — | Car model (e.g. `panda`, `golf`) — best used with a brand |
| `keyword` | string | ❌ | — | Free-text search (e.g. `gpl`, `station wagon`, `neopatentati`) |
| `province` | select | ❌ | Italy-wide | Italian province — region resolved automatically. All 110 Subito.it provinces are supported. Subito.it uses its own slugs, which occasionally differ from the administrative name — notably `monza` for Monza e della Brianza, and Sardinia's `medio-campidano` / `gallura` / `ogliastra` / `sulcis-iglesiente`. Legacy names such as `monza-brianza` and `sud-sardegna` are auto-mapped; an unknown province fails fast with a clear error. |
| `minPrice` / `maxPrice` | integer | ❌ | — | Price range in EUR |
| `minKm` / `maxKm` | integer | ❌ | — | Mileage range in kilometers |
| `minYear` / `maxYear` | integer | ❌ | — | Registration-year range |
| `maxPages` | integer | ❌ | 3 | Pages to scrape — each page has ~30 listings (max 50) |

Filters are applied both via Subito.it's URL parameters and re-checked on the extracted data, so results stay within range even when the site ignores a parameter.

***

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
[
  {
    "titolo": "Volkswagen Golf 1.6 TDI 115 CV DSG Business",
    "prezzo": 13900,
    "prezzoRaw": "13.900 €",
    "valuta": "EUR",
    "citta": "Milano (MI)",
    "condizione": "Usato",
    "km": 92000,
    "anno": 2018,
    "immatricolazione": "05/2018",
    "carburante": "Diesel",
    "cambio": "Automatico",
    "classeEmissione": "Euro 6",
    "tipoVenditore": "concessionaria",
    "nomeVenditore": "Auto-com",
    "link": "https://www.subito.it/auto/volkswagen-golf-milano-...",
    "immagini": ["https://images.sbito.it/..."]
  },
  {
    "titolo": "Fiat Panda 1.2 Easy - Neopatentati",
    "prezzo": 6500,
    "prezzoRaw": "6.500 €",
    "valuta": "EUR",
    "citta": "Monza (MB)",
    "condizione": "Usato",
    "km": 78000,
    "anno": 2016,
    "immatricolazione": "09/2016",
    "carburante": "Benzina",
    "cambio": "Manuale",
    "classeEmissione": "Euro 6",
    "tipoVenditore": "privato",
    "nomeVenditore": null,
    "link": "https://www.subito.it/auto/fiat-panda-monza-...",
    "immagini": []
  }
]
```

***

### Example use cases

**Diesel Golf under €15k around Milan**

```json
{ "marca": "volkswagen", "modello": "golf", "province": "milano", "keyword": "diesel", "maxPrice": 15000 }
```

**Low-mileage recent cars in Rome**

```json
{ "province": "roma", "maxKm": 50000, "minYear": 2020, "maxPages": 10 }
```

**Monitor a specific model nationwide**

```json
{ "marca": "toyota", "modello": "yaris", "keyword": "ibrida", "maxPages": 20 }
```

***

### Tips / Advanced options

- **Limit compute usage** by keeping `maxPages` low and scheduling frequent small runs instead of rare large ones.
- **More accurate results:** brand + model + a fuel keyword narrows the search a lot; the client-side filter then removes any stragglers.
- **Schedule** a weekly run to track how prices for your target model evolve over time.

***

### FAQ, Disclaimers, and Support

**Does this scraper collect personal data?**
Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

**I get zero results.**
Check the province slug (pick it from the dropdown), and make sure your price/km/year filters aren't too narrow. An invalid province now raises a clear error instead of returning nothing.

**Some fields are `null`.**
Sellers don't always list km, year, fuel or gearbox in the card. Missing values are returned as `null` rather than guessed.

Found a bug or need a feature? Open an issue on the **Issues** tab and I'll get back to you quickly. For programmatic access, see the **API** tab.

# Actor input Schema

## `marca` (type: `string`):

Filter by car brand (e.g. 'volkswagen', 'fiat', 'bmw', 'audi'). Leave empty to search all brands. Used together with the keyword field to build the search.

## `modello` (type: `string`):

Filter by car model (e.g. 'golf', 'panda', 'serie 1'). Only meaningful when a brand is also set.

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

Optional free-text search (e.g. 'automatica', 'gpl', 'station wagon', 'neopatentati'). Combined with brand/model. Leave empty to get all listings.

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

Filter by Italian province. The region is resolved automatically. Note: Subito.it uses its own province slugs, which sometimes differ from the administrative name (e.g. Monza e della Brianza is "monza"); pick from the list to be safe. Leave empty to search all Italy.

## `minPrice` (type: `integer`):

Minimum price in euros (optional)

## `maxPrice` (type: `integer`):

Maximum price in euros (optional)

## `minKm` (type: `integer`):

Minimum mileage in kilometers (optional)

## `maxKm` (type: `integer`):

Maximum mileage in kilometers (optional)

## `minYear` (type: `integer`):

Earliest registration year (optional)

## `maxYear` (type: `integer`):

Latest registration year (optional)

## `maxPages` (type: `integer`):

How many pages to scrape (each page contains ~30 listings)

## Actor input object example

```json
{
  "marca": "volkswagen",
  "modello": "golf",
  "keyword": "automatica",
  "province": "",
  "minPrice": 3000,
  "maxPrice": 15000,
  "maxKm": 150000,
  "minYear": 2015,
  "maxYear": 2024,
  "maxPages": 5
}
```

# Actor output Schema

## `results` (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("nogards95/subito-scraper-cars").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("nogards95/subito-scraper-cars").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 '{}' |
apify call nogards95/subito-scraper-cars --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nogards95/subito-scraper-cars"
        }
    }
}
```

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/xg3BsM1dbVnuJCujO/builds/wjEn5if9XkFzVdAy7/openapi.json
