Idealista Scraper API - Properties & Agency Leads
Pricing
from $0.52 / 1,000 property results
Idealista Scraper API - Properties & Agency Leads
124 fields per listing across Spain, Italy and Portugal. Advertiser phones on 93% of cards, agency emails with the public page they came from, GPS, floor plans and price per m2. Reads past Idealista's 1,500-result ceiling, and every run reports what Idealista claimed against what you got.
Pricing
from $0.52 / 1,000 property results
Rating
0.0
(0)
Developer
Kelopr_bk
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
7
Monthly active users
4 days ago
Last modified
Categories
Share
๐ Idealista Scraper โ Properties & Agency Leads
Turn Idealista searches and property URLs into clean, structured real-estate data from Spain ๐ช๐ธ, Italy ๐ฎ๐น and Portugal ๐ต๐น.
Measured on 15 September 2026, across Madrid, Barcelona, Milan, Lisbon and Valencia, sale and rent:
| ๐ 124 fields on a Fast row | 156 on Full details, 159 on Leads |
| ๐ Phones on 93% of rows | 125 listings sampled; 100% on sale searches |
| ๐ซ No 1,500-result ceiling | page 80 of a Madrid search โ position 2,400 โ returns full rows |
| ๐งพ Honest coverage report | every run states what Idealista claimed against what you got |
That last one matters more than it sounds. A Madrid sale search reports 18,394 properties across 614 pages, and the run summary tells you exactly how many of them you actually received โ no scraper should let you guess.
โจ Pick the package you actually need
| Result package | Best for | What it collects |
|---|---|---|
| โก Fast | Market scans, price analysis, calling lists | Search-card data, prices, location, photos, advertiser and resilient phone enrichment |
| ๐ Full details | Property databases and valuation | Everything in Fast plus full description, features, coordinates, energy data, floor plans and all photos |
| ๐ง Leads | Agency prospecting and CRM enrichment | Everything in Full details plus one public contact lookup per unique professional agency |
The Leads package never guesses email addresses. It only returns an email that is explicitly published on the agency's Idealista profile or verified public website, together with emailSourceUrl.
๐ Start your first run
- Open the Actor's Input tab.
- In What do you want to collect?, choose Fast, Full details or Agency leads.
- Paste an Idealista search URL or individual listing URL.
- Set Max items so the run cannot collect more properties than you need.
- Press Start.
That is enough for most runs. The default settings include phone enrichment and duplicate removal.
Example: 50 fast Madrid listings
{"workflow": "FAST","searchUrls": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/" }],"maxItems": 50}
Example: full details from listing URLs
{"workflow": "FULL_DETAILS","detailUrls": [{ "url": "https://www.idealista.com/en/inmueble/100000001/" },{ "url": "https://www.idealista.pt/en/imovel/30000001/" }],"maxItems": 20}
The IDs above are examples. Replace them with current Idealista listing URLs.
Example: agency lead enrichment
{"workflow": "LEADS","searchUrls": [{ "url": "https://www.idealista.it/en/vendita-case/milano-milano/" }],"maxItems": 25,"maxAgencySitePages": 2}
๐ฏ Inputs without a pasted URL
The Actor can build a search URL for you. Select:
country:ES,ITorPT;operation:SALE,RENTorNEW_DEVELOPMENT;locationSlug: the location part from an Idealista URL, such asmadrid-madrid;- optional
minPriceandmaxPrice.
You can also supply raw listingIds, mixed startUrls, or a datasetId containing property URLs/IDs from an earlier run. URL routing is always automatic: search pages are paginated and individual listings are opened as details. A direct listing URL necessarily returns its available full property record, even when the default Fast workflow is selected.
๐บ๏ธ Search coverage
Idealista limits the number of accessible result pages for broad searches. Enable Split by price range when you need more than the visible cap.
The Actor first opens the original search once. It creates price segments only if that search actually exceeds maxPagesPerSearch, stops planning as soon as maxItems is reached, and deduplicates every property by country and ID. Small or empty searches are never expanded into dozens of unnecessary requests.
Coverage information is saved in the run's OUTPUT record instead of the property dataset, so it remains visible without being counted as a property result. Check:
reportedTotalโ listings reported by Idealista;rangeCountโ finalized price segments;itemsPushedโ property rows saved;truncatedโ whether a page, item or spending limit prevented complete coverage.
๐ Phone reliability
Available advertiser numbers are included in every workflow. Each result identifies the phone source and whether a number was returned.
Useful fields:
phone,phoneFormatted,phoneLocal,phonePrefix;secondaryPhone;phoneSource;phoneEnrichmentStatus;phoneRequiresLoginwhen Idealista itself does not reveal the number.
No scraper can manufacture a number that the advertiser does not publish. Empty values are accompanied by a status instead of fabricated data.
๐ Results you can use immediately
Open Properties for a compact overview with a photo, price, size, rooms, location and contact. Switch its table view to Prices, Contacts, Location, Research, Details or Source fields for focused analysis. Agencies contains one row per discovered agency in Leads runs. Run summary explains the saved counts and coverage.
| Research field | What it tells you |
|---|---|
pricePerSqmCalculated | Listing price divided by the published area |
pricePerSqmDifference | Difference from the sourceโs own price-per-area value |
pricePerBedroom | Listing price divided by the published bedroom count |
usableAreaRatio | Usable area as a share of the published total area |
priceReductionPercent | Reduction where the source publishes both prices |
daysSinceUpdate | Days since the sourceโs last update, not listing age |
contactChannels | Available phone, email, website and chat channels |
contactSources | Contact values with their source references |
These calculations use the collected facts; they are not appraisals or price predictions. Missing inputs never become invented zeroes.
๐บ๏ธ The market picture, built from your own run
Every run's Run summary now carries marketByArea: one entry per district or municipality it collected, with the median price, the median price per mยฒ, the price range and the median size โ plus basedOn, which states how many listings the figure rests on so you can judge whether to trust it.
{"area": "Goya","city": "Madrid","listings": 23,"medianPrice": 1190000,"minPrice": 395000,"maxPrice": 3390000,"medianPricePerSqm": 8420.5,"medianSizeM2": 142,"basedOn": "23 listing(s) in this run"}
It costs nothing extra: it is computed from the rows you already collected, and it describes those rows โ not the whole market, and not a valuation. Areas with fewer than four listings in the run are left out rather than reported on thin evidence.
๐ฆ Main output fields
Every dataset row represents one real property. Error diagnostics and coverage reports are kept separately in OUTPUT.
Identity and pricing
propertyId, url, title, subtitle, operation, typology, price, priceValue, currency, priceByAreaValue, previousPriceValue, priceDropAmount, priceDropPercent
Property details
sizeM2, usableAreaM2, plotAreaM2, terraceAreaM2, bedrooms, bathrooms, floorNumber, condition, occupancyStatus, yearBuilt, communityFeesValue, hasLift, hasTerrace, hasBalcony, hasAirConditioning, heatingType
Location and energy
address, neighborhood, district, city, province, country, latitude, longitude, energyConsumptionValue, energyEmissionsValue
Media
thumbnail, photos, photoCount, floorPlanUrls, hasVideo, videoUrl, has3DTour, virtualTourUrl
If a full page cannot be collected, a recovered record is identified by detailFetched: false and a source status. Fields that could not be confirmed remain empty. A full-details add-on is charged only after the property page was collected successfully.
Advertiser and agency leads
advertiserName, advertiserType, advertiserUrl, advertiserLogo, contactName, licenseCode, phone, secondaryPhone, email, emails, emailStatus, emailSourceUrl, agencyWebsite, agencyAddress, agencyPhones, agencySocialUrls, agencyClientSince, agencyListingCount, agencyPublicationQuality
Trimmed example
{"_recordType": "property","propertyId": "100000001","title": "Example apartment for sale","priceValue": 450000,"currency": "EUR","sizeM2": 90,"bedrooms": 2,"city": "Example City","advertiserName": "Example Property Agency","phone": "+34 600 000 000","phoneEnrichmentStatus": "available","email": "hello@example-agency.test","emailStatus": "found_on_public_agency_website","emailSourceUrl": "https://example-agency.test/contact","url": "https://www.idealista.com/en/inmueble/100000001/"}
All people, companies, contacts and IDs in this example are fictional.
โ Safe behavior
- Invalid input finishes cleanly with
status: INVALID_INPUTand a precise explanation inOUTPUT. - A bad URL does not erase valid results from the same run.
maxItemscaps both Search and Detail collection;maxDetailUrlscan apply a stricter Detail-only cap.- User spending limits are checked after every saved property and configured value event.
- Memory is constrained to 256โ1024 MB, with 512 MB as the default.
- Collection stops when the selected spending allowance is reached or the source stops producing new results.
โก Standby: call it like an API
Turn the Actor on in Standby and it keeps a warm container waiting, so a request is answered in the time the scrape itself takes rather than the time a container needs to boot. The query string takes the same names as the Input tab:
GET https://<your-standby-url>/?searchUrls=https://www.idealista.com/en/venta-viviendas/madrid-madrid/&maxItems=20GET https://<your-standby-url>/?workflow=LEADS&searchUrls=<url>&maxItems=30GET https://<your-standby-url>/?listingIds=106387165,105234111&country=ES
The answer is {"count": N, "items": [...]} with the same rows the dataset gets. GET /health returns a readiness line and the workflow names. Comma-separate any list field.
๐บ๏ธ Search an area on the map
Idealista keeps map-drawn searches behind an encoded parameter of its own, so the shape is applied to the results instead: the search runs over the surrounding place, and anything outside your area is dropped before it is saved โ so you are never charged for it.
A circle:
{"searchUrls": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/" }],"centreLatitude": "40.4168","centreLongitude": "-3.7038","radiusKm": "2"}
Every saved row then carries distanceFromCentreKm, so the nearest properties sort to the top.
A polygon โ three corners or more, as JSON or as plain lat,lng pairs:
{ "areaPolygon": "[[40.40,-3.72],[40.44,-3.72],[40.44,-3.68],[40.40,-3.68]]" }
A listing whose coordinates Idealista withholds is kept rather than dropped: a missing latitude is not evidence the property is outside your area. The run summary's areaFilter says how many rows were kept, how many fell outside and how many had no coordinates to judge.
๐ Choose your export format
The default outputFormat: "extended" keeps the existing user-friendly fields, including formatted price, numerical priceValue and a readable features list.
Choose outputFormat: "idealista" for integrations expecting a numerical price, propertyCode, size, rooms, lowercase country codes and the source-native features object when supplied. displayPrice and displayFeatures retain the readable versions. Source details are also available as _details when collected. Missing source fields remain missing.
Download JSON for nested source objects, or select one of the focused views before exporting CSV or Excel.
โ๏ธ API compatibility
New integrations only need the workflow field:
FASTFULL_DETAILSLEADS
Older saved tasks using mode, dataLevel, includeDetails and includeAgencyContacts remain supported.
Detailed property and unique-agency contact work are implemented as separate chargeable add-on events, allowing richer packages to have transparent prices without making Fast searches expensive.
Export your results as JSON, CSV, Excel or through the Apify API.