# CasaDaPrivato Scraper - Italy Private-Seller Homes (`sian.agency/casadaprivato-property-scraper`) Actor

Scrape CasaDaPrivato.it, the Italian site where owners sell and let their homes without an agency. Homes for sale, rentals, holiday homes and rooms in 107 provinces, with price, m², rooms, street, GPS and photos.

- **URL**: https://apify.com/sian.agency/casadaprivato-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 1 total users, 1 monthly users, 98.5% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.32 / 1,000 property searches

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## CasaDaPrivato Scraper: Italian Homes from Private Sellers 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Immobiliare.it Scraper](https://img.shields.io/badge/Store-Immobiliare.it%20Scraper-1AE392)](https://apify.com/sian.agency/immobiliare-property-scraper?fpr=sian) [![Bakeca Scraper](https://img.shields.io/badge/Store-Bakeca%20Scraper-1AE392)](https://apify.com/sian.agency/bakeca-property-scraper?fpr=sian) [![Casa.it Scraper](https://img.shields.io/badge/Store-Casa.it%20Scraper-1AE392)](https://apify.com/sian.agency/casa-property-scraper?fpr=sian)

#### 🎉 Case da privati in all 107 Italian provinces: about 39,700 homes for sale and 23,000 rentals, each one posted by its owner

##### For agencies, investors, analysts and house hunters who want Italy's private-seller listings in a spreadsheet

***

### 🔎 What is the CasaDaPrivato Scraper — and when should you use it?

The **CasaDaPrivato Scraper** turns public CasaDaPrivato.it listings of homes that Italian owners sell or let themselves, from all 107 provinces, into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Italian homes for sale, homes for rent, holiday homes and rooms posted by private owners rather than agencies, as rows. Every search row carries the asking price in euros, floor area, rooms, bathrooms, property type, town, area, street and the main photo. Open each listing in full and you also get the owner's full text, every photo, GPS where the owner set it, energy class, floor, heating, parking, lease type, condo fees and the listing date.

