# Immobiliare.it Scraper — Italy Sale, Rent & Auctions (`crawloop/immobiliare-it-scraper`) Actor

Immobiliare.it scraper for Italian apartments and houses for sale, rent, and auction. Get price, m2, rooms, GPS, photos, and agency phones. Paste a search or listing URL. API alternative for Python, Node.js, and MCP.

- **URL**: https://apify.com/crawloop/immobiliare-it-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Immobiliare.it Scraper — Italy Sale, Rent & Auctions

> **Disclaimer:** This is an unofficial integration developed independently. It is not affiliated with, sponsored by, or endorsed by Immobiliare.it S.p.A. or any of its subsidiaries.
>
> **Immobiliare.it** and related names are trademarks of their respective owners. Data is read from publicly accessible Immobiliare.it Italy listings. No Immobiliare.it account login is required.
>
> This Actor is provided **for informational, research, lead-generation, and market monitoring purposes**. You are solely responsible for complying with applicable laws (including GDPR), Immobiliare.it's terms of use, and your organization's policies when processing listing and agent data.

**Immobiliare.it scraper** for **Italy real estate**: apartments and houses for **sale (vendita)**, **rent (affitto)**, and **auction (aste)** with price, €/m², rooms, surface, GPS, photos, **private owner vs agency**, and public **agency phones**. Use it as an **Immobiliare.it API alternative** from **Python**, **Node.js**, **cURL**, or **Apify MCP** / AI assistants — paste any search or `/annunci/{id}/` URL.

**Best for:** Italy sale and rent comps, PropTech pipelines, FSBO / da-privati leads, auction screening, and dataset export (JSON / CSV) via Apify.

