Idealista.com
Pricing
from $0.60 / 1,000 listing results
Idealista.com
Are you looking for a property in Spain or Portugal or Italy? With idealista it's easier, with more than 1.400.000 listings of flats and houses for sale or rent.
Pricing
from $0.60 / 1,000 listing results
Rating
1.4
(2)
Developer
Lukáš Širhal
Maintained by CommunityActor stats
13
Bookmarked
778
Total users
14
Monthly active users
3 days ago
Last modified
Categories
Share
Actor - Idealista Scraper
Idealista scraper
Since Idealista doesn't provide a public API, this actor retrieves property data from Idealista (Spain, Portugal, Italy, France).
Features
- Scrape property details — price, price per m², size, floor, rooms, bathrooms, description, energy certification, lift/parking/feature flags, location breakdown (district, municipality, province, neighborhood), photos, videos, 3D tours, contact info, and more.
- Scrape for-sale or rental properties — target sale or rent listings directly.
- Search by location — one or several city/district names, or a radius around a point.
- Filter by URL — paste any Idealista search URL (with filters already applied) as a
startUrl. - Advanced filters — price range, published within, bedrooms, bathrooms, size range, home type, floor height, condition, and features; sort by price, date, price drop, €/m² or size.
- All results from big searches — Idealista returns at most 2,500 listings per search; bigger searches are split by price automatically, with no duplicates.
- Monitoring — return only listings that are new since your previous run, for scheduled daily runs.
Note: Due to Idealista's privacy policy, exact property locations may be hidden. In those cases the scraper returns the map center coordinates accessible from the property detail.
Note:
descriptionis returned in the language the advertiser wrote it in (usually Spanish), even though titles and other labels come back in English.
Pricing
This Actor uses pay-per-event billing — you are not charged for Apify platform usage (compute, proxy bandwidth), only for the results you get.
| Event | Price | When it's charged |
|---|---|---|
list-result | $1.00 / 1,000 results | One per property returned from a search (district or a search startUrl) with fetchDetails disabled |
detail-result | $3.50 / 1,000 results | One per property fetched from its detail page — every result when fetchDetails is enabled, plus any direct property startUrl |
Each property is charged once: with fetchDetails: true search results are not pushed on their own, so you pay detail-result only — never both events for the same property.
Detail results cost more because each one needs its own extra API request through residential proxies, on top of the search request. If you only need the fields listed in the search response (see the note under Example Result), leave fetchDetails off and pay the list-result rate.
Use maxItems to cap how many results — and therefore how much — a run can produce.
Input Parameters
| Field | Type | Required | Description |
|---|---|---|---|
country | String | ✓ | es (Spain), pt (Portugal), it (Italy), fr (France). Used with district; a startUrl always uses the country of its domain. |
operation | String | ✓ | sale or rent |
proxy | Object | ✓ | Proxy configuration — RESIDENTIAL proxies required |
district | String | Location name or postal code to search, e.g. Madrid or 28013. Required if no startUrl, radius search, agency or propertyIds provided. | |
districts | Array | More locations or postal codes searched in the same run, e.g. ["Barcelona", "28013"]. | |
agency | String | Only one agency's listings: its short name or page URL (https://www.idealista.com/pro/<agency>/). Agency page URLs also work as a startUrl. | |
propertyIds | Array | Listing IDs to fetch directly (billed as detail-result), on the country site. | |
propertyType | String | homes (default), newDevelopments, bedrooms, vacationRentals (rent only), offices, premises, transfers, garages, lands, storageRooms, buildings | |
startUrl | Array | List of Idealista property detail or search URLs from any supported domain (idealista.com, .pt, .it, .fr), including map-view (/mapa) and drawn-area URLs (/areas/...?shape=...) | |
maxItems | Integer | Maximum number of results for the whole run (across all districts, URLs and price bands). Leave empty for all results. | |
endPage | Integer | Last search page per search, 50 results per page (default and maximum 50) | |
splitByPrice | Boolean | One Idealista search returns at most 2,500 listings. When a search has more, it is split into price bands so you get the full result set. Default true. | |
monitoringMode | Boolean | Return only listings that previous runs with the same search did not return (see Monitoring). Default false. | |
minPrice / maxPrice | Integer | Price range in €. | |
publishedWithin | String | any (default), last24Hours (rent only), last48Hours (sale only), lastWeek, lastMonth | |
sortBy | String | weigh (relevance, default), price, publicationDate, modificationDate, priceDown, ratioeurm2, size, distance (radius search only) | |
sortOrder | String | desc (default) or asc | |
language | String | Language of titles and labels: en (default), es, ca, pt, it, fr, de, nl. Descriptions stay in the advertiser's language. | |
latitude / longitude / radiusKm | Number | Radius search around a point instead of a district, e.g. 40.4168, -3.7038, 2. Default radius 5 km. | |
fetchDetails | Boolean | For each search result, also fetch the full property detail page (adds description, energyCertification, and more accurate floor/hasLift/location fields). Slower, uses one extra request per property, and bills at the detail-result rate (see Pricing). Default false. | |
minSize | String | Minimum property size in m², e.g. "60" | |
maxSize | String | Maximum property size in m², e.g. "200" | |
bedrooms | Array | e.g. ["studio","1","2","3","4"] | |
bathrooms | Array | e.g. ["1","2","3"] | |
homeType | Array | flat, penthouse, duplex, studio, chalet (houses), countryHouse, apartment, villa, loft, atticStudio, casaBaja. Several values widen the search. detachedHouse, semiDetachedHouse and terracedHouse are searched as chalet — Idealista has no separate filter for them. | |
condition | Array | newDevelopment, good, renew | |
propertyStatus | Array | bareOwnership, tenanted, illegallyOccupied, free | |
floorHeights | Array | topFloor, intermediateFloor, groundFloor | |
features | Array | airConditioning, builtinWardrobes, elevator, exteriorDomesticSpace, balcony, terrance, exterior, garage, garden, swimmingPool, storeRoom, accessible, luxury, seaViews, bankOffer (bank-owned), virtualTour, hasPlan (floor plan), petsAllowed (rent only) | |
energyRating | String | any (default), high, medium, low | |
furnished | String | Rent only: any (default), furnished, furnishedKitchen | |
auction | String | any (default), only, exclude | |
onlyNewest | Boolean | Return only newest listings | |
debugLog | Boolean | Enable verbose debug logging |
This solution requires Proxy servers. Use Apify Proxy with the RESIDENTIAL group or your own residential proxies.
Example Result
{"url": "https://www.idealista.it/immobile/35994897/","title": "Flat / apartment in Via della Balduina, 63, Centro di Balduina, Roma","id": "35994897","price": 830000,"size": 220,"priceByArea": 3773,"baths": 3,"rooms": 10,"address": "Flat / apartment in Via della Balduina, 63, Centro di Balduina, Roma","hideAddress": false,"latitude": 41.9166671,"longitude": 12.4417612,"typology": "flat","subTypology": null,"description": "BALDUINA | Refined 210 sq m apartment with livable terraces, garage, and cellar...","energyCertification": null,"floor": "3","status": "good","newDevelopment": false,"hasLift": true,"externalReference": null,"district": "Balduina","municipality": "Roma","province": "Roma","neighborhood": "Centro di Balduina","locationId": "0-EU-IT-RM-01-001-097-38-002","parkingSpace": {"hasParkingSpace": true,"isParkingSpaceIncludedInPrice": true},"features": {"hasSwimmingPool": false,"hasTerrace": false,"hasAirConditioning": true,"hasBoxRoom": true,"hasGarden": false},"labels": [{ "name": "bright", "text": "Bright" }],"highlight": "Top","photos": [{"url": "https://img4.idealista.com/blur/480_360_mq/0/id.pro.es.image.master/a9/f6/68/1356345714.webp","tag": "facade","localizedName": "Facade","deeplinkUrl": null}],"videos": [],"3dtour": [],"listingUpdate": "2024-03-15T10:00:00.000Z","listingUpdateText": "Updated 2 days ago","priceDown": null,"priceDownPercentage": null,"contacts": {"commercialName": "Grupo Ibosa","contactName": "NR Village homes","phone1": {"phoneNumber": "919388896","formattedPhone": "919 38 88 96","prefix": "34","phoneNumberForMobileDialing": "+34919388896","nationalNumber": true,"formattedPhoneWithPrefix": "+34 919 38 88 96"}}}
Note: By default, search results (
districtor search-URL scraping) return the data included directly in the search response — it does not include everything a single property page has. EnablefetchDetailsto fetch the full detail page for every search result instead:
energyCertificationis only available from the detail page — there's no way to get it from search results,fetchDetailsor not.description,size, andpriceByAreaare present in both search results and detail pages.neighborhood,parkingSpace,newDevelopment, andhighlightare only present in search results — they're not returned by the detail endpoint at all, so scraping via a direct property URL (/inmueble/,/immobile/,/imovel/) or withfetchDetailsenabled won't populate them.district/municipality/provinceuse a different, coarser location breakdown on the detail page (it's approximated from Idealista'sadministrativeAreaLevel1-3fields, which don't line up cleanly with the search response's own district/municipality/province).features(pool, terrace, air conditioning, etc.) is less complete from the detail page — some flags (terrace, air conditioning) only exist there as free-text, not structured fields, so they're left out to avoid unreliable text-matching.
Tip
To use a filtered search: go to Idealista, apply filters on the search page, then copy and paste the URL as a startUrl entry.
Drawn-area searches work too: draw the area on Idealista's map, then paste the resulting /areas/...?shape=... URL as a startUrl. The polygon is used as the search area, so no district name is needed.
Filters in the URL path (price, size, rooms, bathrooms, home type, condition, features) are applied to the search and override the same fields in the actor input. Two caveats: the chalet subtypes (chalets-independientes, chalets-adosados, casas-de-pueblo, ...) are searched as one "houses" bucket, because the API has no subtype filter; and any filter token that cannot be mapped is logged as a warning and ignored.
How to get more than 2,500 results from one search
Idealista's API serves at most 50 pages of 50 listings for one search. With splitByPrice on (the default), a search that reports more results is re-run as price bands that each stay under that limit, and the bands are merged into one dataset. Each property is returned and charged once, even when it appears in two bands. Set maxItems to cap the run; with maxItems at 2,500 or less no splitting happens.
Monitoring: new listings only
Set monitoringMode: true and schedule the Actor (e.g. daily). The first run returns the full result set. Every later run with the same search returns only listings that no earlier run returned, so you pay only for new listings. The list of seen listings is kept in your account's idealista-monitoring key-value store, separately for each search: changing a location or filter starts a new list, while changing maxItems, sorting or language does not. Tip: sort by publicationDate so new listings come first. Property detail URLs in startUrl are always returned.
Ready-made examples
Copy an input into the Actor's JSON input tab and run it. Every example works without a pasted URL unless it shows one.
| You want | Key input |
|---|---|
| New homes for sale in Madrid, daily | "district": "Madrid", "publishedWithin": "last48Hours", "sortBy": "publicationDate", "monitoringMode": true |
| 2-bed flats to rent in Eixample, Barcelona under €1,400 | "startUrl": [{ "url": "https://www.idealista.com/alquiler-viviendas/barcelona/eixample/con-precio-hasta_1400,de-dos-dormitorios/" }] |
| Madrid flats with the biggest price drops | "district": "Madrid", "homeType": ["flat"], "sortBy": "priceDown" |
| Sea view apartments in Málaga under €400,000 | "district": "Málaga", "homeType": ["flat"], "features": ["seaViews"], "maxPrice": 400000 |
| Furnished flats to rent in Madrid | "district": "Madrid", "operation": "rent", "homeType": ["flat"], "furnished": "furnished" |
| Villas for sale in Marbella | "district": "Marbella", "homeType": ["villa"] |
| Homes within 1 km of Puerta del Sol | "latitude": 40.4169, "longitude": -3.7035, "radiusKm": 1, "sortBy": "distance", "sortOrder": "asc" |
| Homes in postal code 28013 (Madrid) | "district": "28013" |
| Pet-friendly flats to rent in Barcelona | "district": "Barcelona", "operation": "rent", "homeType": ["flat"], "features": ["petsAllowed"] |
| Holiday rentals in Barcelona (price per night) | "district": "Barcelona", "operation": "rent", "propertyType": "vacationRentals" |
| The whole Madrid sale market (past 2,500 results) | "district": "Madrid", "splitByPrice": true, "maxItems": 3000 |
| 1-bed flats to rent in Lisbon under €1,100 | "country": "pt", "district": "Lisboa", "operation": "rent", "bedrooms": ["1"], "maxPrice": 1100 |
| Milan apartments with price drops | "country": "it", "district": "Milano", "sortBy": "priceDown" |
| Flats to rent in Paris under €1,500 | "country": "fr", "district": "Paris", "operation": "rent", "homeType": ["flat"], "maxPrice": 1500 |
A full input, for example the daily Madrid alerts (schedule it in Apify Console):
{"district": "Madrid","operation": "sale","publishedWithin": "last48Hours","sortBy": "publicationDate","monitoringMode": true,"maxItems": 300,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Bugs, fixes, updates and changelog
If you have any feature requests you can create an issue from here. Here is the changelog with new features and bugfix info.