# Immobiliare.it Scraper (Italy Real Estate Listings) (`scrapers_lat/immobiliare-it-scraper`) Actor

Scrape immobiliare.it property listings by search URL, location or listing URL. Get price, price per m2, rooms, size, floor, features, geo, energy class, owner-direct vs agency, agency name and phone. Export to JSON, CSV or Excel.

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

## Pricing

from $18.91 / 1,000 listing results

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 Real Estate Listings)](https://scrapers.lat/banners/immobiliare-it-scraper.png)](https://console.apify.com/actors/PRMZufaRFfvnrQaC0/input)

## Immobiliare.it Scraper (Italy Real Estate Listings)

Here is one real result, with every field the actor returns:

```json
{
  "listingId": "130988676",
  "title": "Trilocale via Flaminia, 443, Flaminio, Roma",
  "listingUrl": "https://www.immobiliare.it/annunci/130988676/",
  "operation": "vendita",
  "propertyType": "appartamento",
  "typologyLabel": "Appartamento",
  "priceAmount": 590000,
  "priceCurrency": "EUR",
  "pricePerM2": 7284,
  "priceRange": null,
  "rooms": 3,
  "bedrooms": 2,
  "bathrooms": 2,
  "sizeM2": 81,
  "floor": "5°, con ascensore",
  "elevator": true,
  "latitude": 41.9333,
  "longitude": 12.467,
  "address": "Via Flaminia, 443",
  "city": "Roma",
  "province": "Roma",
  "region": "Lazio",
  "macrozone": "Parioli, Flaminio",
  "microzone": "Flaminio",
  "isLuxury": true,
  "isNew": false,
  "condition": "Ottimo / Ristrutturato",
  "conditionText": "Ottimo / Ristrutturato",
  "heating": "Centralizzato",
  "heatingType": "centralizzato, a radiatori, alimentato a metano",
  "airConditioning": "autonomo, freddo/caldo",
  "buildingYear": 1950,
  "energyClass": "E",
  "energyEpi": 58.32,
  "condominiumExpenses": "€ 70/mese",
  "ownerDirect": false,
  "isProfessional": true,
  "advertiserType": "agency",
  "agencyName": "Leonardo Leo Immobiliare",
  "agencyUrl": "https://www.immobiliare.it/agenzie-immobiliari/474184/leonardo-leo-immobiliare/",
  "phone": "06 8590 3213",
  "features": ["cancello elettrico", "fibra ottica", "porta blindata", "balcone", "impianto tv centralizzato", "infissi in doppio vetro", "Ascensore"],
  "featureCount": 14,
  "descriptionSnippet": "FLAMINIO, VIVERE IL NUOVO. Trilocale con terrazzo pronto per essere abitato al quinto piano con ascensore...",
  "description": "FLAMINIO, VIVERE IL NUOVO. Nuovo, elegante e moderno appartamento composto da: ingresso, soggiorno con cucina a vista e accesso sul terrazzo di 10mq, camera matrimoniale, camera doppia con bagno privato...",
  "image": "https://pwm.im-cdn.it/image/1970422276/xxl.jpg",
  "images": ["https://pwm.im-cdn.it/image/1970422276/xxl.jpg", "https://pwm.im-cdn.it/image/1970422280/xxl.jpg"],
  "imageCount": 27,
  "publishedDate": "1784719907",
  "aiHighlights": ["Modern 3-room apartment with terrace", "5th floor with elevator access", "Close to MAXXI and Auditorium", "Ready to move in, fully renovated"],
  "aiCondition": "excellent / renovated",
  "aiTargetBuyer": "young professionals or families",
  "aiPricePerM2Assessment": "high for the area",
  "searchUrl": "https://www.immobiliare.it/annunci/130988676/",
  "source": "immobiliare.it",
  "observedAt": "2026-08-20T07:44:07.051Z"
}
```

The most complete immobiliare.it scraper available. It returns every field the listing exposes, from price, price per m2, rooms, size, floor and geo coordinates to the full feature list, energy class, building year, condominium expenses and description, plus the owner-direct versus agency signal, agency name and phone. It adds derived fields (price per m2, normalized property type) and gives you seven filters to target exactly the listings you need.

**📥 [Input](https://apify.com/scrapers_lat/immobiliare-it-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/immobiliare-it-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/immobiliare-it-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/immobiliare-it-scraper/examples)**

![Platform](https://img.shields.io/badge/platform-Apify-blue) ![Coverage](https://img.shields.io/badge/coverage-Italy-green) ![Output](https://img.shields.io/badge/output-JSON%20%7C%20CSV%20%7C%20Excel-orange) ![Billing](https://img.shields.io/badge/billing-pay%20per%20result-black)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)
- [More scrapers at scrapers.lat](#more-scrapers-at-scraperslat)

### What it does

This actor collects property listings from immobiliare.it, Italy's number one real estate portal, and returns clean, structured records ready for JSON, CSV or Excel. Point it at a search results URL, a location plus operation, or a list of individual listing URLs, and it walks the results, following pagination.

For every listing you get:

- Price, currency, price range band and a derived price per m2.
- Rooms (locali), bedrooms, bathrooms, surface in m2, floor, and whether the building has an elevator.
- Property type (normalized) and the original Italian typology label.
- Full location: address, city, province, region, macrozone, microzone, plus latitude and longitude.
- Feature list (balcony, terrace, garage, air conditioning, fiber, armored door and more) and heating type.
- The owner-direct versus agency signal, advertiser type, agency name, agency profile URL and contact phone when shown.
- First image plus, with the detail add-on, the full image gallery.
- Optional detail enrichment: energy class, energy performance index, building year, condition, condominium expenses and the full description.
- Optional AI summary: buyer-facing highlights, a condition read, the ideal target buyer and a price-per-m2 value assessment.

Filters let you narrow by operation (buy or rent), property type, minimum and maximum price, and minimum rooms.

### Quickstart

Run with a search URL copied from your browser:

```json
{
  "startUrl": "https://www.immobiliare.it/vendita-case/roma/",
  "maxResults": 50
}
```

Or use a location plus operation with filters:

```json
{
  "location": "milano",
  "operation": "vendita",
  "propertyType": "appartamento",
  "minPrice": 200000,
  "maxPrice": 500000,
  "minRooms": 3,
  "maxResults": 100
}
```

### Input reference

| Name | Type | Required | Description | Example |
|------|------|----------|-------------|---------|
| `startUrl` | string | no | An immobiliare.it search results URL. Most precise way to target results. | `https://www.immobiliare.it/vendita-case/roma/` |
| `location` | string | no | City or comune, used with `operation` when no `startUrl` is set. | `milano` |
| `operation` | string | no | `vendita` (buy) or `affitto` (rent). | `vendita` |
| `propertyType` | string | no | Keep only this type: appartamento, casa, villa, attico, loft, mansarda, terreno, box, ufficio, negozio, palazzo. | `appartamento` |
| `minPrice` | integer | no | Minimum price in euros. | `200000` |
| `maxPrice` | integer | no | Maximum price in euros. | `500000` |
| `minRooms` | integer | no | Minimum number of rooms (locali). | `3` |
| `listingUrls` | array | no | Individual listing URLs to scrape directly with full detail. | `["https://www.immobiliare.it/annunci/130988676/"]` |
| `maxResults` | integer | no | Max listings to collect across the run. Free plans are capped at 10. | `50` |
| `contactDetails` | boolean | no | Paid add-on, off by default. Fetch each detail page for energy class, building year, condition, condominium expenses, full features, geo, agency contact and full description. | `false` |
| `aiListingSummary` | boolean | no | Paid add-on, off by default. AI highlights, condition, target buyer and price-per-m2 assessment. | `false` |

### Output reference

| Name | Type | Description |
|------|------|-------------|
| `listingId` | string | immobiliare.it listing id |
| `title` | string | Listing title |
| `listingUrl` | string | Listing page URL |
| `operation` | string | vendita (sale) or affitto (rent) |
| `propertyType` | string | Normalized property type |
| `typologyLabel` | string | Original Italian typology (Trilocale, Villa, ...) |
| `priceAmount` | integer | Price in euros |
| `priceCurrency` | string | Price currency (EUR) |
| `pricePerM2` | integer | Derived price per m2 |
| `priceRange` | string | Price band when the exact price is hidden |
| `rooms` | integer | Number of rooms (locali) |
| `bedrooms` | integer | Number of bedrooms |
| `bathrooms` | integer | Number of bathrooms (bagni) |
| `sizeM2` | integer | Surface in m2 (superficie) |
| `floor` | string | Floor / storey text (piano) |
| `elevator` | boolean | Building has an elevator (ascensore) |
| `latitude` | number | Latitude |
| `longitude` | number | Longitude |
| `address` | string | Street address when shown |
| `city` | string | City / comune |
| `province` | string | Province |
| `region` | string | Region (regione) |
| `macrozone` | string | Macrozone / district |
| `microzone` | string | Microzone / neighborhood (zona) |
| `isLuxury` | boolean | Marked as a luxury listing |
| `isNew` | boolean | Marked as new / new build |
| `condition` | string | Condition label |
| `conditionText` | string | Full condition text (detail add-on) |
| `heating` | string | Heating type label |
| `heatingType` | string | Full heating description (detail add-on) |
| `airConditioning` | string | Air conditioning description (detail add-on) |
| `buildingYear` | integer | Year the building was built (detail add-on) |
| `energyClass` | string | Energy class A-G (detail add-on) |
| `energyEpi` | number | Energy performance index (detail add-on) |
| `condominiumExpenses` | string | Condominium expenses (detail add-on) |
| `ownerDirect` | boolean | True when listed by a private owner, not an agency |
| `isProfessional` | boolean | True when listed by a professional agency or builder |
| `advertiserType` | string | Advertiser type (agency, constructor, ...) |
| `agencyName` | string | Agency / advertiser name |
| `agencyUrl` | string | Agency profile URL |
| `phone` | string | Contact phone when shown |
| `features` | array | Feature list |
| `featureCount` | integer | Number of features captured |
| `descriptionSnippet` | string | Short description snippet |
| `description` | string | Full description (detail add-on) |
| `image` | string | First listing image URL |
| `images` | array | All listing image URLs (detail add-on) |
| `imageCount` | integer | Number of images captured |
| `publishedDate` | string | Last update timestamp (detail add-on) |
| `aiHighlights` | array | AI buyer-facing highlights (AI add-on) |
| `aiCondition` | string | AI condition assessment (AI add-on) |
| `aiTargetBuyer` | string | AI ideal target buyer (AI add-on) |
| `aiPricePerM2Assessment` | string | AI price per m2 assessment (AI add-on) |
| `searchUrl` | string | Search URL that produced this listing |
| `source` | string | Data source |
| `observedAt` | string | ISO timestamp collected |

### Example output record

See the real record at the top of this page. Base fields are always present; detail fields (energy class, building year, condominium expenses, full features, full description, full gallery) fill in when the contact and detail add-on is enabled, and the AI fields fill in when the AI summary add-on is enabled.

### Run via API and CLI

Start a run with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~immobiliare-it-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrl":"https://www.immobiliare.it/vendita-case/roma/","maxResults":50}'
```

Or with the Apify CLI:

```bash
apify call scrapers_lat/immobiliare-it-scraper \
  --input '{"location":"milano","operation":"vendita","maxResults":50}'
```

### Fetch results

Read the dataset items once the run finishes:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN&format=json"
```

Swap `format=json` for `format=csv` or `format=xlsx` to export directly to CSV or Excel.

### Billing and limits

- Pay per result: you are charged per listing returned, not per page fetched.
- Empty and failed runs cost nothing for results. If a search returns no matches, no result events are charged.
- Free Apify plans are capped at 10 listings per run and cannot use the paid add-ons. Upgrade for the full result set.
- The contact and detail add-on and the AI summary add-on are off by default and are charged only when they actually return data.
- A spend cap is respected: once your configured maximum charge is reached, the actor stops emitting and charging further results.

### FAQ and troubleshooting

**Which sites does it cover?** immobiliare.it across all of Italy: sale and rent, every property type and region.

**How do I target a specific area or filters?** Apply your filters on immobiliare.it in a browser, copy the resulting search URL, and paste it into `startUrl`. Alternatively use `location` plus `operation` and the price and rooms filters.

**Do I get contact details?** Agency name, agency profile URL and phone are captured in the base result when shown. The contact and detail add-on additionally fetches each listing page for energy class, building year, condition, condominium expenses, the full feature list, the full image gallery and the full description.

**Can I scrape single listings?** Yes, pass one or more listing URLs in `listingUrls` and each is scraped with full detail.

**Why are some fields null?** Not every listing publishes every field (for example a new-build project may not list a floor or bathroom count). Missing values are returned as null rather than guessed.

**Do I need a proxy or login?** No. Proxies and anti-bot handling are managed internally. You never configure anything or provide cookies.

### More scrapers at scrapers.lat

Building lead lists or market intelligence across other portals and registries? Browse the full catalog of scrapers at [scrapers.lat](https://scrapers.lat) for more real estate, company and lead-generation actors.

# Actor input Schema

## `startUrl` (type: `string`):

An immobiliare.it search results URL to scrape (copy it from your browser after applying filters on immobiliare.it), for example https://www.immobiliare.it/vendita-case/roma/. All matching listings are collected, following pagination. This is the most precise way to target results.

## `location` (type: `string`):

Optional convenience alternative to Search URL: an Italian city or comune such as roma, milano, torino, napoli or firenze. Combined with Operation to build the search. Ignored when Search URL is set.

## `operation` (type: `string`):

Buy (vendita) or rent (affitto). Used with Location to build the search URL.

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

Only keep listings of this property type. Leave empty for all types.

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

Only keep listings priced at or above this amount in euros. Leave empty for no minimum.

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

Only keep listings priced at or below this amount in euros. Leave empty for no maximum.

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

Only keep listings with at least this many rooms (locali). Leave empty for no minimum.

## `listingUrls` (type: `array`):

Optional list of individual immobiliare.it listing URLs (https://www.immobiliare.it/annunci/<id>/) to scrape directly with full detail (features, geo, agency, phone, energy class, full description).

## `maxResults` (type: `integer`):

Maximum number of listings to collect across the whole run. Free Apify plans are capped at 10 per run.

## `contactDetails` (type: `boolean`):

Fetch each listing detail page to add the energy class, building year, condition, condominium expenses, full feature list, geo coordinates, agency contact and full description. Charged only when real detail is returned. Disabled on free plans.

## `aiListingSummary` (type: `boolean`):

Use AI to produce buyer-facing highlights, a condition assessment, the ideal target buyer and a price-per-m2 value assessment for each listing. Charged only when a usable summary is returned. Disabled on free plans.

## Actor input object example

```json
{
  "startUrl": "https://www.immobiliare.it/vendita-case/roma/",
  "operation": "vendita",
  "propertyType": "",
  "listingUrls": [],
  "maxResults": 10,
  "contactDetails": false,
  "aiListingSummary": false
}
```

# Actor output Schema

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

No description

# 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 = {
    "startUrl": "https://www.immobiliare.it/vendita-case/roma/",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/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 = {
    "startUrl": "https://www.immobiliare.it/vendita-case/roma/",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/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 '{
  "startUrl": "https://www.immobiliare.it/vendita-case/roma/",
  "maxResults": 10
}' |
apify call scrapers_lat/immobiliare-it-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/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/PRMZufaRFfvnrQaC0/builds/wtDlWn4NsddIhkaxy/openapi.json