**Use something else when:** you want agency listings from the big Italian portals rather than owner-only listings. Use [Immobiliare.it Scraper](https://apify.com/sian.agency/immobiliare-property-scraper?fpr=sian) for Immobiliare.it, mostly agency listings, with full detail. Use [Bakeca Scraper](https://apify.com/sian.agency/bakeca-property-scraper?fpr=sian) for Bakeca.it classifieds: rooms, rentals and homes from owners and agencies. This actor reads live CasaDaPrivato listings only. It returns no phone numbers or owner names, offers no price or size filter on the site's side, and does not return sold prices.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/casadaprivato-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want homes for sale and rent from private owners on CasaDaPrivato.it in Italy using the Apify Actor `sian.agency/casadaprivato-property-scraper`.

Use it when I need: Italian homes for sale, homes for rent, holiday homes and rooms posted by private owners rather than agencies, as rows. Every search row carries the asking price in euros, floor area, rooms, bathrooms, property type, town, area, street and the main photo. Open each listing in full and you also get the owner's full text, every photo, GPS where the owner set it, energy class, floor, heating, parking, lease type, condo fees and the listing date.

Don't use it when: you want agency listings from the big Italian portals rather than owner-only listings — use immobiliare-property-scraper or bakeca-property-scraper instead.

How to call it: set `province` to a province slug such as `milano`, `roma`, `torino` or `bologna`, optionally `town` (a town inside it, for example `Milano`), `category` to `sale`, `rent`, `holiday` or `rooms`, and optionally `propertyType` (for example `appartamenti`) and `sortBy` (`relevance`, `recent`, `priceLow`, `priceHigh`). `maxResults` sets how many listings come back. `includeDetails` opens each listing for the full text, every photo and GPS, for an extra charge per listing. `searchUrls` takes CasaDaPrivato results pages as [{"url": ...}] objects, which is how to search one area (zona) of a city. To expand listings you already have, set `operation` to `detail` and pass `listingUrls`.

Start with this input:
{
  "operation": "search",
  "province": "roma",
  "town": "Roma",
  "category": "sale",
  "propertyType": "appartamenti",
  "maxResults": 50,
  "includeDetails": false
}

Ask me which province or town to cover, and whether I want homes for sale, homes for rent, holiday homes or rooms, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *List flats for sale by private owners in Torino with price per m².*
- *Find homes for rent from private landlords in Milano listed most recently.*
- *Export holiday homes let by their owners in the province of Sassari.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/casadaprivato-property-scraper.md](https://apify.com/sian.agency/casadaprivato-property-scraper.md).

### 📋 Overview

**CasaDaPrivato.it is where Italian owners sell and let their homes without an agency.** This actor turns the site into rows: homes for sale, homes for rent, holiday homes and rooms, from all 107 Italian provinces.

**What you get:**

- ✅ **Private sellers**: the site is built for owners selling or letting their own home, and agencies cannot charge commission through it
- 🧭 **Homes the big portals mostly don't have**: matching photos, we found 8% of Bergamo and 10-12% of Padova sale listings on Subito's private section, and 0 of 38 in a 550-listing Immobiliare sample
- ⚡ **15 listings per results page**: price, floor area, rooms, bathrooms, town, area, street, highlights and the main photo on every search row
- 💰 **Pay per listing**: $1.50 per 1,000 listings on the Starter plan, and a listing is billed once per run
- 💎 **Full listing on demand**: one switch adds the description, every original photo, GPS, energy class, floor, heating, kitchen, parking, condo fees and dates
- ✨ **NEW**: search one district (zona) of a big city by pasting its results page

***

### ✨ Features

- 🏡 **Four sections**: homes for sale, homes for rent, holiday homes, and rooms and beds
- 📍 **107 provinces or one town**: read a whole province such as Milano or Roma, or narrow it to one comune
- 🏢 **12 property types**: flats, penthouses, detached houses, villas, farmhouses, lofts, buildings, new builds, garages, shops and offices, land and other residential
- ↕️ **Four sort orders**: most relevant, most recent first, cheapest first or most expensive first
- 📐 **Price per m²**: worked out on every sale listing that has both a price and a floor area
- 🖼️ **Original photos**: full-size images rather than the site's cropped thumbnails, when you open the full listing
- 🔗 **Paste any results page**: districts and other CasaDaPrivato searches work as input
- 🔁 **Fair billing**: each listing is charged once per run, and "similar listings nearby" filler cards are never returned or billed

***

### 🎬 Quick Start

Pick a province and a section, press Start, and the listings land in your dataset. A run with no input returns 50 homes for sale in the Milano province. Turn on the full listing when you need the description, every photo and GPS.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~casadaprivato-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"province": "roma", "category": "sale", "propertyType": "appartamenti", "maxResults": 50}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick where

Choose a province from the list. Type a town if you only want one, or paste a district's results page.

#### Step 2: Pick what

Choose the section (for sale, for rent, holiday homes or rooms), a property type if you like, and the order.

#### Step 3: Run and export

Set how many listings you want and press Start. Download the result as JSON, CSV or Excel.

**That's it! A few minutes at most, and you'll have:**

- Owner asking prices in euros, with floor area and price per m²
- Town, area and street for every listing
- A link to each listing, so you can contact the owner through CasaDaPrivato

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (default) reads results pages, `detail` opens listings you paste |
| `province` | string | No | Province slug, such as `milano` (default), `roma`, `torino`, `la_spezia` or `monza_brianza` |
| `town` | string | No | One town (comune) inside the province. Leave empty for the whole province |
| `category` | string | No | `sale` (default), `rent`, `holiday` or `rooms`. `rent` covers every rental, holiday homes and rooms included |
| `propertyType` | string | No | `all` (default) or one of 12 types, such as `appartamenti`, `case-indipendenti` or `terreni`. Ignored for holiday homes and rooms |
| `sortBy` | string | No | `relevance` (default), `recent`, `priceLow` or `priceHigh` |
| `maxResults` | integer | No | How many listings to return (default 50, up to 10,000). One results page holds 15 |
| `includeDetails` | boolean | No | Open each listing for the full record (billed per listing) |
| `searchUrls` | array | No | CasaDaPrivato results pages to read instead of the fields above |
| `listingUrls` | array | No | CasaDaPrivato listing pages for the `detail` operation |