| Actor | Role |
| :--- | :--- |
| Immobiliare.it Scraper ◄── you are here | Italy listings (sale, rent, auctions) |
| [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) | Spain Idealista listings + agency leads |
| [ImmobilienScout24 Scraper](https://apify.com/crawloop/immobilienscout24-scraper) | Germany IS24 rent & buy |
| [Rightmove Scraper](https://apify.com/crawloop/rightmove-scraper) | UK sale & rent |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | French classifieds |

### When to use this Actor

- **Immobiliare.it scraper for search pages** — Copy a filtered browser URL (city, price, locali, superficie, con-ascensore) into Start URLs.
- **Vendita / affitto / aste datasets** — Roma, Milano, Napoli, Torino, or any comune; export JSON/CSV for comps and pipelines.
- **Private-seller (da privati) lead lists** — Enable **Private sellers only** to keep `isPrivate: true` rows and skip agency inventory.
- **Agency phones on the search card** — Public `agencyPhones` / `agentPhones` when Immobiliare already shows them (no contact-unlock).
- **Scheduled monitoring** — Re-run the same search and emit only **new** or **price-changed** listings.
- **Coverage past the 2,000-result cap** — Immobiliare.it search-list stops at 80 pages × 25 ads. Large cities are split by price bands automatically.

### When not to use this Actor

- **Casa.it / Idealista.it / Subito.it** — This Actor targets **immobiliare.it (Italy)** only. Use [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) for Spain.
- **Agency directory crawl (`/agenzie-immobiliari/`)** — Paste search or listing URLs. Full agency-portfolio crawling is not in this version.
- **Hidden contact reveal** — Public phones already on the card are included. The Actor does not solve Immobiliare contact-unlock walls.
- **Authenticated actions** — No login, messaging, or saved-search inbox.

### Key features

- **JSON search API** — Reads Immobiliare.it's `api-next/search-list/listings` backend. No headless browser for search; 128–512 MB RAM.
- **Search + listing URLs** — One Actor handles result lists (`/vendita-case/roma/`, `/search-list/`) and single `/annunci/{id}/` IDs.
- **Search builder** — Type a city (Roma, Milano, Napoli), sale vs rent vs auction, residential / commercial / land, plus price / rooms / m² filters when you do not have a URL.
- **Private vs agency** — `isPrivate` / `advertiserType` on every row; optional private-only filter.
- **Monitor mode** — Key-value store remembers listing IDs and prices across runs.
- **Residential IT proxy** — Recommended on Apify Cloud so datacenter IPs are not blocked by DataDome on HTML listing pages.

### Input

| Field | What it does |
| :--- | :--- |
| **Start URLs** | Search (`/vendita-case/…`, `/affitto-case/…`, `/aste-immobiliari/…`, `/search-list/`) or listing (`/annunci/{id}/`) links. Filters in the URL are kept. |
| **City** | Builder only. `Roma`, `Milano`, `Napoli`, … |
| **Sale / rent / auction** / **Property category** | Builder only. Case, uffici, terreni, nuove. |
| **Min/max price, rooms, m²** | Builder filters in euros / locali / superficie. |
| **Max listings** | Cap on dataset rows. |
| **Include description and large photos** | Default on. Off = title photo only, no description (smaller rows). |
| **Private sellers only** | Drop agency listings. |
| **Monitor mode** | Save new and price-changed rows only. |
| **Proxy** | Apify Residential, country IT. |

```json
{
  "startUrls": [
    { "url": "https://www.immobiliare.it/vendita-case/roma/" }
  ],
  "maxItems": 50,
  "includeDetails": true,
  "onlyPrivate": false,
  "monitorMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IT"
  }
}
```

Rent example (builder, no URL):

```json
{
  "city": "Milano",
  "transactionType": "rent",
  "propertyType": "residential",
  "maxPrice": 1500,
  "minRooms": 2,
  "maxItems": 100
}
```

### Output

One dataset row per listing. Search-card fields (including description and phones) are present when details are on.

| Field | Description |
| :--- | :--- |
| `id` | Immobiliare announcement ID |
| `url` | `/annunci/{id}/` URL |
| `title` | Headline |
| `contract` | `sale`, `rent`, or `auction` |
| `typology` | Trilocale, Appartamento, Villa, … |
| `price` / `priceLabel` | Numeric euros + formatted string |
| `pricePerSqm` | €/m² when surface is known |
| `surfaceValue` / `roomsValue` / `bathroomsValue` | m², locali, bagni |
| `floor` / `elevator` / `features` | Piano, ascensore, balcony/terrace flags |
| `condition` / `heating` / `energyClass` | Stato, riscaldamento, APE when present |
| `isPrivate` / `advertiserType` | Private owner vs agency |
| `agencyName` / `agencyUrl` / `agencyPhones` | Public advertiser fields |
| `agentName` / `agentPhones` | Agent on the card |
| `address` / `city` / `province` / `macrozone` / `microzone` | Location |
| `latitude` / `longitude` | GPS |
| `pictures` | Image URLs (upgraded to full size when details are on) |
| `description` | Listing text from the search payload |
| `visibility` | supervetrina / premium / standard |
| `scrapedAt` | ISO timestamp |

```json
{
  "id": "130988676",
  "url": "https://www.immobiliare.it/annunci/130988676/",
  "title": "Trilocale via Flaminia, 443, Flaminio, Roma",
  "contract": "sale",
  "typology": "Trilocale",
  "price": 590000,
  "pricePerSqm": 7283.95,
  "surfaceValue": 81,
  "roomsValue": 3,
  "bathroomsValue": 2,
  "elevator": true,
  "isPrivate": false,
  "advertiserType": "agency",
  "agencyName": "Leonardo Leo Immobiliare",
  "agencyPhones": ["06 8590 3213"],
  "address": "Via Flaminia, 443",
  "city": "Roma",
  "macrozone": "Parioli, Flaminio",
  "latitude": 41.9333,
  "longitude": 12.467,
  "pictures": ["https://pwm.im-cdn.it/image/1970422276/xxl.jpg"],
  "scrapedAt": "2026-08-18T13:00:00+00:00"
}
```

### Use cases

- **Agents** — Watch competing inventory by macrozona; filter to privati for new mandates.
- **Investors / PropTech** — City-level sale and €/m² snapshots, GPS for maps, auction vs free-sale mix.
- **Relocation / HR** — Monthly rent + surface + rooms for employee housing shortlists in Milano or Roma.
- **Market research** — Schedule daily runs in monitor mode and store only new ads and price cuts.

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/immobiliare-it-scraper').call({
  startUrls: [{ url: 'https://www.immobiliare.it/vendita-case/roma/' }],
  maxItems: 50,
  includeDetails: true,
  proxyConfiguration: {
    useApifyProxy: true,
    apifyProxyGroups: ['RESIDENTIAL'],
    apifyProxyCountry: 'IT',
  },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]?.id, items[0]?.price, items[0]?.surfaceValue);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("crawloop/immobiliare-it-scraper").call(
    run_input={
        "startUrls": [
            {"url": "https://www.immobiliare.it/affitto-case/milano/"}
        ],
        "maxItems": 50,
        "includeDetails": True,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "IT",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("id"), item.get("price"), item.get("isPrivate"))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~immobiliare-it-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": [{"url": "https://www.immobiliare.it/aste-immobiliari/roma/"}],
    "maxItems": 20,
    "includeDetails": true,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": ["RESIDENTIAL"],
      "apifyProxyCountry": "IT"
    }
  }'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name (`crawloop/immobiliare-it-scraper`).

Example prompts:

- "Run Immobiliare.it Scraper for vendita case in Roma, max 30, and return id, price, m², rooms, agency phones as JSON"
- "Scrape Immobiliare.it Milano apartments for rent under €1,500 with full details and summarize private vs agency share"
- "Pull Immobiliare.it Roma auctions, then compare the field set with Idealista Scraper for an Italy vs Spain pipeline"

### Suite next step

