Idealista Real Estate Scraper (Spain Property Listings)
Pricing
from $18.91 / 1,000 listing results
Idealista Real Estate Scraper (Spain Property Listings)
Scrape Idealista property listings by search URL, location or listing URL. Get price, price per m2, rooms, size, floor, features, geo, energy rating, owner-direct vs agency and agency name. Export to JSON, CSV or Excel.
Pricing
from $18.91 / 1,000 listing results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Idealista Real Estate Scraper (Spain Property Listings)
Here is one real result, with the fields the actor returns when the detail add-on is on:
{"listingId": "112153132","title": "Piso en Calle de las Infantas, Chueca-Justicia, Madrid","listingUrl": "https://www.idealista.com/inmueble/112153132/","operation": "venta","propertyType": "piso","priceAmount": 1000000,"priceCurrency": "EUR","pricePerM2": 7407,"rooms": 2,"bathrooms": 2,"sizeM2": 135,"floor": "4ª planta exterior con ascensor","latitude": 40.4199231,"longitude": -3.6994614,"locationText": "Chueca-Justicia, Madrid","ownerDirect": false,"isProfessional": true,"agencyName": "Gilmar Centro","agencySlug": "gilmar-centro","energyCertificate": "C","features": ["135 m² construidos", "2 habitaciones", "2 baños", "Terraza", "Armarios empotrados", "Aire acondicionado"],"featureCount": 13,"description": "Atractivo ático dúplex de 135 m² construidos, situado en una cuarta planta exterior con ascensor, en pleno barrio de Justicia...","imageCount": 40,"publishedDate": "17 de agosto","aiHighlights": ["Ático dúplex con terraza privada", "Ubicación en el corazón de Justicia"],"aiCondition": "good","aiTargetBuyer": "young professionals or couples","aiPricePerM2Assessment": "in line with prime central Madrid","source": "idealista.com","observedAt": "2026-08-20T03:03:45.019Z"}
The most complete Idealista scraper available. It returns every listing field on the search results (price, price per m2, rooms, size, floor, property type, the owner-direct vs agency signal, agency name and image), plus an optional detail pass that adds geo coordinates, the full feature list, energy certificate, bathrooms, all images, the full description and the agency profile, plus an optional AI summary, and gives you filters to target exactly the properties you want.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
Point the actor at an Idealista search results URL (the most precise option: apply any filters you like on the site, then copy the URL), or give it a location slug and an operation, or a list of individual listing URLs. It paginates the search, collects every property, and writes one normalized record per listing to the run dataset. Each listing comes back with its price, price per m2, rooms, size in m2, floor, detected property type, the private-owner vs agency signal, the agency name and the main image.
Two optional add-ons enrich each listing further:
- Contact and full detail enrichment opens each listing page and adds geo coordinates, the complete feature list, energy certificate, bathroom count, every image, the full description, the ad update date, the agency profile and a phone when the page shows one. This is the data most buyers and analysts want. It is off by default and charged only when real detail is returned.
- AI listing summary produces buyer-facing highlights, a condition assessment, the ideal target buyer and a price-per-m2 value assessment. Off by default, charged only when a usable summary is returned.
A standout field is ownerDirect: it flags listings posted by a private owner (particular) rather than an agency, so you can target owner-direct deals that competitors do not surface. Missing values are returned as null, never invented. Anti-bot handling is fully internal, so you do not configure proxies or supply any login.
Quickstart
Open the actor, paste this into the input, and press Run. It returns 10 properties for sale in Madrid.
{"startUrl": "https://www.idealista.com/venta-viviendas/madrid-madrid/","maxResults": 10}
To get geo, full features, energy rating and an AI summary, add the two add-ons (a paid Apify plan is required for add-ons):
{"startUrl": "https://www.idealista.com/alquiler-viviendas/barcelona-barcelona/","maxResults": 50,"minPrice": 900,"maxPrice": 2000,"minRooms": 2,"contactDetails": true,"aiListingSummary": true}
Input reference
| Field | Type | Required | Example | Description |
|---|---|---|---|---|
startUrl | string | one of these | https://www.idealista.com/venta-viviendas/madrid-madrid/ | An Idealista search results URL. The most precise way to target listings; pagination is followed automatically. |
location | string | one of these | barcelona-barcelona | Convenience alternative to startUrl: an Idealista location slug, combined with operation to build the search. Ignored when startUrl is set. |
operation | enum | no | venta | venta (buy) or alquiler (rent). Used with location. |
propertyType | enum | no | piso | Keep only this type: piso, casa, chalet, atico, duplex, estudio, apartamento, loft. Empty for all. |
minPrice | integer | no | 900 | Keep only listings priced at or above this amount in euros. |
maxPrice | integer | no | 2000 | Keep only listings priced at or below this amount in euros. |
minRooms | integer | no | 2 | Keep only listings with at least this many rooms. |
listingUrls | array of strings | one of these | ["https://www.idealista.com/inmueble/112153132/"] | Individual listing URLs to scrape directly with full detail. |
maxResults | integer | no | 10 | Maximum listings to collect across the whole run. Free plans are capped at 10. |
contactDetails | boolean | no | false | Paid add-on, off by default. Fetch each listing page for geo, full features, energy rating, bathrooms, all images, full description, agency profile and phone. Charged only when real detail is returned. |
aiListingSummary | boolean | no | false | Paid add-on, off by default. AI highlights, condition, target buyer and price-per-m2 assessment. Charged only when a usable summary is returned. |
Provide at least a startUrl, a location, or one or more listingUrls. The add-ons are disabled on free Apify plans.
Output reference
One dataset item per listing. Types: string, number, integer, boolean, string[], or null when a value is absent.
| Field | Type | Description |
|---|---|---|
listingId | string | Idealista listing id. |
title | string | Listing title. |
listingUrl | string | Full listing page URL. |
operation | string | venta (sale) or alquiler (rent). |
propertyType | string | Detected property type (piso, casa, chalet, atico, and so on). |
priceAmount | integer | Price in euros. |
priceCurrency | string | Always EUR. |
pricePerM2 | integer | Price per square metre in euros, when shown. |
rooms | integer | Number of rooms (habitaciones). |
bathrooms | integer | Number of bathrooms (detail add-on). |
sizeM2 | integer | Built size in square metres. |
floor | string | Floor or storey text, for example 4ª planta exterior con ascensor. |
latitude | number | Latitude (detail add-on). |
longitude | number | Longitude (detail add-on). |
locationText | string | Neighborhood and city text (detail add-on). |
ownerDirect | boolean | true when listed by a private owner, not an agency. |
isProfessional | boolean | true when listed by a professional agency. |
agencyName | string | Agency or advertiser name. |
agencySlug | string | Agency profile slug (detail add-on). |
phone | string | Contact phone when the page shows one (detail add-on). |
energyCertificate | string | Energy certificate rating A to G (detail add-on). |
features | string[] | Full feature list such as terraza, ascensor, aire acondicionado (detail add-on). |
featureCount | integer | Number of features captured (detail add-on). |
descriptionSnippet | string | Short description from the search card. |
description | string | Full description (detail add-on). |
image | string | First listing image URL. |
images | string[] | All listing image URLs (detail add-on). |
imageCount | integer | Number of images captured (detail add-on). |
publishedDate | string | Ad updated date (detail add-on). |
aiHighlights | string[] | AI buyer-facing highlights (AI add-on). |
aiCondition | string | AI condition assessment (AI add-on). |
aiTargetBuyer | string | AI ideal target buyer (AI add-on). |
aiPricePerM2Assessment | string | AI price-per-m2 value assessment (AI add-on). |
searchUrl | string | Search URL that produced this listing. |
source | string | Always idealista.com. |
observedAt | string | ISO 8601 timestamp when the record was collected. |
error | string | null on success. On a failed run a single item with a populated error field is written instead. |
Run via API and CLI
Start a run and read the dataset. Replace <TOKEN> with your Apify API token.
Run synchronously and get dataset items in one call:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~idealista-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrl":"https://www.idealista.com/venta-viviendas/madrid-madrid/","maxResults":25}'
Start a run asynchronously with the paid add-ons:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~idealista-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"startUrl":"https://www.idealista.com/alquiler-viviendas/valencia-valencia/","maxResults":100,"contactDetails":true,"aiListingSummary":true}'
Apify CLI:
apify call scrapers_lat/idealista-scraper \--input '{"location":"sevilla-sevilla","operation":"venta","maxResults":50,"minRooms":3}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
<DATASET_ID> is returned as defaultDatasetId in the run object. Use offset and limit to page through large result sets.
Billing and limits
- Pay per result. You are charged one
resultevent per listing returned. A one-timeactor-startevent is charged when a run begins. - Add-ons are opt-in. Contact and full detail enrichment (
contact_details) and the AI summary (ai_listing_summary) are off by default. Each is charged only when it produces data:contact_detailswhen real detail is returned,ai_listing_summarywhen the AI returns a usable summary. Both are disabled on free Apify plans. - No charge on failure. If a run errors or matches nothing, the actor writes a single item with a populated
errorfield and does not chargeresultor any add-on. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 listings per run and cannot use the paid add-ons. Upgrade for higher
maxResults. - Tiered pricing. Per-event prices step down across Apify plan tiers. See the pricing tab for the current rates.
FAQ and troubleshooting
A run returned 0 listings. Why?
The search URL or location matched nothing, or the location slug was not recognized. Copy a working search URL from your browser, or use the provincia-municipio slug format such as madrid-madrid. Zero-result runs are not charged.
How do I filter exactly like on the site?
Apply your filters on idealista.com, then paste the resulting URL into startUrl. The actor also applies minPrice, maxPrice, minRooms and propertyType on top, so you can combine a broad URL with precise limits.
How do I find owner-direct (particular) listings?
Every record includes ownerDirect. Filter the output for ownerDirect: true to get listings posted by private owners rather than agencies.
Why are geo, features and energy rating empty on some records?
Those fields come from the detail page and are only filled when contactDetails is enabled. Without the add-on you still get price, price per m2, rooms, size, floor, type, the owner-direct signal and the agency name from the search results.
Why is phone empty?
Idealista often hides the contact phone behind a click, so it is not always present in the page. When it is shown, the detail add-on captures it. Otherwise the agency name and profile let you reach the advertiser.
Do I need a proxy or an Idealista login? No. Anti-bot handling is fully internal. You never configure a proxy or supply any cookies or credentials.
Is this an official Idealista tool? No. This actor is independent and not affiliated with Idealista. It reads only data that is publicly visible on Idealista search and listing pages.
Related scrapers
- Adondevivir Scraper: real estate listings for Latin America.
- Real estate and lead scrapers at scrapers.lat: property and business data across platforms.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US, European and Latin American public platforms: company registries, government data, finance, real estate, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with Idealista. Accesses only publicly available Idealista data. Use in accordance with Idealista's terms of service.
