Casa.it Scraper — Italy Real Estate Listings
Pricing
from $1.16 / 1,000 casa.it scraper — italy real estate listings
Casa.it Scraper — Italy Real Estate Listings
Collect Casa.it property listings from search-result URLs. Get price, surface, rooms, energy class, geography, publisher, and media. Run with your Apify account; no Casa.it login or buyer API key. Free pricing: $0.0012 per dataset item.
Pricing
from $1.16 / 1,000 casa.it scraper — italy real estate listings
Rating
0.0
(0)
Developer
Vitalii Bondarev
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
5
Monthly active users
2 days ago
Last modified
Categories
Features
Share
Casa.it Real Estate Properties Scraper
Scrape Casa.it search-result URLs for Italian real-estate listings and return structured property, price, geo, publisher, and media data; each URL is limited to 50 pages. Run with your Apify account; no Casa.it login, API key, or cookies are required.
- Extract sale or rent listings with price, surface, rooms, energy class, availability, and property type.
- Compare inventory by district, block, city, province, region, and coordinates.
- Research listings and agencies using publisher, contact, title, description, and media fields.
- Export structured results for property-market analysis, monitoring, or downstream processing.
What you get
Each result is a Casa.it listing. Missing scalar values are null; list fields can be empty.
| Field family | Fields | Type | Description |
|---|---|---|---|
| Identity | id, partner_id, ref_publisher, uri, from_url | integer; string | Listing IDs, publisher reference, path, and source URL. |
| Classification | channel, category, property_type_group, property_type, idl_property_type, depth, is_project_profile, is_auction | string; integer; boolean | Channel, category, property classification, tier, project, and auction flags. |
| Listing content and state | description, highlight, labels, show_mortgage, propose_generic, show_mq_price, project_data, recent_ads_title, units | string; boolean; array of strings; nested object | Text, labels, display flags, and project or unit data. |
| Features | features.mq, features.rooms, features.bathrooms, features.parkings, features.parking_offer, features.price, features.energy_class, features.availability, features.level, features.rent_price | nested object | Size, rooms, bathrooms, parking, price, energy, availability, level, and rent price. |
| Geography | geo_infos.show_address, geo_infos.has_street, geo_infos.street, geo_infos.district_name, geo_infos.block_name, geo_infos.city, geo_infos.province, geo_infos.region, geo_infos.lat, geo_infos.lon, geo_infos.geo_visibility_level | nested object | Address, district/block rollup, hierarchy, coordinates, and visibility. |
| Title | title.main, title.additional | nested object | Main and additional title values. |
| Media | media.floorplan, media.has_video, media.has360, media.has3dtour, media.photos | nested object | Floorplan, video/tour flags, and photos. |
| Publisher | publisher.publisher_id, publisher.publisher_type, publisher.publisher_name, publisher.publisher_logo, publisher.publisher_address, publisher.publisher_phone, publisher.publisher_website, publisher.subscription_code | nested object | Agency or publisher identity and contact data. |
| Leads | leads_data.listing_id, leads_data.partner_id, leads_data.channel, leads_data.category | nested object | Listing and partner data used for leads. |
| Run metadata | scraped_at, parse_confidence, warnings | ISO 8601 string; number; array of strings | UTC scrape time, parser confidence, and warnings. |
Sample output
Shortened sample: one record is shown, and the media.photos array contains one complete item.
[{"id": 54845714, "partner_id": 36975504, "ref_publisher": "6/206", "channel": "vendita", "category": "casa", "property_type_group": "case", "property_type": "appartamento", "idl_property_type": 1, "is_project_profile": false, "project_data": null, "uri": "/immobili/54845714/", "depth": "platinum", "highlight": null, "labels": [], "is_auction": false,"description": "VISTA MARE E FASCINO D’EPOCA NEL CUORE DI STELLA POLARE Ci sono immobili che non si distinguono soltanto per ciò che offrono, ma soprattutto per il contesto in cui si trovano e per l’atmosfera che riescono a trasmettere. Questa elegante residenza in Via delle Isole Sanguinarie, nel cuore della ricercatissima Stella Polare, rappresenta perfettamente questo concetto: una casa...","show_mortgage": true, "propose_generic": true, "show_mq_price": false, "recent_ads_title": null, "from_url": "https://www.casa.it/vendita/residenziale/roma","features": {"mq": 92, "rooms": 3, "bathrooms": 2, "parkings": null, "parking_offer": {"available": false}, "price": {"value": "359.000", "min": "359.000", "max": "359.000", "show": true, "marker": {"price": "359", "unit": "k", "originalPrice": 359000, "hasPriceRange": false}, "mortgage": "1.039"}, "energy_class": null, "availability": "libero", "level": null, "rent_price": null},"geo_infos": {"show_address": true, "has_street": true, "street": "Via Isole Sanguinarie", "district_name": "Lido di Ostia, Ostia Antica, Castel Fusano", "block_name": "Ostia Levante", "city": "Roma", "province": "RM", "region": "Lazio", "lat": 41.726667, "lon": 12.289488, "geo_visibility_level": 2},"title": {"main": "Trilocale in Via Isole Sanguinarie", "additional": ["Ostia Levante"]},"media": {"floorplan": 30, "has_video": true, "has360": true, "has3dtour": false, "photos": [{"uri": "/listing/0/8e/39/f0/842503515.jpg", "alt": "Piscina", "hasFotoplano": false}]},"publisher": {"publisher_id": 478744, "publisher_type": "Agency", "publisher_name": "MARCO ROCCHI RES IMMOBILIARE", "publisher_logo": "logo/3658a3c341a5ebb6fd92e1b502d116d2", "publisher_address": {"street": "Via Diego Simonetti 78", "town": "Roma", "province": "RM", "state": "Lazio", "country": "IT", "postcode": "00122", "display": "Roma, Via Diego Simonetti 78"}, "publisher_phone": "0685870914", "publisher_website": "https://www.resimmobiliare.com/", "subscription_code": "AR-4_PK-529"},"units": null, "leads_data": {"listing_id": 54845714, "partner_id": 36975504, "channel": "buy", "category": "casa"}, "scraped_at": "2026-10-29T04:30:28Z", "parse_confidence": 1, "warnings": []}]
Pricing
You pay for one Actor Start event per run and one dataset-item event per result.
| Plan | Actor Start (per event) | Dataset item (per event) |
|---|---|---|
| Free | $0.00005 | $0.0012 |
On the Free plan, 1,000 results cost $1.20 plus one Actor Start event ($0.00005), or $1.20005 total. 10,000 results cost $12.00 plus one Actor Start event ($0.00005), or $12.00005 total on the Free plan. The Actor Start event is charged once per GB of run memory, with a minimum of one event; this example uses one event. Check your run memory in its options.
The Apify Free plan includes $5 of monthly platform usage credit; that credit covers 4,166 results with one Actor Start event. Compute, proxy traffic, and storage are not billed separately to you for this Actor.
How to use
- Add one or more full Casa.it search-result URLs for sale or rent listings.
- Set
max_items_per_urlto a maximum, or use0for no per-URL result limit; collection still stops at page 50. - Choose failure handling with
ignore_url_failures; the default skips failed URLs and continues. - Configure
proxyConfigurationwhen needed; if absent, the Actor uses ApifyRESIDENTIALproxy in Italy. - Run the Actor and inspect the dataset. If the first attempt shows no listings, it retries with browser-based fetching.
- Repeat runs through Apify Schedules; daily is a reasonable starting point for listing collection.
{"urls": ["https://www.casa.it/vendita/residenziale/roma"],"ignore_url_failures": true,"max_items_per_url": 50,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "IT"}}
Export the dataset as JSON or CSV, or read it through the Apify dataset API.
Input parameters
| Parameter | What it does | Default |
|---|---|---|
urls | Required array of full Casa.it search-result URLs; each is one listing search page. | No default; required |
ignore_url_failures | If true, a failed URL is skipped and the run continues. If false, processing stops at the first failed URL. | true |
max_items_per_url | Maximum listings per URL. 0 means no per-URL listing limit; collection still stops at page 50. | 50 |
proxyConfiguration | Apify proxy configuration for the fetch pipeline. If absent, the Actor uses an Apify RESIDENTIAL proxy in Italy. | If absent, an Apify RESIDENTIAL proxy configuration for Italy |
disableUsageStats | Set to true to turn off the run summary described in Usage statistics. | false |
Limits and edge cases
| Condition | What the buyer sees | What to do |
|---|---|---|
max_items_per_url is a positive integer | Collection stops at the requested listing count or page 50, whichever comes first. | Increase the value or use 0. |
max_items_per_url is 0 | Collection stops at page 50, with no per-URL listing limit before then. | Use narrower Casa.it filters or a positive limit. |
| A URL returns 404 | The Actor logs that the page is gone, returns no listings, continues, and does not list it in failedUrls, even when ignore_url_failures is false. | Correct the URL. |
| A page is blocked or cannot be fetched after all fetch modes | If it has no records, it is added to failedUrls. With true, it is skipped; with false, processing stops. The run ends as Succeeded, and earlier URL rows remain. OUTPUT contains totalItems, failedUrls, urls, and scrapedAt. | Correct the URL or enable failure ignoring for multi-URL runs. |
| A later page fails after earlier pages produced records | Earlier records remain; the failed page contributes none. The URL is not marked failed and OUTPUT does not flag the shortfall. | Retry or use a narrower search URL. |
| A search page returns no rows in any fetch mode | On page 1, the URL is counted as failed. On a later page, collected rows are kept and the URL ends. | Check the URL path, city, and filters, then try again. |
| Rows are collected for an input URL | Rows are pushed after the URL finishes, in batches of 100. A failure, timeout, or abort before then leaves no rows from that URL; earlier URLs remain. | Use a positive limit or several narrower URLs. |
| The same listing ID appears more than once during pagination | Duplicate IDs are skipped within one input URL. A listing found through different input URLs appears twice. | No action is required unless different filters are needed. |
| A source field is absent from a listing | The record uses null or an empty list where appropriate, with parse_confidence and warnings. | Check the nested field and warning metadata. |
urls is empty or missing | The Actor writes {"error":"urls_required"} to OUTPUT and the run ends as Succeeded. | Supply at least one non-empty Casa.it search-result URL. |
FAQ
How much does it cost to scrape Casa.it?
On the Free plan, an Actor Start event costs $0.00005 and each dataset item costs $0.0012. 1,000 results plus one Actor Start event cost $1.20005 on the Free plan.
Why did my run return no listings?
The URL may return 404, be blocked, or show no rows in all fetch modes. Check OUTPUT in the default key-value store for totalItems and failedUrls; an empty urls input writes {"error":"urls_required"}.
Is it legal to use data scraped from Casa.it?
The Actor collects public listing data from Casa.it search-result URLs. Casa.it’s source terms and applicable law depend on your use case, so review the relevant ToS and legal requirements before using the data; this Actor does not provide a legal determination.
Related actors
- Immoweb Scraper — related Belgium real-estate listings scraper, including prices and EPC.
- OnTheMarket Scraper — related UK property listings scraper with prices and days-listed data.
- Zoopla Scraper — related UK property listings scraper with prices and agent data.
Usage statistics
This Actor creates a small, content-free summary at the end of each run, used only to monitor reliability and improve this Actor. No input values, credentials or scraped data are sent.
A copy of the exact record for your run is saved as USAGE_STATS in your own Apify key-value store.
To opt out, set disableUsageStats to true in the input. Nothing is sent then.