Idealista Scraper API - Properties & Agency Leads avatar

Idealista Scraper API - Properties & Agency Leads

Pricing

from $0.52 / 1,000 property results

Go to Apify Store
Idealista Scraper API - Properties & Agency Leads

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

Kelopr_bk

Maintained by Community

Actor stats

0

Bookmarked

38

Total users

7

Monthly active users

4 days ago

Last modified

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 row156 on Full details, 159 on Leads
๐Ÿ“ž Phones on 93% of rows125 listings sampled; 100% on sale searches
๐Ÿšซ No 1,500-result ceilingpage 80 of a Madrid search โ€” position 2,400 โ€” returns full rows
๐Ÿงพ Honest coverage reportevery 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 packageBest forWhat it collects
โšก FastMarket scans, price analysis, calling listsSearch-card data, prices, location, photos, advertiser and resilient phone enrichment
๐Ÿ  Full detailsProperty databases and valuationEverything in Fast plus full description, features, coordinates, energy data, floor plans and all photos
๐Ÿ“ง LeadsAgency prospecting and CRM enrichmentEverything 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

  1. Open the Actor's Input tab.
  2. In What do you want to collect?, choose Fast, Full details or Agency leads.
  3. Paste an Idealista search URL or individual listing URL.
  4. Set Max items so the run cannot collect more properties than you need.
  5. 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, IT or PT;
  • operation: SALE, RENT or NEW_DEVELOPMENT;
  • locationSlug: the location part from an Idealista URL, such as madrid-madrid;
  • optional minPrice and maxPrice.

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;
  • phoneRequiresLogin when 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 fieldWhat it tells you
pricePerSqmCalculatedListing price divided by the published area
pricePerSqmDifferenceDifference from the sourceโ€™s own price-per-area value
pricePerBedroomListing price divided by the published bedroom count
usableAreaRatioUsable area as a share of the published total area
priceReductionPercentReduction where the source publishes both prices
daysSinceUpdateDays since the sourceโ€™s last update, not listing age
contactChannelsAvailable phone, email, website and chat channels
contactSourcesContact 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_INPUT and a precise explanation in OUTPUT.
  • A bad URL does not erase valid results from the same run.
  • maxItems caps both Search and Detail collection; maxDetailUrls can 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=20
GET https://<your-standby-url>/?workflow=LEADS&searchUrls=<url>&maxItems=30
GET 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:

  • FAST
  • FULL_DETAILS
  • LEADS

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.