After Italy Immobiliare.it comps, add Spain coverage with [Idealista Scraper](https://apify.com/crawloop/idealista-scraper), or Germany with [ImmobilienScout24 Scraper](https://apify.com/crawloop/immobilienscout24-scraper).

### FAQ

**Is this an official Immobiliare.it API?**\
No. It is an unofficial **Immobiliare.it scraper** / **Italy real estate API alternative** that reads the public search-list JSON used by the website. It is not affiliated with Immobiliare.it S.p.A. You can call it from **Python**, **Node.js**, **cURL**, or **MCP**.

**How do I scrape Immobiliare.it with Python or Node.js?**\
Use the Apify client examples above (`crawloop/immobiliare-it-scraper`). Pass a search URL or the city builder (`city`, `transactionType`) and read the dataset as JSON.

**Can I scrape vendita case in Roma (or another city)?**\
Yes. Paste a Roma `/vendita-case/roma/` URL, or use the builder with city `Roma`, sale, and residential. The same pattern works for Milano, Napoli, Torino, and other comuni.

**Why residential proxies?**\
HTML listing pages sit behind DataDome. Search JSON often works with Italy residential. Use RESIDENTIAL + country IT on Cloud.

**Can I paste a browser search URL?**\
Yes. Apply filters on the site, copy the `/vendita-case/…` or `/search-list/` URL, paste into Start URLs. Price, rooms, surface, and amenity path slugs (`con-ascensore`, `da-privati`) are translated.

**Does it stop at 2,000 results like the website?**\
One query is capped at 80 pages (25 listings each). If the result set is larger, the Actor splits the price range automatically so Roma / Milano dumps are not truncated.

**Are phone numbers included?**\
Yes, when the search card already lists them (`agencyPhones`, `agentPhones`). Private contact-unlock flows are not automated.

### Related Actors

| Actor | What it covers |
| :--- | :--- |
| [Idealista Scraper](https://apify.com/crawloop/idealista-scraper) | Spain sale/rent listings + agency phones |
| [ImmobilienScout24 Scraper](https://apify.com/crawloop/immobilienscout24-scraper) | Germany IS24 rent & buy |
| [Rightmove Scraper](https://apify.com/crawloop/rightmove-scraper) | UK Rightmove sale & rent |
| [Leboncoin Scraper](https://apify.com/crawloop/leboncoin-scraper) | France classifieds |
| [Yad2 Scraper](https://apify.com/crawloop/yad2-scraper) | Israel classifieds |

# Actor input Schema

## `startUrls` (type: `array`):

Paste Immobiliare.it search-result URLs (vendita/affitto/aste or /search-list/) or individual /annunci/{id}/ listing URLs. Filters in the search URL (city, price, rooms, surface, amenities) are applied automatically.

## `city` (type: `string`):

Used only when Start URLs are empty. Italian city name such as Roma, Milano, Napoli, Torino.

## `transactionType` (type: `string`):

Builder only. Vendita, affitto, or aste immobiliari.

## `propertyType` (type: `string`):

Builder only. Residential (case), commercial (uffici), land (terreni), or new builds (nuove).

## `minPrice` (type: `integer`):

Minimum sale price or monthly rent in euros. Builder only, or ignored when the Start URL already has a price filter.

## `maxPrice` (type: `integer`):

Maximum sale price or monthly rent in euros.

## `minRooms` (type: `integer`):

Minimum room count (locali), e.g. 2.

## `maxRooms` (type: `integer`):

Maximum room count (locali), e.g. 4.

## `minSurface` (type: `integer`):

Minimum surface in square metres.

## `maxSurface` (type: `integer`):

Maximum surface in square metres.

## `maxItems` (type: `integer`):

Maximum number of listings to save per run.

## `includeDetails` (type: `boolean`):

Keep listing description and upgrade photo URLs to full size. Turn off for smaller search-card rows (title photo only, no description).

## `onlyPrivate` (type: `boolean`):

Keep only private-owner listings (isPrivate=true). Useful for FSBO / privato lead generation.

## `monitorMode` (type: `boolean`):

On scheduled re-runs, save only listings that are new or whose price changed since the last run on this Actor.

## `maxConcurrency` (type: `integer`):

How many /annunci/ HTML requests to run in parallel (direct listing URLs only). Default 8.

## `proxyConfiguration` (type: `object`):

Apify Proxy. Italy RESIDENTIAL is recommended for stable access to Immobiliare.it on Apify Cloud (DataDome on HTML pages).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.immobiliare.it/vendita-case/roma/"
    }
  ],
  "city": "Roma",
  "transactionType": "sale",
  "propertyType": "residential",
  "maxItems": 10,
  "includeDetails": true,
  "onlyPrivate": false,
  "monitorMode": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IT"
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items — one Immobiliare.it listing per row.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://www.immobiliare.it/vendita-case/roma/"
        }
    ],
    "city": "Roma",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/immobiliare-it-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.immobiliare.it/vendita-case/roma/" }],
    "city": "Roma",
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/immobiliare-it-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.immobiliare.it/vendita-case/roma/"
    }
  ],
  "city": "Roma",
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IT"
  }
}' |
apify call crawloop/immobiliare-it-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/immobiliare-it-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5J1lcS5vWs1yeaKA3/builds/DDPd5m2qkqBwW3mBf/openapi.json
