Documentation Python quickstart Blog Free tools hello@quanticdata.ioLog in

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

Questa pagina in italiano →

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
Subito.it Scraper API: query and category in, a residential exit in the middle, delivered rows with rank, page and ad_id on the right, $0.001 per ad.
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 / ad2,000 ads on the free $2 every month
Semantic inputquery, category, region — no URL lists
Up to 150ads per run, pagination handled for you
No browserread over HTTP/TLS — cheaper and faster than rendering

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

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.

FieldTypeWhat it holds
rankinteger1-based position in the delivered results.
pageintegerResult page the ad came from.
ad_idstringSubito listing id (the number ending the ad URL).
titlestringAd title.
urlstring · nullableAd URL.
pricestring · nullablePrice as shown ("450 €"). Null for free and wanted ads.
price_valuenumber · nullableParsed price in euro.
categorystring · nullableCategory the ad is filed under ("Telefonia").
category_slugstring · nullableCategory slug ("telefonia").
conditionstring · nullableItem condition as stated ("Come nuovo - perfetto o ricondizionato").
kminteger · nullableMotori. Exact mileage — Subito's card shows only the bucket ("70.000 - 74.999").
yearinteger · nullableMotori. Registration year.
fuelstring · nullableMotori. Fuel as a stable key ("diesel", "plugin_hybrid_petrol"), matching the input enum; the Italian label is in features.
gearboxstring · nullableMotori. "manual", "automatic" or "sequential".
vehicle_conditionstring · nullableMotori. "used", "km0" or "new".
size_sqminteger · nullableImmobili. Floor area in square metres.
roomsinteger · nullableImmobili. Number of locali.
datestring · nullablePublication time as ISO 8601 with the Europe/Rome offset in force ("2026-09-03T00:56:18+02:00"; +01:00 in winter).
regionstring · nullableRegion ("Emilia-Romagna").
citystring · nullableProvince ("Parma").
townstring · nullableComune ("Parma").
seller_typestring"private" or "company".
seller_namestring · nullableShop or advertiser name, when stated.
seller_idstring · nullableSubito user id of the seller.
shippablebooleanSeller offers shipping.
shipping_costnumber · nullableShipping cost in euro, when stated.
promotedbooleanPaid visibility (gallery placement).
urgentbooleanMarked urgent by the seller.
descriptionstring · nullableFull ad text (first 600 characters) — not the truncated card excerpt.
thumbnailstring · nullableFirst photo.
imagesstring[]Every photo, in the ad's order.
featuresobjectEvery 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.

InputTypeRequiredWhat it does
querystringnoWhat 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.
categorystringnoSubito 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.
regionstringnoItalian 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.
citystringnoOptional province inside the region, as it appears in a Subito URL ("roma", "milano", "reggio-emilia"). Needs `region`.
townstringnoOptional 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_typestringnoWhich kind of ad: for sale, given away for free, or wanted. One of: sale, free, wanted.
sortstringnoResult order. One of: recent, relevance, price_asc, price_desc.
title_onlybooleannoMatch the query against ad titles only. Subito's default also matches the description, which pulls in loosely related ads.
shippable_onlybooleannoOnly ads the seller will ship.
min_priceintegernoLowest price in euro. Ads with no stated price are excluded when set.
max_priceintegernoHighest price in euro. Ads with no stated price are excluded when set.
seller_typestringnoPrivate sellers, verified dealers, or both. One of: any, private, company.
min_kmintegernoMotori. Lowest mileage in kilometres. Applied to the ads even in the categories where Subito offers no mileage filter (veicoli commerciali, caravan).
max_kmintegernoMotori. Highest mileage in kilometres.
min_yearintegernoMotori. Earliest registration year.
max_yearintegernoMotori. Latest registration year.
fuelstringnoMotori. 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.
gearboxstringnoMotori. Transmission type. One of: manual, automatic, sequential.
vehicle_conditionstringnoMotori. Used, zero-km or new. One of: used, km0, new.
min_sizeintegernoImmobili. Smallest floor area in square metres.
max_sizeintegernoImmobili. Largest floor area in square metres.
min_roomsintegernoImmobili. Fewest locali.
max_roomsintegernoImmobili. Most locali (Subito caps its own filter at "more than 10").
max_resultsintegernoHow 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.001per delivered ad$1 per 1,000 delivered ads
2,000 adson the free allowance$2 every month, no card
Zero rowszero chargeblocks, captchas and retries are on us
−30%on volume tiersthe 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

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. 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}'

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 scraperThis collector
FiltersOnly where Subito offers them — none on vans, none across all categoriesEvery filter re-checked on the rows, in every category
MileageThe bucket the card shows ("70.000 - 74.999")The exact odometer reading
A make or model keywordRedirected — sort, filters and paging silently lostFollowed to the canonical listing with sort and filters intact
A misspelt cityAn empty result that looks like "no ads"A clear error naming the place, before anything is billed
Blocks and retriesYour IPs, your problemItalian residential exits, failed runs never billed

What people search for

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

Subito.it Scraper API: the POST to /v1/scraper/collectors/subito_search/run with query and title_only on the left, and the JSON envelope on the right with 30 ads and usage.cost_usd $0.03.
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:

FAQ

Questions we get about the Subito.it scraper API.

Something else? Ask us →

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