idealista Scraper
Pricing
from $0.65 / 1,000 listing scrapeds
idealista Scraper
Scrape idealista.com, idealista.it and idealista.pt listings with price, size, rooms, energy rating, coordinates, agency, photos and 3D tours. Export to CSV, Excel, JSON or XML.
Pricing
from $0.65 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
ParseForge
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
3 days ago
Last modified
Categories
Share

🏠 idealista Scraper
🚀 Export idealista listings in seconds. 52 fields per ad across Spain, Italy and Portugal, with the energy rating decoded from the certificate icon, exact coordinates, the full photo gallery and the Matterport 3D tour link when the advertiser has one.
idealista is the largest property portal in Spain, Italy and Portugal, and it sits behind DataDome, which answers plain HTTP clients with a challenge page on every sale search and every ad page. This Actor reads the same server-rendered pages the site builds for a real visitor. Rent searches and everything on idealista.it are read over plain HTTP. When DataDome steps in, one stealth browser on a residential IP from the ad's own country warms up once, and every later page is fetched from inside that page. Paste an idealista search URL with the filters you set on the site, paste a single ad, or build the search from the form and let the Actor assemble the URL.
Measured on live runs while building this Actor: rent in Valencia city returns 2,748 ads across 92 pages, sale in Milan returns 14,028 across 468 pages, the Milan province search paginates to 1,035 pages, and the Lisbon district search to 949. A 5-ad sale run in Madrid with full ad pages finished in 49 seconds, browser warm-up included; a 5-ad rent run in Barcelona in 38 seconds. Every one of the 52 fields was populated on at least one verification row, galleries ran 9 to 42 photos per ad, and coordinates resolved on 10 of 10 ads.
| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Real estate investors and buy-to-let analysts | Screen price per m², price drops and days on market across whole cities |
| Agencies and proptech teams | Monitor competitor stock, new listings and withdrawn ads by zone |
| Market researchers and data journalists | Build rent and sale indices from the source most Iberian buyers actually use |
| Relocation and rental platforms | Feed a search with fresh, geo-coded listings and the photos to show them |
| Valuers and mortgage teams | Pull comparables with energy rating, build year, floor and condition in one row |
📋 What the idealista Scraper does
- 🛡 Gets through DataDome. Sale searches and every ad page on idealista.com return a challenge to a normal HTTP client. The Actor tries HTTP first, and on the first challenge it warms up a stealth browser on a residential IP from the ad's country, then fetches the rest from inside the page so the sensor keeps the session alive. One warm-up per run, not one per page.
- ⚡ Energy rating as a letter. idealista shows the certificate as an icon. The Actor decodes the icon class with the site's own stylesheet mapping and returns
A+toG, plus the kWh/m² consumption text when the advertiser filled it in. - 🧭 Exact coordinates. Latitude and longitude come straight from the ad's own map, so listings drop onto a map without a geocoding step.
- 🕶 3D tours, videos and floor plans.
virtualTourUrlsreturns the Matterport or Floorfy link,videoUrlsthe MP4 files, andhasPlantells you whether a floor plan is attached. - 📉 Price drops. The previous price and the drop percentage the site shows on reduced ads, ready to sort by.
- 🌍 Three countries, one schema. idealista.com, idealista.it and idealista.pt, with the same 52 keys in every row and a
countrycolumn to split on. - 🎛 Every filter idealista has. Price, size, bedrooms, publication window and sort order are in the form; anything else the site offers goes in as the raw URL token idealista itself uses, so no filter is out of reach.
- 📏 Whole searches. A query paginates to its last page and stops, with no wrap-around and no duplicate rows. Province and district searches with 30,000 ads run start to finish.
- ⚡ Two speeds. Full detail opens every ad. Listing-only mode reads 30 ads per request from the cards alone when price, size, rooms, floor and the first photo are enough.
💡 Why it matters: the energy rating, the coordinates and the price history are the three things an analyst needs from an idealista ad, and they are the three the site does not hand you in a usable form. This Actor returns all three on every row.
🎬 Full Demo (🚧 Coming soon)
📊 Output
Every run writes one flat row per ad. 52 fields, always the same keys, so the dataset is safe to load straight into a pipeline. Fields the advertiser did not fill in carry Not Disclosed; fields that do not apply to the ad type carry N/A.
| Field | Type | Description |
|---|---|---|
🖼 imageUrl | string | Main photo |
📌 title | string | Ad title as published |
🔗 url | string | Public ad URL |
🆔 id | string | idealista ad ID |
🌍 country | string | ES, IT or PT |
🔁 operation | string | sale or rent |
🏠 propertyType | string | piso, ático, chalet, appartamento, and so on |
💶 price | number | Price in EUR |
💱 currency | string | EUR |
📆 pricePeriod | string | total for sale, month for rent |
🏷 priceText | string | Price exactly as displayed |
📉 previousPrice | number | Price before the last reduction |
📉 priceDropPercent | number | Reduction shown by idealista |
📐 pricePerSqm | number | Price divided by built area |
📏 size | number | Built area in m² |
🛏 rooms | number | Bedrooms (rooms on idealista.it) |
🛁 bathrooms | number | Bathrooms |
🏢 floor | string | Floor as displayed |
🛗 hasLift | string | Yes or No |
🌤 isExterior | string | Yes or No, Spain only |
🚗 parkingIncluded | string | Yes when a parking space is included in the price |
📍 locationText | string | Neighbourhood and city |
🧭 latitude | number | Latitude from the ad map |
🧭 longitude | number | Longitude from the ad map |
🔧 condition | string | Good condition, needs renovation, new build |
🏗 builtYear | number | Year of construction |
🧭 orientation | string | Orientation the advertiser declared |
🔥 heating | string | Heating type |
⚡ energyRating | string | A+ to G, decoded from the certificate icon |
⚡ energyText | string | Consumption line with kWh/m² |
🌳 plotSize | number | Plot in m² on houses with land |
📄 description | string | Full advertiser text, line breaks preserved |
👤 advertiserType | string | Professional or Private |
🏢 agencyName | string | Agency or private advertiser name |
🌐 agencyUrl | string | Agency profile on idealista |
🏷 agencyLogo | string | Agency logo |
⭐ isFeatured | string | Yes on promoted ads |
🗓 hasOnlineBooking | string | Yes when idealista offers online booking |
📐 hasPlan | string | Yes when a floor plan is attached |
🎬 hasVideo | string | Yes when a video is attached |
🕶 hasVirtualTour | string | Yes when a 3D or 360 tour is attached |
🕰 postedLabel | string | Recency label from the card, e.g. 1 hora, 27 ago |
🔄 updatedText | string | idealista's last-updated line |
🖼 imageCount | number | Photos in the gallery |
🏷 tags | array | Card tags such as Alquiler de temporada, Lujo, Vistas al mar |
✅ features | array | Every feature line from the ad, in the site's language |
🖼 images | array | Full gallery URLs |
🎬 videoUrls | array | MP4 video files |
🕶 virtualTourUrls | array | Matterport or Floorfy tour links |
🔎 searchUrl | string | The search page the ad came from |
🕒 scrapedAt | string | ISO timestamp |
❌ error | string | Always null on a good row |
Three real rows from the verification runs, galleries and descriptions shortened:
[{"imageUrl": "https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/fc/8e/83/1429632100.jpg","title": "Piso en venta en Calle del Corazón de María","url": "https://www.idealista.com/inmueble/110413083/","id": "110413083","country": "ES","operation": "sale","propertyType": "piso","price": 1050000,"currency": "EUR","pricePeriod": "total","priceText": "1.050.000 €","previousPrice": 1195000,"priceDropPercent": 12,"pricePerSqm": 6402,"size": 164,"rooms": 3,"bathrooms": 3,"floor": "1ª planta","hasLift": "Yes","isExterior": "Yes","parkingIncluded": "Yes","locationText": "Prosperidad, Madrid","latitude": 40.4433162,"longitude": -3.669789,"condition": "Segunda mano/buen estado","builtYear": 1964,"orientation": "Not Disclosed","heating": "Calefacción individual","energyRating": "E","energyText": "Consumo: 252 kWh/m² año","plotSize": "N/A","description": "Exclusiva vivienda reformada a estrenar con terraza en el co...","advertiserType": "Professional","agencyName": "Engel & Völkers Madrid","agencyUrl": "https://www.idealista.com/pro/engel-volkers-madrid/","agencyLogo": "https://st3.idealista.com/56/f1/09/engel-volkers-madrid.gif","isFeatured": "No","hasOnlineBooking": "No","hasPlan": "Yes","hasVideo": "Yes","hasVirtualTour": "Yes","postedLabel": "Not Disclosed","updatedText": "Anuncio actualizado el 26 de agosto","imageCount": 26,"tags": [],"features": ["164 m² construidos, 144 m² útiles", "3 habitaciones", "3 baños", "Terraza", "Plaza de garaje incluida en el precio", "Segunda mano/buen estado"],"images": ["https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/fc/8e/83/1429632100.jpg"],"videoUrls": [],"virtualTourUrls": [],"searchUrl": "https://www.idealista.com/venta-viviendas/madrid-madrid/","scrapedAt": "2026-09-01T20:04:22.851Z","error": null},{"imageUrl": "https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/4f/bc/53/1437188346.jpg","title": "Alquiler de ático en Calle de la Palla, 39","url": "https://www.idealista.com/inmueble/111457675/","id": "111457675","country": "ES","operation": "rent","propertyType": "piso","price": 1289,"currency": "EUR","pricePeriod": "month","priceText": "1.289 €/mes","previousPrice": "N/A","priceDropPercent": "N/A","pricePerSqm": 21,"size": 60,"rooms": 2,"bathrooms": 1,"floor": "4ª planta","hasLift": "Yes","isExterior": "Yes","parkingIncluded": "No","locationText": "El Gòtic, Barcelona","latitude": 41.3834811,"longitude": 2.1744773,"condition": "Segunda mano/buen estado","builtYear": "Not Disclosed","orientation": "Orientación sur, este","heating": "Not Disclosed","energyRating": "D","energyText": "Not Disclosed","plotSize": "N/A","description": "** VIDEO DETALLADO EN LA MISMA PUBLICACIÓN**\n\nCOCINA EQUIPADA CON TODOS LOS ELECTRODOMESTICOS...","advertiserType": "Private","agencyName": "ASESORIAINMO","agencyUrl": "N/A","agencyLogo": "N/A","isFeatured": "No","hasOnlineBooking": "No","hasPlan": "No","hasVideo": "Yes","hasVirtualTour": "No","postedLabel": "1 hora","updatedText": "Anuncio actualizado el 1 de septiembre","imageCount": 11,"tags": ["Alquiler de temporada"],"features": ["60 m² construidos", "2 habitaciones", "1 baño", "Terraza", "Segunda mano/buen estado", "Armarios empotrados", "Orientación sur, este", "Amueblado y cocina equipada", "4ª planta exterior", "Con ascensor", "Aire acondicionado"],"images": ["https://img4.idealista.com/blur/WEB_DETAIL/0/id.pro.es.image.master/4f/bc/53/1437188346.jpg"],"videoUrls": ["https://st3v.idealista.com/d5/5f/a4/1437198543.mp4"],"virtualTourUrls": [],"searchUrl": "https://www.idealista.com/alquiler-viviendas/barcelona-barcelona/con-de-dos-dormitorios/","scrapedAt": "2026-09-01T20:11:06.057Z","error": null},{"imageUrl": "https://img4.idealista.it/blur/WEB_DETAIL/0/id.pro.it.image.master/0c/81/15/831869123.jpg","title": "Bilocale in vendita in Via Nicola Palmieri, 47","url": "https://www.idealista.it/immobile/36428630/","id": "36428630","country": "IT","operation": "sale","propertyType": "appartamento","price": 224000,"currency": "EUR","pricePeriod": "total","priceText": "224.000 €","previousPrice": 228000,"priceDropPercent": 2,"pricePerSqm": 5209,"size": 43,"rooms": 2,"bathrooms": 1,"floor": "2º piano","hasLift": "No","isExterior": "Not Disclosed","parkingIncluded": "No","locationText": "Stadera - Abbiategrasso, Milano","latitude": 45.4350049,"longitude": 9.182318,"condition": "Buono stato","builtYear": 1950,"orientation": "Orientamento sud","heating": "Riscaldamento autonomo","energyRating": "D","energyText": "Classe energetica (Legge 90 del 2013, legislazione vigente): (82 kWh/m² anno)","plotSize": "N/A","description": "A Pochi minuti da MM2 Abbiategrasso, in zona ben servita, proponiamo in Via Nicola Palmieri bilocale ristrutturato...","advertiserType": "Professional","agencyName": "Fast House","agencyUrl": "https://www.idealista.it/pro/fast-house-milano-case-immobiliare/","agencyLogo": "https://st3.idealista.it/92/7c/3a/fast-house-milano-case-immobiliare.gif","isFeatured": "Yes","hasOnlineBooking": "No","hasPlan": "Yes","hasVideo": "Yes","hasVirtualTour": "Yes","postedLabel": "Not Disclosed","updatedText": "Annuncio aggiornato il 31 agosto","imageCount": 62,"tags": ["Ristrutturato"],"features": ["43 m² commerciali", "2 locali", "1 bagno", "Buono stato", "Orientamento sud", "Costruito nel 1950", "Riscaldamento autonomo", "2º piano", "Senza ascensore", "Aria condizionata"],"images": ["https://img4.idealista.it/blur/WEB_DETAIL/0/id.pro.it.image.master/0c/81/15/831869123.jpg"],"videoUrls": ["https://st3v.idealista.it/77/3b/88/832532782.mp4"],"virtualTourUrls": ["https://my.matterport.com/show/?m=nhv48PcYdb1"],"searchUrl": "https://www.idealista.it/vendita-case/milano-milano/","scrapedAt": "2026-09-01T19:59:35.935Z","error": null}]
✨ Why choose this Actor
- 🔤 Energy rating you can filter on. Most scrapers return the icon's class name or nothing. This one returns the letter.
- 🧭 Coordinates on every ad, read from the ad's own map rather than geocoded from the street name.
- 🕶 Tour and video links, not just a Yes flag.
- 💸 Cheapest path first. Rent searches and Italy never start a browser. The browser is one warm-up per run when it is needed, so a 1,000-ad sale run costs a few cents of compute on top of the results.
- 🧾 Honest sentinels.
Not Disclosedmeans the advertiser left it blank,N/Ameans it does not apply. You never get an empty cell you have to guess about. - 🌍 One schema for three countries, so a Lisbon, Madrid and Milan run land in the same sheet.
📈 How it compares to alternatives
| idealista Scraper (this Actor) | Typical idealista scrapers | idealista's official API | |
|---|---|---|---|
| Sale listings on idealista.com | Yes, through DataDome | Often rent only, or breaks on challenge | Yes |
| Energy rating | Letter, A+ to G | Icon class or missing | Letter |
| Coordinates | From the ad map | Often missing | Yes |
| 3D tour and video links | Yes | Rarely | No |
| Price drop history | Previous price and percentage | Rarely | No |
| Countries | Spain, Italy, Portugal | Usually Spain | Spain, Italy, Portugal |
| Setup | Paste a URL | Paste a URL | Application, OAuth keys, monthly quota |
| Contact phone numbers | Not public (login and captcha) | Sometimes, from a login session | No |
🚀 How to use
- Create a free Apify account. It comes with $5 of free usage every month.
- Open the idealista Scraper on the Apify Store and click Try for free.
- Paste an idealista search URL into Start URLs, or leave it empty and fill in the search builder: country, sale or rent, property type, the location slug from the site's URL (
madrid-madrid,milano-milano,lisboa), price and size bands, bedrooms, publication window and sort order. - Set Max Items. Free accounts get 10 ads per run as a preview.
- Leave Open every ad for full details on for the full 52 fields, or switch it off for a fast card-only pass.
- Click Start. Download the dataset as CSV, Excel, JSON or XML, or read it through the API.
One example input, sale flats in Valencia between 150,000 and 300,000 EUR with two or three bedrooms, newest first:
{"country": "es","operation": "sale","propertyType": "homes","location": "valencia-valencia","minPrice": 150000,"maxPrice": 300000,"bedrooms": ["2", "3"],"sortBy": "newest","maxItems": 500}
💼 Business use cases
🏦 Investment screening
Pull every sale ad in a district with price, m², price per m², price drop and energy rating, then rank by yield against the rent rows from the same run. The previousPrice column alone flags the motivated sellers.
🏢 Agency competitive intelligence
Run the same searches every morning and diff by id. New ads, price cuts and withdrawn listings per agency, with the agencyName and agencyUrl columns to attribute them.
📊 Market indices and research
Province-level searches paginate to 30,000 ads. Aggregate pricePerSqm by locationText, builtYear band and energyRating for a rent or sale index that updates as often as you schedule it.
🏠 Relocation and rental products
Feed a map search with geo-coded rentals, their galleries and their videos, and filter on hasLift, isExterior, parkingIncluded and the furnished tag without reading a single description.
🔌 Automating idealista Scraper
- Make and Zapier: trigger a run on a schedule and push new rows to Google Sheets, Airtable or a CRM.
- Slack: post a message whenever a run finds an ad under your target price per m².
- Airbyte: load every run into your warehouse as a table.
- GitHub Actions: call the Actor from a workflow and commit the CSV to a data repo.
- Google Drive: save the Excel export of every run to a shared folder.
🌟 Beyond business use cases
- Research: housing affordability studies, energy efficiency of the stock by build year, rent pressure by neighbourhood.
- Personal: watch a handful of neighbourhoods for a flat that matches your criteria and get the coordinates on a map.
- Non-profit: track seasonal rental conversion in tourist cities, or the share of ads without an energy certificate.
- Experimentation: train a price model on 30,000 rows with 52 features each, photos and text included.
🤖 Ask an AI assistant about this scraper
Paste this README into ChatGPT, Claude or Gemini and ask it to write the input for your case, explain a column, or draft the Make scenario that moves the rows into your sheet.
❓ Frequently Asked Questions
🛡 Does it work on sale listings, or only rent?
Both. Sale searches and ad pages on idealista.com are DataDome-protected and the Actor handles them with a one-time stealth browser warm-up on a residential IP. Rent searches and idealista.it are read over plain HTTP.
💶 How much does a sale run cost in compute?
The browser warm-up takes about 20 seconds and the run uses 4 GB while the browser is open. The Madrid sale verification run cost $0.012 of platform usage for 5 ads with full pages; the cost is dominated by the warm-up, so larger runs are cheaper per ad.
📍 Where do I get the location slug?
Search on idealista, then copy the part of the URL after the operation and type: https://www.idealista.com/venta-viviendas/madrid-madrid/ gives madrid-madrid. Provinces use -provincia in Spain and Italy and -distrito in Portugal.
🎛 Can I use filters the form does not show?
Yes. Put idealista's own URL tokens in Extra idealista filters, one per line: ascensor, piscina, terraza, garaje, amueblado_amueblados, obra-nueva, exterior, mascotas, eficiencia-energetica-alta in Spain; ascensori, giardino, terrazza, nuova-costruzione in Italy; elevador, piscina, garagem, novo in Portugal. Or just paste the full URL from the site into Start URLs.
📞 Are advertiser phone numbers included?
No. idealista only reveals phones behind a login session and a captcha, and that is not public data. The agency name, profile URL and logo are included.
📉 What does previousPrice mean?
The price idealista shows struck through on reduced ads, with priceDropPercent as the site computes it. Both carry N/A on ads that were never reduced.
⚡ How is the energy rating decoded?
idealista renders the certificate as a CSS icon. The Actor maps the icon class through the site's own stylesheet (icon-energy-c-2 is A, -3 is B, through -8 for G, plus A+ and the Italian A1 to A4 sub-classes reported as A). Ads with the certificate "in progress" or exempt carry Not Disclosed.
📏 Is there a limit on how many ads a search returns?
idealista paginates a search as far as its own site does, 30 ads per page, and the largest searches seen while building this Actor ran to 1,035 pages. For anything bigger, split by price band or by district.
🔀 Does the sort order always apply?
On idealista.it, yes. On idealista.com, DataDome serves a hard captcha to any search that combines filters with a sort parameter, in a browser as well as over HTTP, so a filtered and sorted search on the Spanish site is delivered with its filters intact but in idealista's default relevance order, and the run log says so. Unfiltered searches sort normally. For "newest first" on a filtered Spanish search, use Published within (last 24 or 48 hours) instead, which is a filter and goes through.
🇮🇹 Why does rooms mean something different in Italy?
idealista.it counts locali (all rooms), not bedrooms, and its bedroom filter maps to that. The Actor passes the site's own number through and labels the filter accordingly.
🔁 Will I get duplicates?
No. Ads are deduplicated on their idealista ID within a run, and a search stops at its last page instead of wrapping around.
🌐 Do I need a proxy?
Residential proxies matched to the site's country are on by default and are what makes the DataDome path work. Leave them on.
🕰 What is postedLabel?
The recency label idealista prints on the card ("1 hora", "27 ago"). It is shown on rent searches and on recently published ads; older sale ads carry Not Disclosed, and updatedText has the last-updated date for every ad.
🔌 Integrate with any app
Every run is available through the Apify API and the dataset endpoints, so any language that can make an HTTP request can pull the rows. The Apify integrations for Make, Zapier, Google Sheets, Airbyte, Slack and webhooks work out of the box.
🔗 Recommended Actors
- Habitaclia Spain Scraper for Catalonia's leading portal, same schema style.
- Rightmove Property Scraper for the UK market.
- Bien'ici Real Estate Scraper for France.
- Zillow Rentals Scraper for US rentals.
💡 Pro Tip: browse the complete ParseForge collection.
🆘 Need Help? Open our contact form
⚠️ Disclaimer: this is an independent tool, not affiliated with or endorsed by idealista. It reads only publicly available data that any visitor can see on the site, and you are responsible for using it in line with idealista's terms and applicable law.