Idealista Scraper
Pricing
from $0.40 / 1,000 results
Idealista Scraper
Scrape Idealista search results and listing detail pages from Spain, Italy, and Portugal using request-only HTTP with browser TLS impersonation. Supports pagination, optional detail enrichment, price-range splitting, search monitoring, and coverage reports.
Pricing
from $0.40 / 1,000 results
Rating
0.0
(0)
Developer
Blynx
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Scrape property listings from Idealista in Spain, Italy, and Portugal. This Actor works with Idealista search URLs and individual listing URLs, extracts clean real estate data, and stores the results in an Apify dataset ready for JSON, CSV, Excel, API, or MCP workflows.
The scraper is request-only: it does not use Playwright, Puppeteer, Selenium, or a headless browser. It fetches Idealista HTML with browser TLS impersonation and parses the public page payloads directly.
What You Can Scrape
- Search results from
idealista.com,idealista.it, andidealista.pt - Individual property detail pages
- Sale and rental listings
- URLs with Idealista filters already applied
- Generated search URLs from country, operation, and location slug
- Optional detail enrichment for every search result
Key Features
- Spain, Italy, and Portugal in one Actor
- Request-only scraping with browser TLS impersonation
- Search pagination with configurable page limits
- Optional price-range splitting for broad searches
- Coverage reports showing total results, pages fetched, pushed rows, and truncation
- Optional monitoring mode for new, unchanged, price-changed, and removed listings
- Search result fields: price, size, bedrooms, advertiser, photos, multimedia flags, floor, lift, tags, and listing URL
- Detail page fields: description, address, city, province, coordinates, advertiser, features, energy information, gallery photos, and normalized amenity flags
- Residential proxy support through Apify Proxy
Quick Start
Paste one or more Idealista search URLs:
{"mode": "SEARCH","searchUrls": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/con-precio-hasta_400000,precio-desde_200000/" },{ "url": "https://www.idealista.it/en/vendita-case/milano-milano/con-prezzo_400000,prezzo-min_200000/" },{ "url": "https://www.idealista.pt/en/comprar-casas/lisboa/com-preco-max_400000,preco-min_200000/" }],"maxPagesPerSearch": 1,"includeDetails": false,"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Or scrape one property detail page:
{"mode": "DETAIL","detailUrls": [{ "url": "https://www.idealista.com/en/inmueble/108563656/" }],"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Input Modes
SEARCH
Use SEARCH mode when you want listings from a search or filtered results page.
{"mode": "SEARCH","searchUrls": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/" }],"maxPagesPerSearch": 3,"maxItems": 100,"includeDetails": false}
SEARCH mode emits property rows plus one _recordType=coverageReport row per search URL. The coverage report helps you see whether the search was truncated by your page limit.
DETAIL
Use DETAIL mode when you already have listing URLs or listing IDs.
{"mode": "DETAIL","detailUrls": [{ "url": "https://www.idealista.com/en/inmueble/108563656/" }],"rawOutput": false}
DETAIL mode extracts the richer data available on the property page, including description, location, gallery photos, energy fields, and normalized facts such as bathrooms, terrace, balcony, wardrobes, air conditioning, heating, garden, swimming pool, storage room, and accessibility.
Generated URLs
You can also build search URLs from input fields instead of pasting full URLs.
{"mode": "SEARCH","country": "ES","operation": "SALE","locationSlug": "madrid-madrid","minPrice": 200000,"maxPrice": 400000,"maxPagesPerSearch": 1}
Supported countries:
ESforidealista.comITforidealista.itPTforidealista.pt
Supported operations:
SALERENTNEW_DEVELOPMENT
Price-Range Splitting
For broad searches, enable enablePriceSplitting to split the search into price ranges and reduce truncation.
{"mode": "SEARCH","searchUrls": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/" }],"enablePriceSplitting": true,"maxPagesPerSearch": 20,"maxSplitDepth": 2,"maxItems": 0}
The Actor records a coverage report for every search URL. The report includes:
- reported total results
- reported pages
- pages fetched
- rows pushed
- duplicate skips
- range count
- truncation status
If a range is still too large, the truncated field tells you that the current input limits did not cover the full result set.
Monitoring Mode
Set monitoring=true to compare a search with previous runs stored in a named key-value store.
{"mode": "SEARCH","searchUrls": [{ "url": "https://www.idealista.com/en/alquiler-viviendas/barcelona-barcelona/" }],"monitoring": true,"monitoringStoreName": "idealista-monitoring"}
Property rows can be marked as:
newunchangedprice_changed
When a run is not truncated, removed listings can be emitted as _recordType=change rows.
Output
Each dataset item has _recordType so you can distinguish property rows, coverage reports, change rows, and error rows.
Search Result Example
{"_recordType": "property","source": "idealista","propertyId": "108563656","url": "https://www.idealista.com/en/inmueble/108563656/","title": "Flat / apartment in Calle Simpatia, 11, El Canaveral, Madrid","price": "327,000 EUR","priceValue": 327000,"currency": "EUR","sizeM2": 64,"bedrooms": 1,"advertiserName": "Soldit Homes","photoCount": 13,"hasVideo": false,"has3DTour": false,"hasFloorPlan": true,"country": "ES"}
Detail Result Example
{"_recordType": "property","source": "idealista","propertyId": "108563656","title": "Flat / apartment for sale in Calle Simpatia, 11","price": "327,000 EUR","priceValue": 327000,"sizeM2": 64,"bedrooms": 1,"bathrooms": 1,"address": "Calle Simpatia, 11","city": "Madrid","province": "Madrid city, Madrid","advertiserName": "Soldit Homes","photoCount": 13,"url": "https://www.idealista.com/en/inmueble/108563656/"}
Fields vary by listing and by country. Idealista sometimes hides exact addresses, coordinates, or advertiser details, so those fields can be null.
Important Fields
Common property fields include:
propertyIdurltitlepricepriceValuecurrencypriceByAreasizeM2bedroomsbathroomsfloorTextfloorNumberhasLiftexteriordescriptionaddressneighborhooddistrictcityprovincelatitudelongitudeadvertiserNameadvertiserUrlphotosphotoCounthasVideohas3DTourhasFloorPlanenergyConsumptionenergyEmissionshasTerracehasBalconyhasAirConditioninghasHeatinghasGardenhasSwimmingPoolhasStorageRoom
Pricing Notes
This Actor uses pay-per-event pricing with the dataset item as the primary event. In SEARCH mode, the Actor writes property rows and coverage report rows to the default dataset. In DETAIL mode, it writes one dataset row per processed detail URL, either a property row or an error row if the URL could not be fetched.
Proxy and Blocking Notes
Idealista uses anti-bot protection, and cloud datacenter IPs can be challenged. Residential proxies are recommended on Apify:
{"proxy": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
The Actor retries proxy errors and DataDome challenge pages. If one search URL fails and failOnSearchError=false, the run continues and writes an _recordType=error item for that URL.
Contact Phones
includeContactPhones is available as an experimental option. Idealista's contact-phone AJAX endpoint is stricter than the public HTML pages and can return DataDome challenges even when listing pages load correctly. For stable production runs, keep includeContactPhones=false.
Limits and Recommendations
- Start with
maxPagesPerSearch=1for tests. - Use
maxItemsto cap large runs. - Use residential proxies for production runs.
- Enable
enablePriceSplittingfor very broad searches. - Use
includeDetails=trueonly when you need detail-page fields for every search result, because it adds one extra request per listing. - Keep
failOnSearchError=falsefor large batches so one blocked URL does not stop the whole run.
FAQ
Does this Actor use a browser?
No. It is request-only and uses browser TLS impersonation via HTTP requests.
Can it scrape Spain, Italy, and Portugal?
Yes. It supports Idealista's .com, .it, and .pt domains.
Can I paste filtered Idealista URLs?
Yes. The Actor respects existing Idealista URL filters such as price ranges, sale/rent paths, and location slugs.
Does it always return phone numbers or emails?
No. Emails are not exposed on normal listing pages, and phone endpoints are protected more strictly. The Actor focuses on stable listing, advertiser, location, feature, and photo data.
Why do I see truncated=true in coverage reports?
It means the reported number of pages is higher than your maxPagesPerSearch setting. Increase the page limit or enable price splitting if you need broader coverage.
Why are there coverage report rows in my dataset?
Coverage reports make search runs auditable. They tell you how many results Idealista reported, how many pages were fetched, and whether the run was truncated.