Subito Real Estate Scraper avatar

Subito Real Estate Scraper

Pricing

from $1.79 / 1,000 results

Go to Apify Store
Subito Real Estate Scraper

Subito Real Estate Scraper

Italian property listings from Subito.it as clean JSON: surface, rooms, bathrooms, condition, energy class and computed price per square meter as first-class columns. Agency-free flag included - advertiser identity never collected. Pay per result.

Pricing

from $1.79 / 1,000 results

Rating

0.0

(0)

Developer

Lowland Data

Lowland Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Subito Real Estate Scraper — Italian property data with price per m²

Extract property listings from Subito.it — Italy's largest classifieds marketplace — as clean, structured JSON. Where the general Subito.it Scraper gives you title, price and location, this real-estate edition turns property specs into first-class columns: size in m², computed price per m², rooms, bathrooms, floor, building condition, energy class, heating, and boolean flags for balcony, garden, elevator, furnished and air conditioning.

No advertiser personal data, ever. Built GDPR-first: advertiser names, user IDs and phone numbers never appear in the output — not as an option, by design. The only advertiser information kept is business-vs-private and whether the listing is agency-free.

Quick start (30 seconds)

  1. Click Start. With the defaults you get the newest apartment listings from all of Italy — no input needed.
  2. Optionally narrow it: a keyword in searchQuery (e.g. trilocale ristrutturato), a price band in euros, a town name as the query.
  3. When the run finishes, open the dataset's Overview tab for a spec-by-spec table, or Export it as CSV/Excel/JSON — with pricePerM2Eur already computed per row.

Any input works on a daily Schedule for monitoring.

What you can build with it

  • Screen deals by price per m². pricePerM2Eur is computed for every listing that carries both a price and a size — sort the exported table and the outliers surface immediately, no spreadsheet formulas.
  • Hunt renovation projects. Filter buildingCondition for Da ristrutturare and combine with a low price per m² — the classic flipper screen, straight from structured attributes.
  • Watch supply in a market you serve. Agencies and investors can schedule a daily run per town or region and see new stock, asking prices and the agency-free share as it moves.
  • Find a rental that fits. furnished, rooms, elevator and balcony are structured booleans and numbers — filter the dataset instead of reading Italian ad text.

What you get

Each listing is one dataset item:

{
"listingId": "612345678",
"url": "https://www.subito.it/vendita-appartamenti/trilocale-ristrutturato-torino-612345678.htm",
"title": "Trilocale ristrutturato zona Santa Rita",
"description": "Trilocale al terzo piano, doppia esposizione, ristrutturato nel 2023.",
"priceEur": 179000,
"currency": "EUR",
"category": "Appartamenti",
"sizeM2": 85,
"pricePerM2Eur": 2106,
"rooms": 3,
"bathrooms": 1,
"floor": "3",
"buildingCondition": "Ottimo - ristrutturato",
"energyClass": "D",
"heating": "Autonomo",
"parking": "Posto auto",
"furnished": false,
"balcony": true,
"garden": false,
"elevator": true,
"airConditioning": true,
"agencyFree": false,
"town": "Torino",
"province": "Torino",
"region": "Piemonte",
"sellerType": "business",
"postedAt": "2026-08-24 09:41:12",
"imageUrls": ["https://images.sbito.it/api/v1/sbt-ads-images-pro/images/12/example"]
}

