# Casa.it Property Scraper (`shahidirfan/casa-it-property-scraper`) Actor

Extract property listings from Casa.it with prices, locations, property types, bedrooms, bathrooms, sizes, descriptions, images, features, and listing URLs. Ideal for Italian real estate data, property market research, price tracking, investment analysis, and lead generation.

- **URL**: https://apify.com/shahidirfan/casa-it-property-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 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/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

### What does Casa.it Property Scraper do?

Casa.it Property Scraper collects public residential property listings from [Casa.it](https://www.casa.it/) and saves them as structured records. Enter a Casa.it sale or rental search URL, or provide a location such as `napoli`, and receive listing details including prices, property features, locations, images, and publisher information.

The Actor is useful for Italian real estate market research, property price monitoring, investment analysis, agency research, lead generation, and scheduled inventory tracking. Results are saved to an Apify dataset and can be downloaded or connected to other services.

### Why use Casa.it Property Scraper?

- **Market research** - Build datasets of properties for sale or rent across Italian cities and neighborhoods.
- **Price monitoring** - Re-run the same search URL to compare prices, inventory, and listing changes over time.
- **Property analysis** - Compare price, surface area, rooms, bathrooms, energy class, floor, and location data.
- **Agency research** - Collect publisher names, phone numbers, websites, profile URLs, and verification indicators when Casa.it provides them.
- **Location analysis** - Use city, province, region, district, street, and coordinates in mapping or market reports.
- **Flexible collection** - Set a result limit, page limit, optional keyword, and proxy configuration from the Apify input form.
- **Automation-ready data** - Export the dataset as JSON, CSV, Excel, XML, or use it through the Apify API.

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

| Field                   | Type             | Description                                       |
| ----------------------- | ---------------- | ------------------------------------------------- |
| `listing_id`            | Number or String | Casa.it listing identifier.                       |
| `title`                 | String           | Main property listing title.                      |
| `subtitle`              | String           | Additional title or property summary text.        |
| `description`           | String           | Description published with the listing.           |
| `url`                   | String           | Direct Casa.it property URL.                      |
| `source_url`            | String           | Search page used for collection.                  |
| `transaction_type`      | String           | Sale or rental channel when available.            |
| `category`              | String           | Listing category.                                 |
| `property_type`         | String           | Property type such as apartment, villa, or house. |
| `price`                 | Number or String | Published price or price label.                   |
| `price_min`             | Number           | Minimum price for a price range.                  |
| `price_max`             | Number           | Maximum price for a price range.                  |
| `price_currency`        | String           | Currency code when available.                     |
| `surface_m2`            | Number           | Property surface area in square metres.           |
| `rooms`                 | Number           | Number of rooms.                                  |
| `bathrooms`             | Number           | Number of bathrooms.                              |
| `parking_spaces`        | Number           | Number of parking spaces.                         |
| `energy_class`          | String           | Energy efficiency class.                          |
| `availability`          | String           | Availability information.                         |
| `floor`                 | String           | Floor or level information.                       |
| `condition`             | String           | Property condition.                               |
| `heating`               | String           | Heating information.                              |
| `publisher_name`        | String           | Agency, broker, or publisher name.                |
| `publisher_phone`       | String           | Publisher phone number when published.            |
| `publisher_website`     | String           | Publisher website.                                |
| `publisher_url`         | String           | Publisher profile URL.                            |
| `publisher_is_verified` | Boolean          | Whether the publisher is marked as verified.      |
| `street`                | String           | Street or address information when shown.         |
| `district`              | String           | District or neighborhood.                         |
| `city`                  | String           | City.                                             |
| `province`              | String           | Province abbreviation or name.                    |
| `region`                | String           | Italian region.                                   |
| `latitude`              | Number           | Latitude coordinate when available.               |
| `longitude`             | Number           | Longitude coordinate when available.              |
| `image_url`             | String           | Main property image URL.                          |
| `images`                | Array            | Available property image URLs.                    |
| `image_count`           | Number           | Number of available images.                       |
| `has_video`             | Boolean          | Whether a video is available.                     |
| `has_360`               | Boolean          | Whether a 360-degree view is available.           |
| `has_3d_tour`           | Boolean          | Whether a 3D tour is available.                   |
| `floorplan_count`       | Number           | Number of floorplan images.                       |

Only fields with useful values are included. Some records contain more fields than others because listing publishers do not always provide the same information.

### How to use Casa.it Property Scraper

1. Open the Actor in Apify Console.
2. Enter a Casa.it search URL, or enter a location if you do not have a URL.
3. Choose the maximum number of listings and search pages.
4. Add a keyword if you want to keep matching titles, descriptions, areas, or publisher details.
5. Enable Apify Residential Proxy for longer or recurring collections when needed.
6. Run the Actor and review the dataset preview.
7. Download the results or connect the dataset to your workflow.

### Input Parameters

| Parameter            | Type    | Required | Default                    | Description                                                                                                  |
| -------------------- | ------- | -------- | -------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `url`                | String  | No       | Casa.it Naples sale search | Casa.it sale or rental search URL. This takes priority over `location`.                                      |
| `keyword`            | String  | No       | Empty                      | Optional text filter applied to the title, description, property type, publisher, street, district, or city. |
| `location`           | String  | No       | `napoli`                   | City or location slug used when `url` is not supplied.                                                       |
| `results_wanted`     | Integer | No       | `20`                       | Maximum number of listings to save.                                                                          |
| `max_pages`          | Integer | No       | `1`                        | Maximum number of search result pages to process.                                                            |
| `proxyConfiguration` | Object  | No       | Apify Residential Proxy    | Proxy settings for stable collection.                                                                        |

The default proxy configuration is:

```json
{
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
}
```

### Usage Examples

#### Basic Naples sale search

Collect up to 20 listings from a Casa.it sale search:

```json
{
    "url": "https://www.casa.it/vendita/residenziale/napoli/",
    "results_wanted": 20,
    "max_pages": 1
}
```

#### Search by location

Provide a location instead of a full search URL:

```json
{
    "location": "roma",
    "results_wanted": 50,
    "max_pages": 3
}
```

#### Filter for a property type or feature

Keep listings whose available text contains `bilocale` or another keyword:

```json
{
    "url": "https://www.casa.it/vendita/residenziale/milano/",
    "keyword": "bilocale",
    "results_wanted": 100,
    "max_pages": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Sample Output

Each dataset item represents one property listing. A typical record may look like this:

```json
{
    "listing_id": 53536821,
    "title": "Bilocale in Viale Cavalleggeri d'Aosta",
    "description": "Appartamento ristrutturato in zona residenziale.",
    "url": "https://www.casa.it/immobili/53536821/",
    "source_url": "https://www.casa.it/vendita/residenziale/napoli/",
    "transaction_type": "vendita",
    "property_type": "appartamento",
    "price": 250000,
    "price_currency": "EUR",
    "surface_m2": 85,
    "rooms": 2,
    "bathrooms": 1,
    "energy_class": "A2",
    "floor": "1",
    "condition": "ristrutturato",
    "publisher_name": "Studio Immobiliare Napoli",
    "publisher_phone": "+39 081 123 4567",
    "city": "Napoli",
    "province": "NA",
    "region": "Campania",
    "latitude": 40.8518,
    "longitude": 14.2682,
    "image_url": "https://images-1.casa.it/800x600/listing/example.jpg",
    "image_count": 8,
    "has_video": false,
    "has_360": true
}
```

### Tips for best results

- Use a complete Casa.it search URL when you need specific sale, rental, property type, or location filters.
- Start with `results_wanted` between 10 and 20 to confirm the input and review the dataset.
- Use `max_pages` to control collection size and avoid processing more pages than needed.
- Use a focused keyword such as `bilocale`, `ristrutturato`, or `vista mare` for text-based filtering.
- Residential Proxy is recommended for large, frequent, or scheduled runs.
- Check the dataset preview before scheduling recurring collections.
- Missing values usually mean that the publisher did not provide that field on Casa.it.

### Integrations and exports

Apify datasets can be used with:

- **Google Sheets** - Review prices, locations, and listing changes in a spreadsheet.
- **Airtable** - Build a searchable property inventory or agency database.
- **Webhooks** - Send completed run notifications to another service.
- **Make or Zapier** - Trigger downstream workflows from new datasets.
- **Apify API** - Retrieve runs and dataset records from your own application.

Supported dataset exports include JSON, CSV, Excel, XML, and other Apify formats.

### Frequently Asked Questions

#### Can I collect both sale and rental properties?

Yes. Provide the Casa.it search URL for the sale or rental category you want to collect.

#### Can I search multiple cities?

Run the Actor separately for each city URL, or schedule separate runs for each market you want to monitor.

#### Does the keyword replace Casa.it filters?

No. Casa.it URL filters define the main result set, while `keyword` keeps matching records from that result set.

#### Why are some fields empty?

Some Casa.it listings do not publish every property, location, image, or publisher field. The Actor keeps available values and omits empty ones.

#### Can I schedule recurring collections?

Yes. Create an Apify schedule to run the Actor hourly, daily, weekly, or on a custom timetable.

#### Can I export results to CSV or Excel?

Yes. Open the completed run dataset in Apify and choose JSON, CSV, Excel, XML, or another available export format.

#### Is this Actor suitable for non-technical users?

Yes. The Actor can be configured from the Apify Console input form, and the completed dataset can be downloaded without writing code.

#### Is collecting Casa.it data legal?

You are responsible for complying with Casa.it terms, applicable laws, privacy requirements, and any restrictions that apply to your intended use. Collect and use public data responsibly.

### Related Actors

- [Onthemarket Property Scraper](https://apify.com/shahidirfan/onthemarket-property-scraper) - Collect UK property listings for sale and rent.
- [Propertyfinder Scraper](https://apify.com/shahidirfan/propertyfinder-scraper) - Collect UAE property listings, prices, features, and agent details.
- [iProperty Scraper](https://apify.com/shahidirfan/iproperty-scraper) - Collect Malaysian property listings and market data.
- [Fotocasa Property Scraper](https://apify.com/shahidirfan/fotocasa-property-scraper) - Collect property listings from Spain.

### Support

For issues or feature requests, use the Issues tab on the Actor page or contact the developer through Apify.

### Legal Notice

This Actor is intended for legitimate research, monitoring, and data collection workflows involving publicly available property information. Users are responsible for complying with Casa.it terms of use, applicable laws, privacy rules, and any limits on data reuse.

# Actor input Schema

## `url` (type: `string`):

Casa.it search URL to scrape, such as a sale or rent results page.

## `keyword` (type: `string`):

Optional keyword used to keep matching listings from the collected results.

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

Location used when no URL is provided.

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

Maximum number of property listings to save.

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

Maximum number of search result pages to process.

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

Residential proxies are recommended for stable Casa.it collection.

## Actor input object example

```json
{
  "url": "https://www.casa.it/vendita/residenziale/napoli/",
  "location": "napoli",
  "results_wanted": 20,
  "max_pages": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "url": "https://www.casa.it/vendita/residenziale/napoli/",
    "location": "napoli",
    "results_wanted": 20,
    "max_pages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/casa-it-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 = {
    "url": "https://www.casa.it/vendita/residenziale/napoli/",
    "location": "napoli",
    "results_wanted": 20,
    "max_pages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/casa-it-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 '{
  "url": "https://www.casa.it/vendita/residenziale/napoli/",
  "location": "napoli",
  "results_wanted": 20,
  "max_pages": 1
}' |
apify call shahidirfan/casa-it-property-scraper --silent --output-dataset

```

## MCP server setup

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