idealista Scraper avatar

idealista Scraper

Pricing

from $0.65 / 1,000 listing scrapeds

Go to Apify Store
idealista Scraper

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

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

ParseForge Banner

🏠 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 analystsScreen price per m², price drops and days on market across whole cities
Agencies and proptech teamsMonitor competitor stock, new listings and withdrawn ads by zone
Market researchers and data journalistsBuild rent and sale indices from the source most Iberian buyers actually use
Relocation and rental platformsFeed a search with fresh, geo-coded listings and the photos to show them
Valuers and mortgage teamsPull 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+ to G, 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. virtualTourUrls returns the Matterport or Floorfy link, videoUrls the MP4 files, and hasPlan tells 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 country column 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.

FieldTypeDescription
🖼 imageUrlstringMain photo
📌 titlestringAd title as published
🔗 urlstringPublic ad URL
🆔 idstringidealista ad ID
🌍 countrystringES, IT or PT
🔁 operationstringsale or rent
🏠 propertyTypestringpiso, ático, chalet, appartamento, and so on
💶 pricenumberPrice in EUR
💱 currencystringEUR
📆 pricePeriodstringtotal for sale, month for rent
🏷 priceTextstringPrice exactly as displayed
📉 previousPricenumberPrice before the last reduction
📉 priceDropPercentnumberReduction shown by idealista
📐 pricePerSqmnumberPrice divided by built area
📏 sizenumberBuilt area in m²
🛏 roomsnumberBedrooms (rooms on idealista.it)
🛁 bathroomsnumberBathrooms
🏢 floorstringFloor as displayed
🛗 hasLiftstringYes or No
🌤 isExteriorstringYes or No, Spain only
🚗 parkingIncludedstringYes when a parking space is included in the price
📍 locationTextstringNeighbourhood and city
🧭 latitudenumberLatitude from the ad map
🧭 longitudenumberLongitude from the ad map
🔧 conditionstringGood condition, needs renovation, new build
🏗 builtYearnumberYear of construction
🧭 orientationstringOrientation the advertiser declared
🔥 heatingstringHeating type
energyRatingstringA+ to G, decoded from the certificate icon
energyTextstringConsumption line with kWh/m²
🌳 plotSizenumberPlot in m² on houses with land
📄 descriptionstringFull advertiser text, line breaks preserved
👤 advertiserTypestringProfessional or Private
🏢 agencyNamestringAgency or private advertiser name
🌐 agencyUrlstringAgency profile on idealista
🏷 agencyLogostringAgency logo
isFeaturedstringYes on promoted ads
🗓 hasOnlineBookingstringYes when idealista offers online booking
📐 hasPlanstringYes when a floor plan is attached
🎬 hasVideostringYes when a video is attached
🕶 hasVirtualTourstringYes when a 3D or 360 tour is attached
🕰 postedLabelstringRecency label from the card, e.g. 1 hora, 27 ago
🔄 updatedTextstringidealista's last-updated line
🖼 imageCountnumberPhotos in the gallery
🏷 tagsarrayCard tags such as Alquiler de temporada, Lujo, Vistas al mar
featuresarrayEvery feature line from the ad, in the site's language
🖼 imagesarrayFull gallery URLs
🎬 videoUrlsarrayMP4 video files
🕶 virtualTourUrlsarrayMatterport or Floorfy tour links
🔎 searchUrlstringThe search page the ad came from
🕒 scrapedAtstringISO timestamp
errorstringAlways 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 Disclosed means the advertiser left it blank, N/A means 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 scrapersidealista's official API
Sale listings on idealista.comYes, through DataDomeOften rent only, or breaks on challengeYes
Energy ratingLetter, A+ to GIcon class or missingLetter
CoordinatesFrom the ad mapOften missingYes
3D tour and video linksYesRarelyNo
Price drop historyPrevious price and percentageRarelyNo
CountriesSpain, Italy, PortugalUsually SpainSpain, Italy, Portugal
SetupPaste a URLPaste a URLApplication, OAuth keys, monthly quota
Contact phone numbersNot public (login and captcha)Sometimes, from a login sessionNo

🚀 How to use

  1. Create a free Apify account. It comes with $5 of free usage every month.
  2. Open the idealista Scraper on the Apify Store and click Try for free.
  3. 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.
  4. Set Max Items. Free accounts get 10 ads per run as a preview.
  5. Leave Open every ad for full details on for the full 52 fields, or switch it off for a fast card-only pass.
  6. 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.

💡 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.