# Immobiliare.it Scraper (`parsebird/immobiliare-it-scraper`) Actor

Scrape property listings from any Immobiliare.it search URL: price, surface, rooms, floor, features, location, coordinates, agency, and images. Export to JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/immobiliare-it-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 property 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/actors/running/actors-in-store.md#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

Immobiliare.it Scraper extracts structured property data from **[Immobiliare.it](https://www.immobiliare.it/)**, Italy's largest real estate portal. Paste any search results URL — sale or rent, any city, any filter — and get clean listing records with price, surface, rooms, location, coordinates, agency contacts, and image galleries.

<table><tr>
<td style="border-left:4px solid #E4002B;padding:12px 16px;font-weight:600">
Copy any Immobiliare.it search URL and collect every listing it shows — 40+ fields per property including price, m², rooms, floor, condition, features, macrozone, latitude/longitude, agency phone numbers, and full-size photos — ready for JSON, CSV, or Excel.
</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Actor: parsebird/immobiliare-it-scraper (Immobiliare.it Scraper on Apify).
Purpose: scrape property listings from an Immobiliare.it search results URL.
Call it with the Apify API / ApifyClient. Input JSON:
{
  "startUrl": "https://www.immobiliare.it/en/vendita-case/roma/",  // required: any public Immobiliare.it search URL (sale/rent, any city, any filter, any /en//de/ language prefix)
  "results_wanted": 100,   // max unique listings to save (0 = no limit); this is the billed row count
  "max_pages": 10          // max search pages to read (~25 listings/page; site cap 80 pages)
}
Output: one dataset item per listing with listing_id, listing_uuid, title, url, contract, property_type,
price, price_value, surface, rooms, bedrooms, bathrooms, floor, condition, heating, features, feature_labels,
address, city, macrozone, province, region, latitude, longitude, agency_id, agency_name, agency_url,
agency_phones, agent_name, image_url_medium, image_url_large, image_urls_large, images, is_new, is_luxury,
page, position_on_page, source_search_url, scraped_at.
Pricing: pay-per-result, $0.99 per 1,000 listings. API docs: https://apify.com/parsebird/immobiliare-it-scraper/api
```

### What does Immobiliare.it Scraper do?

The **Immobiliare.it Scraper** turns a normal Immobiliare.it search page into a dataset. Instead of maintaining region codes, contract types, and property-type IDs, you build the search visually on Immobiliare.it and hand the scraper the resulting URL.

- 🔗 **URL-driven** — works with any `immobiliare.it` search: `vendita` (sale) or `affitto` (rent), houses, apartments, villas, garages, offices, land, new developments.
- 🧭 **Keeps every filter** — price range, surface, rooms, bathrooms, floor, lift, garden, terrace, neighbourhood (macrozona/quartiere) and sort order are all preserved because they are already encoded in the URL.
- 🌍 **Any language** — `/en/`, `/de/`, `/fr/`, `/es/`, `/it/` URLs all work; text fields come back in the language of the URL.
- 📞 **Agency contacts** — agency name, profile URL, and phone numbers, plus the listing agent/supervisor name when published.
- 🖼️ **Full image galleries** — medium and large (`xxl`) image URLs for every photo, plus an image count.
- 📍 **Geodata** — latitude and longitude when Immobiliare.it publishes the map marker.
- 📄 **Export anywhere** — download as JSON, CSV, Excel, or XML, or pull results straight from the [Apify API](https://docs.apify.com/api/v2). Schedule recurring runs and connect to Make, Zapier, Google Sheets, and more through [Apify integrations](https://docs.apify.com/platform/integrations).

This actor is a maintained alternative to the Immobiliare.it search API for anyone who needs bulk, structured listing data for market analysis, lead generation, price monitoring, or research.

### What data can you extract from Immobiliare.it?

| Field | Description |
|-------|-------------|
| `listing_id` / `listing_uuid` | Immobiliare.it listing identifiers |
| `title` / `url` | Listing headline and direct listing URL |
| `contract` | `sale` or `rent` |
| `property_type` / `property_type_id` | Property typology (Apartment, Villa, ...) |
| `category` / `category_id` | Property category (Residential, New developments, ...) |
| `price` / `price_value` | Formatted asking price and numeric value |
| `surface` | Displayed surface area (m²) |
| `rooms` / `bedrooms` / `bathrooms` | Room counts |
| `floor` / `floor_number` | Floor label and numeric floor when available |
| `condition` / `heating` | Property condition and heating type |
| `features` / `feature_labels` | Raw feature keys and human-readable amenity labels |
| `address` / `city` / `macrozone` / `province` / `region` | Location breakdown |
| `latitude` / `longitude` | Map coordinates when published |
| `agency_id` / `agency_name` / `agency_url` / `agency_phones` | Agency details and phone numbers |
| `agent_name` | Listing agent or supervisor name |
| `image_url_medium` / `image_url_large` / `image_urls_large` / `images` | Cover image and full gallery URLs |
| `images_count` | Number of listing photos |
| `is_new` / `is_luxury` | Listing badges |
| `page` / `position_on_page` / `source_search_url` / `scraped_at` | Provenance metadata |

See the full [output schema and API reference](https://apify.com/parsebird/immobiliare-it-scraper/api) for every field.

### How to scrape Immobiliare.it

1. Open [Immobiliare.it](https://www.immobiliare.it/) and search for a city, then apply any filters you need (sale/rent, price, size, rooms, property type, neighbourhood).
2. Copy the full URL from your browser's address bar — for example `https://www.immobiliare.it/en/vendita-case/roma/`.
3. Paste it into the **Search URL** field of this actor.
4. Set **Max listings** (`results_wanted`) and **Max pages** (`max_pages`) to control how much data you collect.
5. Click **Start** and download the results as JSON, CSV, or Excel when the run finishes.

#### Input example

```json
{
  "startUrl": "https://www.immobiliare.it/en/affitto-case/milano/",
  "results_wanted": 75,
  "max_pages": 8
}
```

### Output example

```json
{
  "listing_id": 124223331,
  "listing_uuid": "c9bd2859-5eda-5b4b-a3bf-023ddbd6776c",
  "title": "3-room flat via San Michele 28, Centro Storico, Agrigento",
  "url": "https://www.immobiliare.it/en/annunci/124223331/",
  "contract": "sale",
  "property_type": "Apartment",
  "property_type_id": 14,
  "category": "Residential",
  "category_id": 1,
  "price": "€ 21,000",
  "price_value": 21000,
  "surface": "70 m²",
  "rooms": "3",
  "bedrooms": "2",
  "bathrooms": "2",
  "floor": "1st floor",
  "floor_number": 1,
  "condition": "Good / Habitable",
  "heating": "Independent",
  "feature_labels": ["Balcony", "Air conditioning"],
  "address": "Via San Michele 28",
  "city": "Agrigento",
  "macrozone": "Centro Storico",
  "province": "Agrigento",
  "region": "Sicilia",
  "latitude": 37.311,
  "longitude": 13.576,
  "agency_name": "Affiliato Tecnocasa: AGRIGENTO MEDIAZIONI D.I.",
  "agency_phones": ["+39 0922 000000"],
  "images_count": 10,
  "image_url_large": "https://pwm.im-cdn.it/image/1807380501/xxl.jpg",
  "image_urls_large": [
    "https://pwm.im-cdn.it/image/1807380501/xxl.jpg",
    "https://pwm.im-cdn.it/image/1807381115/xxl.jpg"
  ],
  "is_new": false,
  "is_luxury": false,
  "page": 1,
  "position_on_page": 1,
  "source_search_url": "https://www.immobiliare.it/en/vendita-case/agrigento/",
  "scraped_at": "2026-08-13T08:12:00.000Z"
}
```

Download results in JSON, CSV, Excel, or XML from the **Storage** tab or the Apify API.

### Use cases

- **Real estate market analysis** — track asking prices, price per m², and inventory by city or neighbourhood.
- **Lead generation** — build lists of agencies and their phone numbers for a target area.
- **Price monitoring** — schedule daily or weekly runs and detect new listings and price changes.
- **Investment research** — compare rental and sale markets across Italian cities.
- **Data enrichment** — feed structured listing data into CRMs, dashboards, or valuation models.

### How it works

1. The actor loads the search results page for your `startUrl` and reads the embedded search state (the resolved location and filter parameters plus the first page of results).
2. It paginates through Immobiliare.it's listing endpoint, page by page, until it reaches `results_wanted`, `max_pages`, or the last available page.
3. Each listing is normalised into a flat record and pushed to the dataset. Duplicate listing IDs are skipped.
4. Immobiliare.it is protected by anti-bot software, so requests are sent through Apify Proxy (Residential, country Italy is recommended) with automatic session rotation and retries.

### Pricing

This actor uses the **pay-per-result** pricing model.

| Event | Price per 1,000 |
|-------|-----------------|
| Listing scraped | **$0.99** |

You are billed once per unique listing saved to the dataset. Scraping 1,000 listings costs about **$0.99** plus Apify platform and proxy usage. Set `results_wanted` to cap your spend on any single run. New Apify accounts include monthly free platform credits you can use to try the actor.

### FAQ

**What URLs can I use?**
Any public Immobiliare.it search results page — for example `https://www.immobiliare.it/en/vendita-case/roma/`, `https://www.immobiliare.it/affitto-case/milano/`, or a filtered URL like `https://www.immobiliare.it/vendita-case/torino/con-ascensore/`. Individual listing pages and agency pages are not supported as input.

**Do the filters in my URL still apply?**
Yes. City, contract type, property type, price, surface, rooms, floor, amenities, neighbourhood, and sort order are all encoded in the URL and are respected by the scraper.

**How many listings can I get from one search?**
Immobiliare.it serves at most about 80 pages (~2,000 listings) per search. For larger coverage, split your search into narrower URLs (by neighbourhood, price band, or property type) and run the actor once per URL.

**How fresh is the data?**
Every run fetches live data from Immobiliare.it. Use [Apify Scheduler](https://docs.apify.com/platform/schedule) to run the actor on a recurring basis and monitor a market over time.

**Why do I need Residential proxies?**
Immobiliare.it blocks datacenter traffic. Residential proxies with country set to Italy give the most reliable results. This is the default proxy configuration.

**Can I call this actor from my own code?**
Yes. Use the [Apify API](https://apify.com/parsebird/immobiliare-it-scraper/api) or the official clients:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/immobiliare-it-scraper").call(run_input={
    "startUrl": "https://www.immobiliare.it/en/vendita-case/roma/",
    "results_wanted": 100,
    "max_pages": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["price"], item["url"])
```

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/immobiliare-it-scraper').call({
    startUrl: 'https://www.immobiliare.it/en/vendita-case/roma/',
    results_wanted: 100,
    max_pages: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Something looks wrong — how do I report it?**
Open an issue on the actor's **Issues** tab. Feedback and feature requests are welcome.

### Other real estate scrapers

- [Subito.it Scraper](https://apify.com/parsebird/subito-it-scraper) — Italy's largest classifieds portal
- [Idealista Scraper](https://apify.com/parsebird/idealista-scraper) — property listings across Spain, Italy, and Portugal
- [Fotocasa Scraper](https://apify.com/parsebird/fotocasa-scraper) — Spanish real estate marketplace
- Browse the full [ParseBird actor catalogue](https://apify.com/parsebird) for more scrapers.

### Is it legal to scrape Immobiliare.it?

Scraping publicly available data is legal in most jurisdictions, including the EU and the US, when it does not involve logging in, bypassing access controls, or collecting personal data without a lawful basis. This actor only accesses pages that any visitor can see without an account and does not collect private personal information. You are responsible for how you use the data, including compliance with the [GDPR](https://gdpr.eu/), Immobiliare.it's terms of service, and applicable local laws. When in doubt, consult a lawyer. See Apify's guide to the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for more context.

# Actor input Schema

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

Public Immobiliare.it search results URL to collect listings from. Any language prefix (/en/, /de/, /fr/ ...) and any on-site filter is preserved.

## `results_wanted` (type: `integer`):

Maximum number of unique listings to save. This is the number of billed results. Use 0 for no limit.

## `max_pages` (type: `integer`):

Maximum number of search result pages to process (about 25 listings per page). Immobiliare.it serves at most 80 pages per search.

## `requestDelay` (type: `integer`):

Delay between requests, in milliseconds.

## `maxRetries` (type: `integer`):

Retries per request when Immobiliare.it blocks or errors. Each retry rotates to a new proxy IP.

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

Immobiliare.it is protected by anti-bot software. Residential proxies with country Italy are strongly recommended.

## Actor input object example

```json
{
  "startUrl": "https://www.immobiliare.it/en/vendita-case/agrigento/",
  "results_wanted": 20,
  "max_pages": 5,
  "requestDelay": 1200,
  "maxRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IT"
  }
}
```

# Actor output Schema

## `dataset` (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/en/vendita-case/agrigento/",
    "results_wanted": 20,
    "max_pages": 5,
    "requestDelay": 1200,
    "maxRetries": 8,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/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/en/vendita-case/agrigento/",
    "results_wanted": 20,
    "max_pages": 5,
    "requestDelay": 1200,
    "maxRetries": 8,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/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/en/vendita-case/agrigento/",
  "results_wanted": 20,
  "max_pages": 5,
  "requestDelay": 1200,
  "maxRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IT"
  }
}' |
apify call parsebird/immobiliare-it-scraper --silent --output-dataset

```

## MCP server setup

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