**Example: flats for sale in Roma, newest first, with the full listing**

```json
{
  "province": "roma",
  "town": "Roma",
  "category": "sale",
  "propertyType": "appartamenti",
  "sortBy": "recent",
  "maxResults": 100,
  "includeDetails": true
}
```

**Example: rooms from private landlords in the Bologna province**

```json
{
  "province": "bologna",
  "category": "rooms",
  "maxResults": 200
}
```

**Example: paste a district's results page**

```json
{
  "searchUrls": [
    { "url": "https://www.casadaprivato.it/annunci-vendita/appartamenti/roma-zona-bravetta" }
  ],
  "maxResults": 100
}
```

**Example: open listings you already have**

```json
{
  "operation": "detail",
  "listingUrls": [
    { "url": "https://www.casadaprivato.it/appartamenti/grazioso-bilocale-in-corte-privata-bergamo-423133" }
  ]
}
```

CasaDaPrivato's price, size and room filters are not offered here. Collect the town or province, then filter the dataset by `price`, `sizeSqm` or `rooms`.

***

### 📤 Output

Results are saved to the Apify dataset with **53 fields**, including:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | CasaDaPrivato's listing ID, stable across runs |
| `listingUrl` | string | Link to the listing |
| `propertyTitle` / `headline` | string | The listing title, and the owner's own headline |
| `contract` | string | `sale` or `rent` |
| `propertyType` | string | Trilocale, Bilocale, Box/Garage/Posto auto and so on |
| `price` | number | Asking price in euros for sales, monthly rent for rentals. Empty for private-negotiation listings |
| `priceLabel` | string | The price exactly as the site shows it, such as "Trattativa Riservata" |
| `sizeSqm` / `pricePerSqm` | number | Floor area in m², and price divided by area |
| `rooms` / `bedrooms` / `bathrooms` | integer | Room counts as the owner listed them |
| `town` / `zone` / `address` / `province` | string | Town, area, street and province |
| `latitude` / `longitude` | number | GPS from the full listing, where the owner set it |
| `energyClass` / `heating` / `floor` / `parking` / `condition` | string | From the full listing |
| `leaseType` / `availableFrom` / `condoFees` | string | Rental terms and condo fees, from the full listing |
| `imageUrls` / `photoCount` | array / integer | Original photo links and how many there are |
| `descriptionText` | string | The owner's full description |
| `publishedDate` / `updatedDate` | string | Listed and updated dates (YYYY-MM-DD) |

**Example: a Roma flat for sale with the full listing opened** (long fields shortened)

