# Subito.it Scraper API — $0.001 per ad

> Subito.it Scraper API: Classified ads from Subito.it — motori by km/year/fuel, immobili by. $0.001 per delivered ad, nothing delivered means nothing charged.

[Home](https://quanticdata.io/)/[Collectors](https://quanticdata.io/collectors/)/*Subito.it Scraper API*

# Subito.it Scraper API

A Subito.it scraper API for Italy's largest classifieds site: one row per ad with the full description, price, category, condition, geo down to the comune, seller type and shipping — plus the exact mileage, year, fuel and gearbox on motori and the mq and locali on immobili. Filter by any of them, in any of the 44 categories and 20 regions, and pay only per delivered ad.

By [Aldo Morese](https://quanticdata.io/about/), founder of QuanticData · Published Aug 21, 2026 · Updated Sep 3, 2026

[Get my free API key](https://app.quanticdata.io/register) [See the request](/collectors/subito-scraper-api/#integration)

$0.001 per delivered ad · $2 free every month · Failed runs never billed

[Questa pagina in italiano →](https://quanticdata.io/it/collectors/subito-scraper-api/)

POST /v1/scraper/collectors/subito_search/run

```
$ curl $QD/subito_search/run \
    -H "Authorization: Bearer $QD_API_KEY" \
    -d '{"query": "iphone 15", "title_only": true, "max_results": 30}'
{ "status": "done", "count": 30,
  "results": [
    {
      "ad_id": "…",
      "title": "…",
      "url": "…",
      "price": "…" } ],
  "cost": 0.03 }
# 30 ads × $0.001 · nothing delivered, nothing charged
```

You send query and category; the run goes out through a residential exit and comes back as ads with rank, page and ad_id — 32 fields on every row — and you are billed $0.001 for each ad actually delivered, nothing for a run that delivers none.

**$0.001 / ad**2,000 ads on the free $2 every month

**Semantic input**query, category, region — no URL lists

**Up to 150**ads per run, pagination handled for you

**No browser**read over HTTP/TLS — cheaper and faster than rendering

On this page: [Try it](/collectors/subito-scraper-api/#try) [What it is](/collectors/subito-scraper-api/#what) [Limits](/collectors/subito-scraper-api/#caps) [Output fields](/collectors/subito-scraper-api/#output) [Inputs](/collectors/subito-scraper-api/#input) [Pricing](/collectors/subito-scraper-api/#pricing) [Integration](/collectors/subito-scraper-api/#integration) [Use cases](/collectors/subito-scraper-api/#use-cases) [Versus the alternatives](/collectors/subito-scraper-api/#compare) [FAQ](/collectors/subito-scraper-api/#faq)

Try it

## Subito.it ads, running now

Change the input and run it against the live collector — nothing to install, no sign-up.

Run it from your own code, on your own inputs

Same collector, same rows — $2 of free API credit every month, no card.

[Get my free API key](https://app.quanticdata.io/register)

## What a Subito.it scraper API does

Subito serves every search as a hydration payload behind the page, and that is what this collector reads — not the visible cards, which are built from generated CSS classes and show strictly less: the description is clipped, the mileage is a bucket ("70.000 - 74.999"), the comune and the seller id are not shown at all. From the payload the row carries the whole ad text, the odometer reading to the kilometre, every photo, and a publication time as ISO 8601 with the Europe/Rome offset that was actually in force.

The filters are the part a home-made scraper gets wrong without noticing. Subito honours price, seller type, mileage, year and floor area only inside some categories and silently ignores them elsewhere — *veicoli commerciali* has no km or year filter at all, and on the all-categories search none of them apply. This collector sends every filter anyway, then **re-checks each one on the delivered rows**, so a range means what it says in every category. It also follows Subito's own quirk on make/model keywords: "golf" or "panda" redirect to a canonical listing that drops the sort, the filters and the page number, and the run reads from that listing instead of delivering an unsorted first page and stopping there.

Input is meaning, not a URL *query* *category* *region* *city* *town*

## Limits, in plain numbers

Everything that bounds one run of this collector. No hidden throttles.

Max per run

150 ads

Price

$0.001 / ad

Per 1,000

$1.00

Failed runs

Free zero rows, zero charge

Free every month

$2 no card

Rate limit

60 req/min on the free tier

## What one ad looks like

Every delivered ad carries these fields. Nullable means the source did not publish it — the field stays empty instead of being guessed.

| Field | Type | What it holds |
| --- | --- | --- |
| `rank` | integer | 1-based position in the delivered results. |
| `page` | integer | Result page the ad came from. |
| `ad_id` | string | Subito listing id (the number ending the ad URL). |
| `title` | string | Ad title. |
| `url` | string · nullable | Ad URL. |
| `price` | string · nullable | Price as shown ("450 €"). Null for free and wanted ads. |
| `price_value` | number · nullable | Parsed price in euro. |
| `category` | string · nullable | Category the ad is filed under ("Telefonia"). |
| `category_slug` | string · nullable | Category slug ("telefonia"). |
| `condition` | string · nullable | Item condition as stated ("Come nuovo - perfetto o ricondizionato"). |
| `km` | integer · nullable | Motori. Exact mileage — Subito's card shows only the bucket ("70.000 - 74.999"). |
| `year` | integer · nullable | Motori. Registration year. |
| `fuel` | string · nullable | Motori. Fuel as a stable key ("diesel", "plugin_hybrid_petrol"), matching the input enum; the Italian label is in features. |
| `gearbox` | string · nullable | Motori. "manual", "automatic" or "sequential". |
| `vehicle_condition` | string · nullable | Motori. "used", "km0" or "new". |
| `size_sqm` | integer · nullable | Immobili. Floor area in square metres. |
| `rooms` | integer · nullable | Immobili. Number of locali. |
| `date` | string · nullable | Publication time as ISO 8601 with the Europe/Rome offset in force ("2026-09-03T00:56:18+02:00"; +01:00 in winter). |
| `region` | string · nullable | Region ("Emilia-Romagna"). |
| `city` | string · nullable | Province ("Parma"). |
| `town` | string · nullable | Comune ("Parma"). |
| `seller_type` | string | "private" or "company". |
| `seller_name` | string · nullable | Shop or advertiser name, when stated. |
| `seller_id` | string · nullable | Subito user id of the seller. |
| `shippable` | boolean | Seller offers shipping. |
| `shipping_cost` | number · nullable | Shipping cost in euro, when stated. |
| `promoted` | boolean | Paid visibility (gallery placement). |
| `urgent` | boolean | Marked urgent by the seller. |
| `description` | string · nullable | Full ad text (first 600 characters) — not the truncated card excerpt. |
| `thumbnail` | string · nullable | First photo. |
| `images` | string[] | Every photo, in the ad's order. |
| `features` | object | Every other attribute the ad states, as label → value ("Km": "142.000", "Superficie": "85 mq"). Keys depend on the category. |

## Inputs

The whole request. Anything you leave out falls back to the default shown in the catalog.

| Input | Type | Required | What it does |
| --- | --- | --- | --- |
| `query` | string | no | What to search, e.g. "iphone 15". Optional when a category is set — leaving it out browses that category by filters alone, which is how a motori or immobili search usually works. |
| `category` | string | no | Subito category to search in. "all" searches every category (and disables Subito's own price/seller filtering — this collector re-applies it). One of: `all`, `motori`, `auto`, `accessori-auto`, `moto-e-scooter`, `accessori-moto`, `nautica`, `caravan-e-camper`, `veicoli-commerciali`, `immobili`, `appartamenti`, `camere-posti-letto`, `ville-singole-e-a-schiera`, `terreni-e-rustici`, `garage-e-box`, `loft-mansarde`, `case-vacanza`, `uffici-locali-commerciali`, `lavoro`, `offerte-lavoro`, `servizi`, `cerco-lavoro`, `attrezzature`, `elettronica`, `informatica`, `videogiochi`, `audio-video`, `fotografia`, `telefonia`, `casa-e-persona`, `arredamento-casalinghi`, `elettrodomestici`, `giardino-fai-da-te`, `abbigliamento-accessori`, `bambini-giocattoli`, `sport-hobby`, `animali`, `accessori-per-animali`, `musica-film`, `libri-riviste`, `strumenti-musicali`, `sport`, `biciclette`, `hobby-collezionismo`, `vari`, `annunci-vari`. |
| `region` | string | no | Italian region to search in. "italia" searches the whole country. One of: `italia`, `abruzzo`, `basilicata`, `calabria`, `campania`, `emilia-romagna`, `friuli-venezia-giulia`, `lazio`, `liguria`, `lombardia`, `marche`, `molise`, `piemonte`, `puglia`, `sardegna`, `sicilia`, `toscana`, `trentino-alto-adige`, `umbria`, `valle-d-aosta`, `veneto`. |
| `city` | string | no | Optional province inside the region, as it appears in a Subito URL ("roma", "milano", "reggio-emilia"). Needs `region`. |
| `town` | string | no | Optional comune inside the province, as it appears in a Subito URL ("ladispoli", "sesto-san-giovanni"). Needs `city`. This is the level real-estate searches usually want. |
| `ad_type` | string | no | Which kind of ad: for sale, given away for free, or wanted. One of: `sale`, `free`, `wanted`. |
| `sort` | string | no | Result order. One of: `recent`, `relevance`, `price_asc`, `price_desc`. |
| `title_only` | boolean | no | Match the query against ad titles only. Subito's default also matches the description, which pulls in loosely related ads. |
| `shippable_only` | boolean | no | Only ads the seller will ship. |
| `min_price` | integer | no | Lowest price in euro. Ads with no stated price are excluded when set. |
| `max_price` | integer | no | Highest price in euro. Ads with no stated price are excluded when set. |
| `seller_type` | string | no | Private sellers, verified dealers, or both. One of: `any`, `private`, `company`. |
| `min_km` | integer | no | Motori. Lowest mileage in kilometres. Applied to the ads even in the categories where Subito offers no mileage filter (veicoli commerciali, caravan). |
| `max_km` | integer | no | Motori. Highest mileage in kilometres. |
| `min_year` | integer | no | Motori. Earliest registration year. |
| `max_year` | integer | no | Motori. Latest registration year. |
| `fuel` | string | no | Motori. Subito splits hybrids by kind, so "hybrid" is its own value and does not cover the mild/full/plug-in ones. One of: `petrol`, `diesel`, `lpg`, `electric`, `cng`, `hybrid`, `mild_hybrid_petrol`, `mild_hybrid_diesel`, `full_hybrid_petrol`, `full_hybrid_diesel`, `plugin_hybrid_petrol`, `plugin_hybrid_diesel`. |
| `gearbox` | string | no | Motori. Transmission type. One of: `manual`, `automatic`, `sequential`. |
| `vehicle_condition` | string | no | Motori. Used, zero-km or new. One of: `used`, `km0`, `new`. |
| `min_size` | integer | no | Immobili. Smallest floor area in square metres. |
| `max_size` | integer | no | Immobili. Largest floor area in square metres. |
| `min_rooms` | integer | no | Immobili. Fewest locali. |
| `max_rooms` | integer | no | Immobili. Most locali (Subito caps its own filter at "more than 10"). |
| `max_results` | integer | no | How many ads to deliver at most (1–150). You pay only for delivered ads. |

Pricing

## Subito.it Scraper API pricing

$0.001 per delivered ad. A run that delivers nothing costs nothing: blocked pages, challenges and retries are on us, and the $2 monthly allowance covers about 2,000 ads before you spend anything.

**$0.001**per delivered ad*$1 per 1,000 delivered ads*

**2,000 ads**on the free allowance*$2 every month, no card*

**Zero rows**zero charge*blocks, captchas and retries are on us*

**−30%**on volume tiers*the catalog returns your key's price*

### Pay as you go

$0/mo

- $2 free credit / month

- 60 requests / min

- List unit prices

### Starter

$19/mo

- $15 free credit / month

- 300 requests / min

- 10% off unit prices

Most popular

### Growth

$79/mo

- $50 free credit / month

- 600 requests / min

- 20% off unit prices

### Scale

$299/mo

- $250 free credit / month

- 1,200 requests / min

- 30% off unit prices

Same wallet, same key and same $2 monthly allowance as every other [Data API](https://quanticdata.io/web-data-api-for-ai/). Prices are launch pricing read live from the billing config — `GET /v1/scraper/collectors` returns the price your key actually pays.

Integration

## One POST, typed rows

Base URL `https://api.quanticdata.io/v1`, Bearer auth, the same key as every other Data API. Endpoint: `POST /v1/scraper/collectors/subito_search/run`.

```
curl -X POST https://api.quanticdata.io/v1/scraper/collectors/subito_search/run \
  -H "Authorization: Bearer $QD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"iphone 15","title_only":true,"max_results":30}'
```

```
import requests

r = requests.post(
    "https://api.quanticdata.io/v1/scraper/collectors/subito_search/run",
    headers={"Authorization": f"Bearer {QD_API_KEY}"},
    json={
        "query": "iphone 15",
        "title_only": True,
        "max_results": 30
    },
    timeout=120,
)
for row in r.json()["payload"]["results"]:
    print(row)
```

```
const res = await fetch(
  "https://api.quanticdata.io/v1/scraper/collectors/subito_search/run",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.QD_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({"query":"iphone 15","title_only":true,"max_results":30}),
  },
);
const { payload } = await res.json();
console.table(payload.results);
```

```
claude mcp add quanticdata \
  -e QUANTICDATA_API_KEY=qd_live_your_key_here \
  -- npx -y quanticdata-mcp

# then, in the chat:
> run the subito_search collector with query="iphone 15" and title_only=true
```

## What people build with the Subito.it scraper API

Three shapes of work this endpoint was designed around.

### Used-car market pricing

Diesel automatics from 2018 to 2022 under 120,000 km, sorted by price, one region at a time — with the exact mileage on each row rather than the bucket the card shows, so a price-per-kilometre model actually has kilometres to work with.

### Real-estate monitoring by comune

Three- and four-room flats between 100 and 150 mq in one comune, from private sellers only. Re-run on a schedule and diff by `ad_id`: new listings and price changes show up as new rows.

### Deal and demand discovery

Anything shippable under a price, free items in a category, or the "wanted" ads that reveal what people are looking for — with the seller flagged as private or dealer on every row.

## Subito.it Scraper API versus rolling your own

The differences that actually cost time when you build this in-house.

|  | DIY scraper | This collector |
| --- | --- | --- |
| Filters | Only where Subito offers them — none on vans, none across all categories | Every filter re-checked on the rows, in every category |
| Mileage | The bucket the card shows ("70.000 - 74.999") | The exact odometer reading |
| A make or model keyword | Redirected — sort, filters and paging silently lost | Followed to the canonical listing with sort and filters intact |
| A misspelt city | An empty result that looks like "no ads" | A clear error naming the place, before anything is billed |
| Blocks and retries | Your IPs, your problem | Italian residential exits, failed runs never billed |

## What people search for

Live autocomplete demand around Subito.it ads, pulled with our own Keyword ideas collector.

Searches: [subito it scraper](/collectors/subito-scraper-api/#try) [subito it scraping](/collectors/subito-scraper-api/#try) [scraping subito it](/collectors/subito-scraper-api/#try) [scraper usato subito](/collectors/subito-scraper-api/#try) [subito scraper github](/collectors/subito-scraper-api/#try) [subito it api](/collectors/subito-scraper-api/#try) [subito api developer](/collectors/subito-scraper-api/#try) [subito it api developer](/collectors/subito-scraper-api/#try) [subito api key](/collectors/subito-scraper-api/#try) [subito api rest](/collectors/subito-scraper-api/#try) [subito it api documentation](/collectors/subito-scraper-api/#try)

The same call you would paste into a terminal: a Bearer key, query, title_only and category in the body, and back the envelope every QuanticData endpoint returns — type, message, payload — where count is how many ads arrived and usage.cost_usd is $0.03, which is 30 × $0.001. A run that delivers nothing costs nothing. The key is good for 60 req/min on the free tier.

## Sources and standards

The platform documentation and standards this collector is built against — check any claim on this page against the primary source:

- [Subito.it: condizioni generali di utilizzo (terms of use)](https://www.subito.it/legal/condizioni-generali-di-utilizzo)

- [Schema.org: the Offer type](https://schema.org/Offer)

- [IETF: RFC 9309, Robots Exclusion Protocol](https://www.rfc-editor.org/rfc/rfc9309.html)

## FAQ

Questions we get about the Subito.it scraper API.

[Something else? Ask us →](mailto:hello@quanticdata.io)

### Does Subito.it have a public API?

Not for developers. What exists is aimed at professional advertisers who import their own listings; there is no documented endpoint to search or read ads, which is why searches for a Subito API key or REST documentation lead nowhere. This collector reads the public search pages instead — no Subito account, no key from Subito.

### Why not a Subito scraper script from GitHub?

Most of them read the visible cards through CSS class names that Subito regenerates on every deploy, so they break silently and return zero rows; none of them knows that price and mileage filters only work inside a category, or that "golf" redirects away from the page they asked for. This collector reads the payload behind the page, re-applies every filter on the rows, follows the redirect, and comes with Italian residential exits and retries — and a run that delivers nothing costs nothing.

### How exact are the mileage, year and price ranges?

Exact. Each range is sent to Subito, which honours it only in some categories, and then checked again on every delivered row. An ad that does not state the value at all is excluded when you set a range: "vans under 150,000 km" never contains a van with an unknown odometer.

### Can I search a province or a single comune?

Yes — region, province and comune, using the names as they appear in Subito's own URLs (`lazio`, `roma`, `ladispoli`). A place Subito does not know produces an error that names it, rather than the empty result Subito itself returns for a bad URL.

### What happens with a keyword like "golf" or "panda"?

Subito redirects an exact make or model to a canonical listing and drops everything else from the request — the sort, the filters and the page number. The collector detects that from the page it got back, re-reads the listing from the canonical path with your sort and filters applied, and paginates there.

### Which data does it collect, and from where?

Only what the public search page publishes to anyone without logging in: the ad, its price and attributes, the comune, and the seller as Subito shows it — private or dealer, with the shop name when there is one. No account is used and nothing behind a login is read. How you store and use the rows afterwards is on you, as with any public data.

### Is there a free Subito.it scraper API?

Every account gets $2 of credit every month with no card, which is about 2,000 delivered ads on this endpoint at $0.001 each. It renews monthly, and a run that delivers nothing is never billed — so a failed or blocked attempt does not eat the allowance.

### How much does one run cost?

Multiply the rows you actually receive by $0.001. A run capped at 150 ads — the maximum for this collector — costs $0.15 if every row comes back, and less when the source has fewer. Volume tiers take up to 30% off, and `GET /v1/scraper/collectors` returns the price your key actually pays.

## Run the Subito.it scraper API now

$2 of free credit every month, no card. Your key returns its own prices from `GET /v1/scraper/collectors`.

[Get my free API key](https://app.quanticdata.io/register)

Related: [All 82 collectors](https://quanticdata.io/collectors/) [Kleinanzeigen Scraper API](https://quanticdata.io/collectors/kleinanzeigen-scraper-api/) [Idealista Scraper API](https://quanticdata.io/collectors/idealista-scraper-api/) [Autotrader Scraper API](https://quanticdata.io/collectors/autotrader-scraper-api/) [eBay scraper API](https://quanticdata.io/collectors/ebay-scraper-api/) [Real estate data scraping](https://quanticdata.io/real-estate-data-scraping/) [Competitor price monitoring](https://quanticdata.io/competitor-price-monitoring/) [Documentation](https://quanticdata.io/docs/)

## Also on this site

Quantic**Data**

Residential proxies & web data APIs for AI.

#### Proxies

- [Residential Basic](https://quanticdata.io/residential-proxies/#basic)

- [Residential Premium](https://quanticdata.io/residential-proxies/#plans)

- [Cheap Residential](https://quanticdata.io/cheap-residential-proxies/)

- [Mobile Proxies](https://quanticdata.io/mobile-proxies/)

- [Datacenter Proxies](https://quanticdata.io/datacenter-proxies/)

- [ISP Proxies](https://quanticdata.io/isp-proxies/)

- [Rotating Proxies](https://quanticdata.io/rotating-proxies/)

- [Sneaker Proxies](https://quanticdata.io/sneaker-proxies/)

- [SOCKS5 Proxies](https://quanticdata.io/socks5-proxies/)

- [IPv6 Proxies](https://quanticdata.io/ipv6-proxies/)

- [Proxy locations](https://quanticdata.io/proxies/)

#### Data APIs

- [MCP Server](https://quanticdata.io/mcp-server/)

- [Web Scraper API](https://quanticdata.io/web-scraping-api/)

- [SERP API](https://quanticdata.io/serp-api/)

- [Collectors](https://quanticdata.io/collectors/)

- [Web Data for AI](https://quanticdata.io/web-data-api-for-ai/)

- [Quantic AI](https://quanticdata.io/ai-web-scraping-service/)

- [Browser AI Agents](https://quanticdata.io/browser-ai/)

- [Crawl & Map](https://quanticdata.io/crawl-map/)

- [SEO Audit](https://quanticdata.io/seo-audit/)

#### Use cases

- [Company data](https://quanticdata.io/scrape-company-data/)

- [Price monitoring](https://quanticdata.io/competitor-price-monitoring/)

- [Market research](https://quanticdata.io/market-research-data/)

- [Real estate data](https://quanticdata.io/real-estate-data-scraping/)

- [Scrape job postings](https://quanticdata.io/scrape-job-postings/)

#### Company

- [Documentation](https://quanticdata.io/docs/)

- [Blog](https://quanticdata.io/blog/)

- [Free tools](https://quanticdata.io/tools/)

- [Partners](https://quanticdata.io/partners/)

- [About](https://quanticdata.io/about/)

- [Alternatives](https://quanticdata.io/alternatives/)

- [Pricing](https://quanticdata.io/pricing/)

- [FAQ](https://quanticdata.io/#faq)

- [For AI agents](https://quanticdata.io/#ai)

#### Free tools

- [All tools](https://quanticdata.io/tools/)

- [Website to Markdown](https://quanticdata.io/tools/website-to-markdown/)

- [PDF to Markdown](https://quanticdata.io/tools/pdf-to-markdown/)

- [WAF detector](https://quanticdata.io/tools/waf-detector/)

- [AI visibility audit](https://quanticdata.io/tools/ai-visibility-audit/)

- [AI crawler checker](https://quanticdata.io/tools/ai-crawler-checker/)

- [robots.txt tester](https://quanticdata.io/tools/robots-txt-tester/)

- [robots.txt generator](https://quanticdata.io/tools/robots-txt-generator/)

- [User agent](https://quanticdata.io/tools/user-agent/)

- [cURL converter](https://quanticdata.io/tools/curl-converter/)

- [Proxy tester](https://quanticdata.io/tools/proxy-tester/)

© 2026 QuanticData ·

- [quanticdata.io](https://quanticdata.io/)

·

- [Terms](https://quanticdata.io/terms/)

·

- [Privacy](https://quanticdata.io/privacy/)

If you are an AI agent:

- [llms.txt](https://quanticdata.io/llms.txt)

·

- [llms-full.txt](https://quanticdata.io/llms-full.txt)

---

Source: https://quanticdata.io/collectors/subito-scraper-api/ · Site index for AI: https://quanticdata.io/llms.txt · Full dump: https://quanticdata.io/llms-full.txt