Field notes, so you know exactly what you are buying:

  • pricePerM2Eur is priceEur / sizeM2, rounded to the euro — the headline column. It is null when either input is missing.
  • Property specs are the seller's own form entries: rooms, bathrooms, floor and the boolean flags are only as complete as sellers fill them. Missing values are null, never guessed.
  • priceEur is null on listings without a stated price — trades (permuta) and rent-on-request listings, typically.
  • agencyFree: true means the seller listed without an agency (Subito's "no agente" flag).
  • town, province and region are municipality-level — no street addresses, no coordinates.
  • description is delivered with Subito's contact-data placeholders stripped: the site masks phone numbers and emails in ad text with placeholder tokens, and we remove the tokens.
  • sellerType separates agencies and businesses from private sellers. Advertiser identity is never collected.

How much does it cost to scrape Subito real estate listings?

$1.99 per 1,000 listings delivered, pay-as-you-go — no subscription, no charge for empty or failed runs. In plain euros:

  • 100 listings ≈ $0.20 — a daily watch on one town.
  • 500 listings ≈ $1.00 — a market snapshot with specs and price per m².

The price is all-inclusive — platform usage is covered, with no separate compute or proxy charges. Runs are fast: Subito serves its search results as plain JSON, datacenter proxies are sufficient, and a scoped run typically finishes in seconds.

Free-plan runs are limited to a sample of 25 items, enough to evaluate the columns against your real query.

Not technical? Let your AI assistant set it up

Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and follow the conversation:

Help me set up the "Subito Real Estate Scraper" actor on Apify
(https://apify.com/lowlanddata/subito-real-estate-scraper). Guide me one step at a time.
What I want to watch: [E.G. "apartments in Torino under 200,000 euros"]
Guide me to:
1. Propose my input values: an optional searchQuery (a town or keyword — empty
browses the whole apartments category), an optional priceMinEur/priceMaxEur
band, sortBy "date" for newest-first monitoring, and maxItems.
2. Create a free Apify account (apify.com), open the actor page, paste the values
into the Input form, and start a run.
3. Set up a daily Schedule in the Apify Console with the same input, plus an email
or Slack integration so new listings reach me automatically.
4. Show me how to export results as CSV/Excel — including the pricePerM2Eur
column — or read them from the API if I code.
5. If the results are what I wanted, remind me at the end to leave a quick rating
on the actor page, and to report anything broken or missing on its Issues tab.

Input

FieldDescription
searchQueryOptional keyword — a town, a neighbourhood, trilocale. Leave empty to browse the whole category.
categoryIdSubito category id. Default 7 (Appartamenti). Other Subito category ids are accepted.
priceMinEurOnly listings costing at least this many euros.
priceMaxEurOnly listings costing at most this many euros.
sortBydate (newest first, default) or relevance.
postedAfterOnly listings posted on or after this date (YYYY-MM-DD). Stops early with newest-first sorting.
postedBeforeOnly listings posted on or before this date (YYYY-MM-DD).
maxItemsStop after this many listings (default 500).
proxyConfigurationProxy settings; keep Apify proxy enabled. Datacenter proxies are enough.

No field is required — the defaults browse the newest apartments across Italy. Invalid combinations (like an inverted price band) fail immediately with the reason in the run's status message.

Use it from your code

Run the actor and get items straight back with one HTTP call (fine for scoped runs up to ~5 minutes):

curl "https://api.apify.com/v2/acts/lowlanddata~subito-real-estate-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-X POST -H "Content-Type: application/json" \
-d '{"searchQuery": "torino", "priceMaxEur": 200000, "maxItems": 100}'

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lowlanddata/subito-real-estate-scraper').call({
searchQuery: 'torino',
priceMaxEur: 200000,
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lowlanddata/subito-real-estate-scraper").call(
run_input={"searchQuery": "torino", "priceMaxEur": 200000, "maxItems": 100})
items = client.dataset(run["defaultDatasetId"]).list_items().items

Schedules, webhooks and the Make/Zapier/n8n integrations all work out of the box — this is a standard Apify actor.

Use it with AI agents (MCP)

Claude, Cursor and other MCP-capable agents can run this scraper as a tool through Apify's hosted MCP server: the agent fills in the search itself, starts the run and reads the results — no glue code.

Claude Code:

$claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/subito-real-estate-scraper"

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

https://mcp.apify.com?actors=lowlanddata/subito-real-estate-scraper

Sign in with your Apify account when prompted — runs are billed to it. Setup details per client: Apify MCP docs.

Prompts that work once connected:

  • "Get the newest apartments in Bologna under 250,000 euros and rank them by price per square meter."
  • "Find listings in Milano marked 'Da ristrutturare' and flag the cheapest per m²."
  • "Compare the median price per m² of apartments in Torino and Genova from today's listings."

Public listing data — asking prices, property specs, municipalities — is public commercial information, and this scraper is built so that the hard part of the question never arises: no personal data enters your dataset in the first place. The GDPR and Italy's Garante set strict rules on personal data; an output that carries none of the advertiser's identity is the point of this actor, not an afterthought.

Structurally, the extractor maps a fixed whitelist of fields out of the site's search data. The advertiser block — names, user IDs, phone numbers — is never read into the output; only the business-vs-private flag and the agency-free flag survive. Location stops at the municipality: exact addresses and coordinates are never collected. Requests are paced, load on the site is kept negligible, and no anti-bot protection is bypassed.

One honest limit: titles and descriptions are the seller's own words. Subito itself masks contact details typed into ad text with placeholders, and this actor strips those placeholders — but the guarantee covers the data fields, not every word sellers publish about themselves.

Is there a Subito real estate API alternative?

Subito publishes no public API for listings. This actor is the practical alternative: the same property listings as structured JSON — with specs and price per m² as columns — through one HTTP call (run-sync-get-dataset-items), on a schedule, or as an MCP tool for AI agents, with the privacy question already answered in the data itself.

Does Subito block scrapers?

Subito serves its search results openly as plain JSON to ordinary requests — and this actor stays inside that welcome: paced requests, standard datacenter proxies, load kept negligible. The apartments category alone serves over 126,000 listings this way. No CAPTCHA fights, no bot-wall cat-and-mouse — which is also why scoped runs finish in seconds and hold up on daily schedules.

How do I monitor new property listings on Subito?

Set sortBy: "date" with your query and price band, cap maxItems to a page or two, and add a daily (or hourly) Schedule in the Apify Console with an email/Slack integration on the runs — every new listing lands with price, size and price per m² already parsed. Even tighter: set postedAfter to yesterday's date — the dataset then contains only the new listings, nothing to dedupe on your side. The AI-assistant prompt above walks a non-technical user through exactly this setup.

FAQ

How do I get Subito real estate listings as JSON? Run this actor — every listing becomes one JSON object with price, size, price per m², rooms, condition, energy class and location as separate fields. Export as JSON, CSV or Excel, or read the dataset from the API.

Can I filter by price per square meter? Yes, on the output: pricePerM2Eur is a column in every export, so sorting or filtering it is one click in Excel or one line of code. The source search cannot filter on it, so pull your area and screen the dataset.

How is price per m² computed? priceEur divided by sizeM2, rounded to the euro. If a listing lacks either the price or the size, the field is null — nothing is imputed.

What does agencyFree mean? It is Subito's "no agente" flag: true means the advertiser states the property is listed without an agency. Combined with sellerType, it separates private direct sales from agency stock.

What is in the energyClass field? The energy performance class the seller declared, A through G, as a structured attribute — no parsing of ad text. Sellers who skip the field yield null.

Does it cover rentals as well as sales? The actor scrapes whatever the chosen Subito category serves. The default apartments category is dominated by sales; for rentals, pass the matching Subito category id in categoryId and read priceEur as the listed rent. Fields like furnished and rooms matter most there.

Can I scrape other property types than apartments? Yes — categoryId accepts any Subito category id. The default 7 is the apartments category; houses, rooms and commercial categories work the same way, though which specs sellers fill varies by category.

Are rooms and bathrooms always filled? No — they are the seller's own form entries and are only as complete as sellers make them. Missing specs come through as null so you can see exactly what was and wasn't declared.

Why is priceEur null on some listings? Some sellers list without a stated price — trades (permuta) or rent-on-request. The field is null honestly, and pricePerM2Eur is null with it.

What does buildingCondition contain? Subito's structured condition attribute, e.g. Ottimo - ristrutturato or Da ristrutturare. Filtering for Da ristrutturare plus a low price per m² is the fastest renovation-project screen.

Can I compare property prices between towns? Yes, from a single run: every listing carries town, province and region alongside pricePerM2Eur, so a median-per-town comparison is one pivot table away.

How do I get alerted when a new listing appears in my town? Put the town in searchQuery, set sortBy: "date" and postedAfter to yesterday, and schedule the run daily with an email or Slack integration — each run delivers only what is new.

Can I get the seller's name or phone number? No — by design. Advertiser names, user IDs and phone numbers are structurally unreachable; only business-vs-private and the agency-free flag survive. That is the product: data you can store and process without a privacy review.

Can I get the exact address of a property? No — location stops at town, province and region. Street addresses and coordinates are never collected.

Can I export to Excel or CSV? Yes — every dataset exports as CSV, Excel, JSON or XML from the Apify Console or API, with the property specs and price per m² as columns.

Can I schedule daily runs? Yes — this is a standard Apify actor: Schedules, webhooks and the Make/Zapier/n8n integrations all apply.

Does Subito have an official real estate API? No public one exists. This actor stands in for it — the same listings as structured JSON over one HTTP call, on a schedule, or as an MCP tool.

What does it cost to pull Subito property listings? $1.99 per 1,000 delivered listings, all-inclusive; a 100-listing daily town watch is roughly $0.20, and you pay nothing for failed or empty runs.

Why did I receive only 25 listings? Free-plan runs return a 25-item sample so you can check the columns against your query. Full results come with any paid Apify plan.

Can an AI assistant search Italian property listings for me? Yes — through Apify's hosted MCP server, agents such as Claude or Cursor can run a search like "apartments in Bologna ranked by price per m²" and read the dataset themselves.

The same clean-output guarantee, at home and across Europe:

Troubleshooting

The actor fails fast with the reason in the run's status message:

  • "priceMinEur must not be higher than priceMaxEur." — swap the two values.
  • "Subito blocked the run before any results could be fetched. This is usually temporary - retry in a few minutes." — a temporary block on the first request; a retry usually lands on a clean proxy session. A block mid-run keeps the items collected so far and says so in the status message.
  • Fewer items than requested on a free plan — the 25-item free sample cap; run on a paid Apify plan for full results.

Support

Found an issue or missing a field you need? Open an issue on the actor's Issues tab — reports get fixed, this actor is actively maintained.

Working well for you? A rating on this page takes ten seconds and helps other buyers find a privacy-clean option among the lookalikes — it is also the clearest signal of what we should build next.