```json
{
  "listingId": "423375",
  "listingUrl": "https://www.casadaprivato.it/appartamenti/trilocale-luminoso-con-2-balconi-e-veranda-roma-423375",
  "propertyTitle": "Trilocale in vendita a Roma, Zona Romanina, Via Paolo Ferrari 66",
  "headline": "Trilocale luminoso con 2 balconi e veranda",
  "contract": "sale",
  "section": "appartamenti",
  "propertyType": "Trilocale",
  "price": 175000,
  "currency": "EUR",
  "priceLabel": "€ 175.000,00",
  "sizeSqm": 90,
  "pricePerSqm": 1944,
  "rooms": 3,
  "bedrooms": 2,
  "bathrooms": 1,
  "town": "Roma",
  "zone": "Romanina",
  "address": "Via Paolo Ferrari 66",
  "province": "roma",
  "latitude": 42.01289,
  "longitude": 12.36803,
  "highlights": ["Climatizzazione", "Secondo piano", "Balcone", "Box"],
  "features": ["Balcone", "Semi-arredato"],
  "floor": "2 °",
  "totalFloors": "3",
  "kitchen": "Abitabile",
  "parking": "No",
  "condition": "Abitabile",
  "heating": "Autonomo",
  "airConditioning": "Si",
  "energyClass": "F",
  "thumbnail": "https://static.casadaprivato.it/images/properties/423375/2d3f7d97ad7c425b8fd8e31b3e3bfe46.jpg",
  "imageUrls": [
    "https://static.casadaprivato.it/images/properties/423375/2d3f7d97ad7c425b8fd8e31b3e3bfe46.jpg",
    "https://static.casadaprivato.it/images/properties/423375/42cde92a072246799b916c397c16f080.jpg"
  ],
  "photoCount": 8,
  "descriptionText": "Appartamento molto luminoso, situato in una zona tranquilla di Roma, con una piacevole vista e ambienti ben distribuiti. …",
  "updatedDate": "2026-10-04",
  "searchUrl": "https://www.casadaprivato.it/annunci-vendita/immobili/roma-roma",
  "searchPage": 1,
  "hasDetail": true,
  "status": "success"
}
```

**Example: a private-negotiation listing** (no price, the label is kept)

```json
{
  "listingId": "423311",
  "propertyTitle": "Appartamento in vendita a Roma, Zona Portuense, Via Torrita di Siena 26",
  "contract": "sale",
  "propertyType": "Appartamento",
  "currency": "EUR",
  "priceLabel": "Trattativa Riservata",
  "sizeSqm": 80,
  "rooms": 5,
  "bathrooms": 2,
  "town": "Roma",
  "zone": "Portuense",
  "yearBuilt": 1978,
  "energyClass": "A3",
  "publishedDate": "2026-10-01",
  "hasDetail": true,
  "status": "success"
}
```

Each run also writes a `report.html` summary to the run's key-value store, with your rows, anything that needs a fix and what you were charged.

***

### 💼 Use Cases & Examples

#### 1. Private-seller lead lists for agencies

**Estate agents find owners who are selling on their own.**

**Input:** `province` and `town`, `category` sale
**Output:** Homes for sale with street, price, floor area and a link to each listing
**Use:** A list of owners to approach through CasaDaPrivato's message form, town by town

#### 2. Homes the big portals mostly don't have

**Investors and analysts add a pool of homes they can't see on Immobiliare.**

