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.
$0.001 per delivered ad · $2 free every month · Failed runs never billed
$ 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
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.
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.
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.
Pay as you go
- $2 free credit / month
- 60 requests / min
- List unit prices
Starter
- $15 free credit / month
- 300 requests / min
- 10% off unit prices
Growth
- $50 free credit / month
- 600 requests / min
- 20% off unit prices
Scale
- $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. 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/.
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}'
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.
Sources and standards
The platform documentation and standards this collector is built against — check any claim on this page against the primary source:
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.