Immobiliare.it Scraper - Italy Property Listings
Pricing
from $2.20 / 1,000 results
Immobiliare.it Scraper - Italy Property Listings
Collect Italian sale and rental listings, project units and agency profiles from Immobiliare.it. Export prices, locations and published contacts. Pay per delivered row plus a start fee.
Pricing
from $2.20 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
1
Bookmarked
5
Total users
1
Monthly active users
6 hours ago
Last modified
Categories
Security
Limited permissionsShare
Immobiliare.it Scraper
Extract Italian property listings and agency profiles from Immobiliare.it as structured rows you can export.
- Asking prices, size, rooms, energy details and property locations.
- Homes, commercial property, land, rooms and new developments.
- Agency contacts and image links where published.
- Optional separate rows for units within a development.
- $3 per 1,000 delivered rows on the Free plan, plus a small start fee.
What does Immobiliare.it Scraper do?
The Actor collects sale and rental listings from Immobiliare.it in Italy. Search by city and category, or provide search, listing or agency profile URLs. Use the rows to compare asking prices, monitor inventory or populate a property database.
- City search: fill
location, with optionalchanneland property categories. - URL collection: fill
startUrls; search URLs carry their own location, category and transaction type. - Agency profiles: a direct profile URL produces an
agencyrow, not its inventory. - Detail enrichment:
scrapeDetailsadds available property and agency details; off by default. - Project units:
includeUnitsaddsunitrows linked to their parent listing; off by default. Each unit row is billed like any other row.
What data can you extract from Immobiliare.it?
Fields depend on the source page. An empty value is not a zero price, zero rooms or proof that an amenity is absent.
Listing rows
| Field | Description | Example |
|---|---|---|
rowType | Entity represented by the row | listing |
id | Listing identifier | 123456789 |
url | Listing link | https://www.immobiliare.it/annunci/123456789/ |
title | Advert headline | Example apartment in Milano |
channel | Sale or rental | RENT |
category | Property category | case |
typology | Source property classification | Appartamento |
priceAmount | Numeric asking price | 1050 |
priceFormatted | Price with source formatting | € 1.050/mese |
pricePerSquareMeter | Published price per square metre | 3500 |
priceOnRequest | Price available only on request | true |
surface | Published floor area | 70 |
rooms | Room count | 2 |
bathrooms | Bathroom count | 1 |
energyClass | Published energy rating | A |
heating | Heating description | Autonomo |
deposit | Rental deposit when available | 2100 |
condominiumExpenses | Published shared-building costs | 100 |
city | Listing city | Milano |
address | Structured property address | {"street":"Example Street","country":"IT"} |
geo | Published coordinates | {"lat":45.46,"lng":9.19} |
agency | Agency identification and contact details | {"name":"Example Agency"} |
phones | Published numbers with type and normalized form | [{"value":"+1 555 0100","type":"tel1"}] |
images | Available image links | [] |
scrapedAt | Collection timestamp | 2026-10-24T08:00:00Z |
Unit rows
These appear only with includeUnits=true and available project properties. Listing and unit rows share the input's row limit.
| Field | Description | Example |
|---|---|---|
rowType | Project unit | unit |
id | Unit identifier | 123456789:0 |
listingId | Parent listing identifier | 123456789 |
listingTitle | Parent headline | Example development |
listingUrl | Parent link | https://www.immobiliare.it/annunci/123456789/ |
title | Unit title or parent title | Example two-room unit |
priceAmount | Unit asking price | 250000 |
surface | Unit area | 60 |
rooms | Unit rooms | 2 |
city | Location inherited from the parent | Milano |
The parent can also contain propertiesCount, priceMin, priceMax, surfaceMin and surfaceMax.
Agency rows
A profile URL returns the agency itself. Agency inventory searches instead return listing rows.
| Field | Description | Example |
|---|---|---|
rowType | Agency entity | agency |
id | Agency identifier | 51157 |
url | Agency profile link | https://www.immobiliare.it/agenzie-immobiliari/51157/ |
title | Agency display name | Example Agency |
phones | Published agency numbers | [{"value":"+1 555 0100","type":"tel1"}] |
address | Agency address | {"street":"Example Street"} |
person | Named agent when available | {"name":"Jane Doe","role":"agent"} |
org | Agency name and ID | {"name":"Example Agency","id":"51157"} |
web | Agency website and social-link list | {"website":"https://example.com","socials":[]} |
leadAbsences | Reasons contact fields are missing | {} |
How to scrape Immobiliare.it
- Open Immobiliare.it Scraper in Apify Console.
- Enter
locationor paste links intostartUrls. - Keep
maxItemsat 3 for a small first run. - Click Start and inspect the dataset when the run finishes.
- Download the rows or read them through the API.
Empty input starts an example search for rentals in firenze, capped at 3 rows. Example rows are billed normally. There is no separate mode field: filling a target selects the corresponding collection path automatically, with startUrls taking priority over location.
Search by city
Use an Italian city slug such as milano, roma or firenze. Choose BUY for sale or RENT for rental. A nonempty propertyTypes overrides propertyType.
Categories include case, appartamenti, attici, case-indipendenti, loft, rustici, ville, villette, uffici, negozi, garage, palazzi, attivita, magazzini, capannoni, stanze, terreni and nuove-costruzioni. garage-posti-auto is an alias for garage. all selects primary categories, excluding residential subtypes. Rooms are rental-only; new developments are sale-only.
Collect from URLs
Use search links such as https://www.immobiliare.it/affitto-case/milano/, listing links under /annunci/{id}/, or agency profiles under /agenzie-immobiliari/{id}/. Search links override the city, channel and category fields. A listing URL selects that listing; an agency profile selects the agency, not every property it advertises.
What to fill in
| Field | What to enter | Default |
|---|---|---|
startUrls | Search, listing or agency profile links; strings or objects with url | Empty |
location | Italian city slug when no URL is supplied | Example prefill: firenze |
channel | BUY or RENT | RENT |
propertyType | One category or all | case |
propertyTypes | Category list overriding the single selection | [] |
maxItems | Maximum rows per URL or category, 1–500 | 70 (Store prefill: 3) |
maxPages | Ignored; pagination follows maxItems | 1 |
scrapeDetails | Add available detail-page information | false |
includeUnits | Add separately billed project units | false |
allowEmptyResults | Allow a successful run with no matching rows | true |
requestDelayMillis | Delay between requests, in milliseconds | 2000 |
provider | Keep auto; wsapp supports the optional selectors below for case searches | auto |
wsappEnum | With provider=wsapp: list for search, markers for map-based selection, latest for newest listings, agency for agency inventory | list |
agencyId | Numeric agency ID for wsappEnum=agency | Empty |
City search:
{"location": "milano","channel": "BUY","propertyTypes": ["uffici", "negozi"],"maxItems": 3}
Search URL:
{"startUrls": [{"url": "https://www.immobiliare.it/affitto-case/milano/"}],"maxItems": 3}
Listing detail; replace the illustrative listing ID with your target:
{"startUrls": ["https://www.immobiliare.it/annunci/123456789/"],"scrapeDetails": true,"maxItems": 1}
Agency profile; replace the ID with the agency you want:
{"startUrls": ["https://www.immobiliare.it/agenzie-immobiliari/51157/"],"maxItems": 1}
Optional agency inventory selection, returning listings rather than an agency row:
{"location": "milano","provider": "wsapp","wsappEnum": "agency","agencyId": "51157","maxItems": 3}
maxResultsandlimitare aliases ofmaxItems.- Close field-name misspellings can be corrected; other unknown fields are ignored with a note. Unsupported category filters are dropped rather than treated as fatal errors.
- Invalid targets stop before rows are charged, with a message such as
INVALID_INPUT: startUrls — use Immobiliare.it search or listing page links. The start event can still apply. - The Actor writes its input interpretation to
INPUT_REPORTin the default key-value store, including corrections, ignored fields and example-run status.
Output example
Illustrative listing row; personal details are placeholders:
{"rowType": "listing","id": "123456789","url": "https://www.immobiliare.it/annunci/123456789/","source": "immobiliare","title": "Example two-room apartment in Milano","channel": "RENT","category": "case","priceAmount": 1050,"priceFormatted": "€ 1.050/mese","rooms": 2,"surface": 70,"energyClass": "A","city": "Milano","agency": {"name": "Example Agency", "phones": ["+1 555 0100"]},"scrapedAt": "2026-10-24T08:00:00Z"}
Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. Nested fields are easiest to preserve in JSON. RUN_SUMMARY records counts and warnings; ERROR_SUMMARY, when written, describes a failure.
Why use this Immobiliare.it scraper?
- Row-based billing: result charges apply to rows delivered to the dataset, plus the start event.
- Several inputs: collect multiple URLs or categories in one run, with a separate limit for each.
- Useful comparisons: keep listing IDs and collection timestamps when comparing later runs.
- Visible gaps: unpublished fields remain empty instead of being invented.
- Partial delivery: rows already written to the dataset remain available after a stop. Rows not yet delivered are not guaranteed after a manual abort or hard timeout.
- No proxy setup: you do not need to set up proxies.
How much does it cost to scrape Immobiliare.it?
The Actor uses pay-per-event pricing. The start event costs $0.005 per GB of run memory, with at least one event. At the default 1024 MB, the start charge is $0.005. Platform usage is included in these prices.
| Apify plan | Start at 1024 MB | Price per row | Price per 1,000 rows |
|---|---|---|---|
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
maxItems applies to each URL or selected category: default 70, maximum 500. Larger requests are collected in parts. Listing, unit and agency rows all count toward the limits. Availability and duplicate removal can reduce the rows delivered.
Free Apify plan users are limited to 200 rows per run and 10 runs of this Actor. These are publisher-set limits. The whole run is also limited by Maximum cost per run (maxTotalChargeUsd in the API).
Example: two categories delivering 3 rows each produce 6 billed rows. On the Free plan at 1024 MB, the price is 6 × $0.003 + $0.005 = $0.023.
What happens when the run timeout is too short
When collection cannot finish within the chosen timeout, automatic resume can pause the run. It shows ABORTED with the message “Queued on the collection backend; this run will resume automatically when results are ready (about N s).” This message distinguishes a scheduled pause from a manual abort.
When results are ready, the same run resumes and delivers to the same dataset. The delivery message is “Resumed: delivering N rows.” After successful delivery, the run finishes SUCCEEDED. Already delivered rows are skipped rather than delivered or charged twice.
This pause/resume process is limited to 3 attempts per run. Keep the default timeout of 3600 seconds to reduce interruptions. It does not guarantee recovery from every failure or a manually aborted run.
The synchronous endpoints run-sync and run-sync-get-dataset-items wait at most 300 seconds and can return an empty dataset during a pause. For longer searches, start asynchronously and read the dataset after SUCCEEDED, or use an ACTOR.RUN.SUCCEEDED webhook.
Use with AI agents and the API
Apify MCP server
Add this remote server in Claude, ChatGPT, Cursor or VS Code:
https://mcp.apify.com?tools=lentic_clockss/immobiliare-property-scraper
Sign in through Apify OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; read the rows with get-dataset-items.
Clients without remote MCP support can use npx @apify/actors-mcp-server --tools lentic_clockss/immobiliare-property-scraper with APIFY_TOKEN configured. Example prompt: “Get three rental listings in Milano and show their asking prices, areas and links.”
Apify API
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("lentic_clockss/immobiliare-property-scraper").call(run_input={"location": "milano", "channel": "RENT", "maxItems": 3})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('lentic_clockss/immobiliare-property-scraper').call({ location: 'milano', channel: 'RENT', maxItems: 3 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
For asynchronous HTTP requests, send the JSON input to POST https://api.apify.com/v2/acts/lentic_clockss~immobiliare-property-scraper/runs with the bearer-token header. After completion, use GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json. If an SDK call returns during a pause, follow the same completion rule before reading final results.
Integrations
Use Apify integrations to connect rows to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your own webhook. Use Apify Schedules for recurring runs.
In italiano
Questo Actor raccoglie annunci di vendita e affitto pubblicati su Immobiliare.it, con prezzi richiesti, metrature, locali, classe energetica e contatti dell'agenzia quando disponibili. Per iniziare, inserisci la città in location e scegli BUY oppure RENT in channel. In alternativa, incolla un collegamento di ricerca o di un annuncio in startUrls. Imposta maxItems a 3 per una prima prova. Il limite vale per ciascun collegamento o categoria, non necessariamente per l'intera esecuzione. Con includeUnits puoi ottenere righe separate per le unità di un progetto. Ogni riga consegnata viene addebitata, oltre al piccolo costo di avvio. I dati non pubblicati restano vuoti. Puoi esportare i risultati in JSON, CSV o Excel.
FAQ
Is it legal to scrape Immobiliare.it?
Public availability is not blanket permission for every use. You are responsible for the site's terms and applicable data-protection law. Processing personal data requires a lawful basis; seek legal advice when needed.
Why did my run end as ABORTED?
Check its status message. The queued/resume message means an automatic pause; wait for the same run to resume. A manual abort or another failure does not carry that assurance.
How many results can I get?
Set maxItems from 1 to 500 per URL or category. Inventory, duplicate removal, the run's spending cap and free-plan limits can reduce delivery. It is a ceiling, not a promised count.
Why are some fields empty?
Not every listing publishes all details. Try scrapeDetails=true for additional available fields, but it cannot supply unpublished information. Email addresses are not collected; emails stays empty.
Why did my free-plan run stop after 10 runs?
The publisher limits Free-plan accounts to 10 runs of this Actor. A paid Apify plan removes that run-count restriction, not row charges or your spending cap.
Can I collect offices, shops, warehouses or land?
Yes: choose uffici, negozi, magazzini, capannoni or terreni. Leave provider at auto for these categories. Auctions and overseas listings are outside this Actor's category selection.
Does an agency profile URL return its property inventory?
No. It returns an agency row. The optional wsappEnum=agency selection instead returns listings for agencyId; see the input example above.
What if a run returns no rows?
Check the city, URL and RUN_SUMMARY. With allowEmptyResults=true, confirmed empty inventory can finish successfully. Collection failures are not the same as an empty search. Include the run ID when reporting a problem.
Limitations
- Italy only; auction and overseas categories are not supported. Unknown category filters may fall back to the default, so inspect
INPUT_REPORT. - Only recognized search, listing and agency-profile URL paths are intended inputs, not arbitrary pages.
- Optional
wsappsearch selection supportscase, not commercial categories or residential subtypes. - Contacts, exact street numbers, energy ratings and images vary by listing. Email extraction and agency social profiles are not provided.
- Image, phone and feature lists are capped at 50 entries. Detail enrichment does not guarantee every field.
- Asking prices are not completed-sale prices; the Actor does not provide valuations or a historical archive.
Related scrapers
More real estate and property data scrapers from the same publisher:
- Zumper Scraper
- Booli Scraper
- Craigslist Scraper
- PropertyGuru Scraper
- OpenSooq Scraper
- Apartments.com Rental Scraper
- Dot Property Scraper
- FINN.no Scraper
Browse all of our scrapers at apify.com/lentic_clockss.
Support
Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.