**Input:** The same town you already track on Immobiliare or Subito
**Output:** Private listings that rarely show up there (8-12% overlap with Subito's private section in Bergamo and Padova, none found in an Immobiliare sample)
**Use:** Count the owner-listed homes your usual portal data misses

#### 3. Price checks without agency mark-ups

**Valuers and buyers compare owner asking prices across a city.**

**Input:** A province, or a district pasted into `searchUrls`
**Output:** Asking price, floor area and `pricePerSqm` on every row
**Use:** Price per m² before any commission, town by town or area by area inside big cities

#### 4. New listing alerts

**House hunters and investors catch new listings early.**

**Input:** One town with `sortBy` recent, on an Apify schedule
**Output:** Stable listing IDs with price and dates
**Use:** New listings and price changes show up as a daily diff

#### 5. Rentals and rooms from private landlords

**Students, relocation services and housing offices look for rentals without agency fees.**

**Input:** `category` rent or rooms in Roma, Milano, Bologna or Padova
**Output:** Monthly rent, floor area, town and area, plus lease type and availability with the full listing
**Use:** A shortlist of rooms and flats let directly by their owners

#### 6. Holiday homes let by owners

**Holiday-rental analysts look at owner-let homes in Sardinia, Puglia or Sicily.**

**Input:** `category` holiday in provinces such as `sassari`, `lecce` or `palermo`
**Output:** Beds, floor area, town and the price as posted
**Use:** A map of owner-let holiday homes by town, with beds and floor area. CasaDaPrivato shows no prices for holiday homes, so `price` stays empty there

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/casadaprivato-property-scraper').call({
  province: 'bergamo',
  town: 'Bergamo',
  category: 'sale',
  sortBy: 'recent',
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/casadaprivato-property-scraper').call(
    run_input={
        'province': 'padova',
        'category': 'rooms',
        'maxResults': 100,
        'includeDetails': True,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item.get('price'), item.get('zone'), item['listingUrl'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~casadaprivato-property-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "detail", "listingUrls": [{"url": "https://www.casadaprivato.it/appartamenti/grazioso-bilocale-in-corte-privata-bergamo-423133"}]}'
```

#### Automation Workflows (n8n / Zapier / Make)

1. **Trigger**: a daily schedule, or a webhook from your CRM
2. **HTTP Request**: call the actor's run endpoint with your province, town and section
3. **Process**: read the dataset items as JSON
4. **Action**: add new listings to Google Sheets, Airtable or your CRM, or send an alert when a price drops

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run, every field included
- No credit card required
- Good for checking a town or section before a bigger run

#### PAID Tier (Production Ready)

- Up to **10,000** listings per run (the "Properties to collect" limit)
- Pay per listing returned: $1.50 per 1,000 listings on the Starter plan, less on higher Apify plans
- The full listing is an optional extra at $3 per 1,000, charged only when you switch it on or use Property Detail
- A start fee of $0.005 per run on the Starter plan

💰 **Only listings you receive are charged.** A search that matches nothing costs nothing beyond the start fee, and so do "similar listings nearby" filler cards and listing pages that no longer exist. A listing is billed once per run.

🔗 [View current pricing](https://apify.com/sian.agency/casadaprivato-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Are these really private sellers?**
A: Almost always. CasaDaPrivato is built for owners, and its terms forbid anyone from asking for commission on a deal made through the site. Now and then an agent posts anyway; the listing text usually gives it away.

**Q: Do I get the owner's phone number or name?**
A: No. Owners are contacted through CasaDaPrivato's message form, and the actor does not collect personal details. For room ads that includes the advertiser's gender, age and job. Each row links to the listing so you can contact the owner there.

**Q: How many listings are there?**
A: On 2026-10-04 the site held about 39,700 homes for sale and 23,000 rentals, holiday homes and rooms included. That is fewer than the big agency portals, so a small town may have only a handful.

**Q: Can I search one district of a big city?**
A: Yes. Open the area (zona) on casadaprivato.it, for example Bravetta in Roma, and paste the results address into Search page URLs.

**Q: Can I filter by price, size or rooms?**
A: Not on the site's side. Collect the town or province and filter the dataset by `price`, `sizeSqm` or `rooms` afterwards.

**Q: Why is a price missing?**
A: Owners can choose a private-negotiation price (Trattativa Riservata). Those rows keep `price` empty and show the label in `priceLabel`. Holiday homes carry no price on CasaDaPrivato at all; owners quote by period on request.

**Q: How fresh is the data?**
A: Every run reads the live site. Nothing is cached between runs.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and HTML, straight from the Apify dataset.

***

### 🐛 Troubleshooting

**A town search returns nothing**

- Check the town is inside the province you picked, for example Sesto San Giovanni in `milano`
- Small towns may have no listings in that section. Try the whole province, or the For rent section, which covers every rental

**A pasted URL is skipped**

- Paste a results page, such as https://www.casadaprivato.it/annunci-vendita/appartamenti/roma-zona-bravetta , into Search page URLs
- Listing pages go into Listing URLs with the Property Detail mode, not into Search page URLs

**Fewer rows than "Properties to collect"**

- The search ran out of listings, or the FREE tier stopped at 25
- "Similar listings nearby" cards at the end of a short result are left out on purpose

**A listing has no GPS or photos**

- GPS appears only when the owner set a location, and only with the full listing switched on
- Some owners post no photos. `photoCount` is 0 on those rows

**A page failed to load**

- This is nearly always temporary. Run the same input again a few minutes later. You pay only for listings that reach your dataset

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

CasaDaPrivato is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by CasaDaPrivato or LaboWeb.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [actor's Issues tab](https://apify.com/sian.agency/casadaprivato-property-scraper/issues)
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/casadaprivato-property-scraper/changelog.md

# Actor input Schema

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

🔍 **Property Search** reads CasaDaPrivato results pages for the province, town and section below, 15 listings a page.

📄 **Property Detail** opens the listing addresses you paste in Listing URLs and returns the full record for each one.

## `province` (type: `string`):

The Italian province to search, out of all 107. With Town left empty the run reads the whole province: the capital and every town around it.

## `town` (type: `string`):

One town (comune) inside the province, for example Sesto San Giovanni or Monza in Milano. Leave it empty for the whole province. Accents and apostrophes are fine. If the town has no listings in this section right now, the run stops before any listing is billed and lists towns that do.

## `category` (type: `string`):

Which part of the site to read. For rent covers every rental, holiday homes and rooms included. Pick Holiday homes or Rooms and beds to read only those.

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

Narrows For sale or For rent to one kind of property. New builds are listed for sale only. Holiday homes and Rooms and beds ignore this field.

## `sortBy` (type: `string`):

The order the site lists results in. Pick Most recent first for regular checks on new listings. When sorting by price, listings whose price is negotiated privately (Trattativa riservata) come first.

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

How many listings to return. One results page holds 15, and you pay per listing returned, not per page. Free Apify plans stop at 25 listings a run.

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

Opens every listing found for the full description and every original photo. You also get GPS where the owner set it, energy class, floor, heating, kitchen, parking, condition, lease type, availability, condo fees, features, and the listed and updated dates. Each one is billed as one Property Detail on top of its search row. Owner names and phone numbers are never collected.

## `searchUrls` (type: `array`):

CasaDaPrivato results pages, one per line. Handy for a district (zona) the form does not offer, for example https://www.casadaprivato.it/annunci-vendita/appartamenti/roma-zona-bravetta . A sort order already in the address is kept.

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

CasaDaPrivato listing addresses, one per line, for example https://www.casadaprivato.it/appartamenti/grazioso-bilocale-in-corte-privata-bergamo-423133 . Each one returns the full record and is billed as one Property Detail.

## Actor input object example

```json
{
  "operation": "search",
  "province": "milano",
  "category": "sale",
  "propertyType": "all",
  "sortBy": "relevance",
  "maxResults": 50,
  "includeDetails": false
}
```

# Actor output Schema

## `casadaprivatoProperties` (type: `string`):

Every property this run returned, one row per listing, in the curated Overview.

## `scrapingSummary` (type: `string`):

Run summary: listings returned, any that failed and why, and what the run cost.

# 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 = {
    "operation": "search",
    "province": "milano",
    "category": "sale",
    "propertyType": "all",
    "sortBy": "relevance",
    "maxResults": 50,
    "includeDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/casadaprivato-property-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 = {
    "operation": "search",
    "province": "milano",
    "category": "sale",
    "propertyType": "all",
    "sortBy": "relevance",
    "maxResults": 50,
    "includeDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/casadaprivato-property-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 '{
  "operation": "search",
  "province": "milano",
  "category": "sale",
  "propertyType": "all",
  "sortBy": "relevance",
  "maxResults": 50,
  "includeDetails": false
}' |
apify call sian.agency/casadaprivato-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/casadaprivato-property-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/4NZPdSUjibpxgHZs7/builds/Y3ClET3fIFjvgBLdb/openapi.json
