Immobiliare.it All-in-One Scraper — Italy Buy & Rent Listings
Pricing
from $5.00 / 1,000 property scrapeds
Immobiliare.it All-in-One Scraper — Italy Buy & Rent Listings
Scrape immobiliare.it Italy real estate by city or search URL. Sale & rent. Price, m², locali, GPS, agency phone, images. Unblocker HTTP, MCP-ready, no login.
Pricing
from $5.00 / 1,000 property scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Immobiliare.it All-in-One Scraper is an Apify Actor for collecting public Italy real-estate listings from Immobiliare.it. It accepts a city or area slug such as milano or roma, or a pasted Immobiliare search or detail URL, and returns one structured record per listing. Each record can include asking price, surface in m², locali (mapped to rooms), city, province, macrozone, GPS coordinates, agency name, agency phone, images, and the canonical listing URL. It runs over HTTP with Apify Unblocker Italy and is usable through Apify MCP.
Best fit and connected workflows
This Actor fits workflows centered on Italian residential inventory from Immobiliare.it:
- Buy-side research from
venditasearches, with price, m², locali, and agency contact fields - Rental research from
affittosearches, with monthly rent and size fields - URL-driven collection when you already filtered on Immobiliare.it and want the Actor to follow that search
- Location-driven collection when you want the Actor to slugify a city such as Milano or Roma and run sale or rent filters
- CRM and spreadsheet import where one flat row per listing is the next step
If your workflow centers on another property market, these verified related Actors provide natural routing options:
- Then use Fotocasa All-in-One Scraper to extend Immobiliare.it All-in-One Scraper with a neighboring Spain buy/rent source when the brief calls for Fotocasa data
- Then use Idealista Scraper to extend Immobiliare.it All-in-One Scraper with a neighboring ES/IT/PT Idealista source when the brief calls for Idealista data
- Then use Rightmove All-in-One Scraper to extend Immobiliare.it All-in-One Scraper with a neighboring UK BUY/RENT/SOLD source when the brief calls for Rightmove data
Immobiliare.it All-in-One Scraper — Italy Buy & Rent Listings is designed as a focused standalone workflow for Immobiliare.it Italy.
Practical scenario
Marco is screening Milano apartments for sale under €400k for a relocation client. He sets location to milano, operation to sale, maxPrice to 400000, and maxItems to 10. The dataset returns fields such as price, surfaceSqm, rooms, city, agencyPhone, and url. Marco sorts by €/m², shortlists three macrozones, and opens each url to review photos before sharing a shortlist with the client. Auction listings stay out of the sample because excludeAuctions defaults to true.
Input
Use either an Immobiliare.it URL in startUrls or a location-based search with location and operation.
| Field | Type | Purpose |
|---|---|---|
startUrls | array | Immobiliare search (/vendita-case/…, /affitto-case/…) or detail (/annunci/{id}/) URLs. Search URLs are paginated until maxItems. |
location | string | Italian city or area when startUrls is empty (for example milano, roma, torino). |
operation | string | sale or rent for location mode. |
propertyType | string | Category such as home, commercial, land, or rooms. |
minPrice / maxPrice | integer | EUR filters (monthly rent for rent mode). |
minSurface / maxSurface | integer | Floor-area filters in m². |
minRooms / maxRooms | integer | Locali filters (Italian room count, not US bedrooms). |
excludeAuctions | boolean | Default true — keep judicial auction inventory out of comps. |
fetchDetails | boolean | Optional detail-page enrich for energy and bathroom attempts when present. |
maxItems | integer | Cap on returned rows and property event charges. |
proxyConfiguration | object | Prefer Apify Unblocker Italy for stable yield past DataDome. |
Focused input example:
{"location": "milano","operation": "sale","maxItems": 10,"excludeAuctions": true,"fetchDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["UNBLOCKER"],"apifyProxyCountry": "IT"}}
URL-mode input example:
{"startUrls": [{ "url": "https://www.immobiliare.it/vendita-case/milano/" }],"maxItems": 10}
Output
Each dataset item is one flat JSON record per listing. Download JSON, HTML, CSV, or Excel from the Dataset tab.
| Field | Type | Meaning |
|---|---|---|
listingId | string | Immobiliare numeric listing identifier. |
url | string | Canonical /annunci/{id}/ listing URL. |
contract | string | sale or rent. |
title | string or null | Public listing title. |
price | number or null | Asking price in EUR (monthly for rent). |
surfaceSqm | number or null | Floor area in square metres. |
rooms | integer or null | Locali count when published. |
city / province / macrozone | string or null | Location labels. |
latitude / longitude | number or null | GPS coordinates when published. |
agencyName | string or null | Agency or advertiser name. |
agencyPhone | string or null | Public agency phone when shown. |
images | array | Photo URLs when published. |
scrapedAt | string | Collection timestamp for the row. |
Illustrative JSON record:
{"listingId": "131616220","url": "https://www.immobiliare.it/annunci/131616220/","contract": "sale","title": "Appartamento via Example","price": 285000,"surfaceSqm": 78,"rooms": 3,"city": "Milano","province": "Milano","macrozone": "Città Studi","latitude": 45.46,"longitude": 9.18,"agencyName": "Agenzia Example","agencyPhone": "02 1234567","scrapedAt": "2026-09-22T09:00:00.000Z"}
OUTPUT and RUN_SUMMARY in the default key-value store hold outcome, itemsPushed, and charge counts. Outcomes include COMPLETE, VALID_EMPTY, INVALID_INPUT, and UPSTREAM_FAILED.
How it works
The Actor builds a vendita or affitto search path from location, or follows pasted Immobiliare.it URLs. It pages the public listings API (/api-next/search-list/listings/) until maxItems is reached, maps locali to rooms, and optionally enriches detail pages from __NEXT_DATA__ when fetchDetails is on. Default Unblocker Italy keeps DataDome from emptying the run. Every terminal path writes OUTPUT and RUN_SUMMARY with an explicit outcome.
Pricing
This Actor uses Apify Pay per event plus standard Apify platform usage (passed through to the caller, including Unblocker). Charged events:
- Actor start — $0.00005
- Property scraped — $0.005 per returned search listing
- Property detailed — $0.008 per detail-enriched listing when
fetchDetailsis on
Open the live Pricing tab in the Apify Console for the current source of truth. A run that returns ten search listings charges the start event once and the property-scraped event ten times, plus platform usage for compute and Unblocker.
Use with AI agents (MCP)
This Actor is available through Apify MCP as apify--immobiliare-it-all-in-one-scraper. Exact Actor identity: khadinakbar/immobiliare-it-all-in-one-scraper.
Tool shape: resolve an Italy city or Immobiliare.it URL, return flat listing rows with price, size, locali, agency phone, GPS, and URL for CRM or agent reasoning.
Search Immobiliare.it for homes for sale in Milano, return price, surfaceSqm, rooms, city, agencyPhone, and url for each listing. Cap at 10 rows and keep auctions excluded.
Agent readback guidance:
- Dataset rows are the primary result store
OUTPUT/RUN_SUMMARYcarry the run outcome and countsurlplusscrapedAtkeep provenance inspectablemaxItemsbounds both yield and PPE charges- Cost maps one returned search row to one
property-scrapedevent; check the Pricing tab for live amounts alongside platform usage - Invalid-only URLs finish
INVALID_INPUT; empty niche inventory can finishVALID_EMPTYwith zero property charges
Apify API example
import { ApifyClient } from "apify-client";const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor("khadinakbar/immobiliare-it-all-in-one-scraper").call({location: "roma",operation: "rent",maxItems: 10,excludeAuctions: true,fetchDetails: false,proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ["UNBLOCKER"],apifyProxyCountry: "IT",},});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Best results and outcome guidance
Prefer Unblocker Italy (the default). Segment large cities by macrozone or price band instead of one oversized cap. Paste a ready-made Immobiliare.it search URL when filters are already set on the site. Leave fetchDetails off unless you specifically need detail-page energy or bathroom attempts. Treat rooms as Italian locali. Empty niche inventory can finish as VALID_EMPTY with zero property charges; paste-only non-Immobiliare URLs finish as INVALID_INPUT.
Design note
I found that bare Residential and datacenter HTTP against Immobiliare.it serves DataDome challenge pages before any listing JSON appears, so Unblocker Italy is the durable default for complete listing runs. Geography autocomplete also needs browser cookies, so location mode slugifies the city into /vendita-case/{slug}/ or /affitto-case/{slug}/ and pages the listings API — that is what keeps Milano sale and Roma rent canaries complete on the private release build.
Troubleshooting and recovery
| Symptom | Likely cause | Recovery |
|---|---|---|
| Empty dataset with DataDome challenge pages in logs | Proxy group still set to Residential or datacenter | Set proxyConfiguration to Unblocker Italy and rerun |
INVALID_INPUT with zero charges | startUrls contain only non-Immobiliare hosts | Paste a /vendita-case/, /affitto-case/, or /annunci/{id}/ URL, or set location |
VALID_EMPTY on a niche filter | No public inventory for that city/filter band | Widen price/surface/locali, try a larger city, or paste a known search URL |
Detail energy/baths missing with fetchDetails | Field omitted on that public listing page | Keep search-card fields; treat detail enrich as best-effort |
| Deep pagination returns fewer pages than expected | Portal page-depth ceiling for that search | Segment by macrozone or price band instead of one large maxItems |
FAQ
How do I scrape rentals instead of sales?
Set operation to rent, or paste an affitto-case search URL into startUrls.
How do I scrape a single listing?
Paste a detail URL ending in /annunci/{id}/ into startUrls.
How do I keep agency outreach fields?
Use the default search path; agencyName and agencyPhone are returned when Immobiliare.it publishes them on the card.
How do I bound cost?
Set maxItems to the number of listings you need; each accepted search row maps to one property-scraped event.
Responsible use
Use this Actor on public Immobiliare.it listing data you are authorized to process, follow applicable law and Immobiliare.it terms, and keep the output in your own compliance workflow. Keep returned phones inside lawful, consented outreach workflows. Immobiliare.it is a trademark of its respective owners. This independent Actor is not affiliated with, associated with, or endorsed by Immobiliare.it or Idealista Group.
Issues and feature requests: use the Actor Issues tab on Apify.