Idealista Scraper avatar

Idealista Scraper

Pricing

from $2.20 / 1,000 listings

Go to Apify Store
Idealista Scraper

Idealista Scraper

Scrape property listings from Idealista.com — search results and full detail pages with photos, features, location, and optional contact phones.

Pricing

from $2.20 / 1,000 listings

Rating

0.0

(0)

Developer

Farhan Ali

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Idealista Scraper creates a structured dataset of property listings collected from Idealista.com, the real estate portal serving Spain, Italy, and Portugal. Each dataset item represents one property and can include price, size, bedrooms, photos, amenities, energy rating, agency details, and coordinates, with optional full detail pages and advertiser phone numbers. Query the source by Idealista search URL or location, filter by operation and property type, control the result limit with maxItems and maxPages, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, or other supported formats.

Dataset at a glance

PropertyValue
Sourceidealista.com (Spain, Italy, Portugal)
Record unitOne property listing, with optional nested detail and contact fields
Input methodsIdealista URL (startUrls) or location search (searchQueries) with operation and property type
Main identifierspropertyId, listing url
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML, HTML (Apify dataset exports)
Update modelFresh records per Actor run
Pricing$2.50 per 1,000 listings; +$2.50 per 1,000 for details; +$2.50 per 1,000 for contact phones

Coverage and available records

The Actor collects properties from public Idealista pages using one of two entry points:

  • URL-based: Pass Idealista search or listing URLs in startUrls. When set, location search and buy/rent filters are ignored.
  • Location-based: Pass place names (for example "Madrid" or "malaga teatinos") in searchQueries, combined with an operation (buy or rent) and a propertyType.

Supported property types: homes, newHomes, rooms, holiday, garages, storageRooms, offices, commercial, transfers, land, and buildings.

Record types and limits:

  • Listing-level records are always collected: ID, URL, title, price, price per m², address, size, bedrooms, bathrooms, floor, thumbnail, and coordinates.
  • Detail-page fields are conditional: photos, amenities, energy rating, agency name and URL, and full description are returned when scrapeListingDetails is enabled.
  • Contact fields are conditional: advertiser phone numbers are returned only when includeContactPhones is enabled.
  • Result cap: maxItems limits the number of listings collected (0 means unlimited); maxPages limits search-result pages scanned per search URL.

Known exclusions: rooms and holiday stays are rent-only, and new homes and transfers are buy-only (Idealista's own category rules). Phone numbers depend on a protected endpoint and may be absent even when enabled. Each run captures page state at run time; no historical snapshots are stored.

Data dictionary

Field names below match dataset record JSON properties exactly. Fields marked conditional appear only when the corresponding input toggle is enabled.

FieldTypeNullableDescriptionExample
propertyIdstringNoIdealista listing identifier; best stable deduplication key110788250
urlstringNoCanonical listing URLhttps://www.idealista.com/inmueble/110788250/
titlestringNoListing titlePiso en Calle Poetisa Alfonsina Domínguez, 3, El Consul - El Romeral, Málaga
pricenumberYesAsking price in EUR469000.0
pricePerSqmnumberYesPrice per m² in EUR4303.0
addressstringYesStreet addressPiso en venta en Calle Poetisa Alfonsina Domínguez, 3
featuresstring[]YesSearch-card feature tags["Garaje incluido", "2 hab.", "109 m²"]
bedroomsnumberYesNumber of bedrooms2
bathroomsnumberYesNumber of bathrooms2
sqmnumberYesBuilt area in m²109.0
floorstringYesFloor description6ª planta exterior con ascensor
thumbnailstringYesMain photo URLhttps://img4.idealista.com/...
imagesstring[]YesPhoto URLs (conditional — scrapeListingDetails)["https://img4.idealista.com/...", ...]
amenitiesstring[]YesDetail-page amenity list (conditional — scrapeListingDetails)["109 m² construidos", "2 habitaciones", "Terraza"]
agencystringYesAdvertiser agency nameNorando Homes
agencyUrlstringYesAgency profile URLhttps://www.idealista.com/pro/norando-homes/
phoneNumbersarrayYesAdvertiser phone numbers (conditional — includeContactPhones)[]
latitudenumberYesMap latitude36.7246144
longitudenumberYesMap longitude-4.4862934
energyRatingstringYesEnergy certificate rating textConsumo: 1 kWh/m² año
searchUrlstringYesSource search URL that produced the recordhttps://www.idealista.com/venta-viviendas/malaga/teatinos
scrapedAtstringYesCapture timestamp (ISO 8601, UTC)2026-08-19T14:00:26.019791+00:00

Example dataset record

Real record produced with a location search (searchQueries: ["malaga teatinos"]), operation buy, property type homes, with listing details enabled.

{
"propertyId": "110788250",
"url": "https://www.idealista.com/inmueble/110788250/",
"title": "Piso en Calle Poetisa Alfonsina Domínguez, 3, El Consul - El Romeral, Málaga",
"price": 469000.0,
"pricePerSqm": 4303.0,
"address": "Piso en venta en Calle Poetisa Alfonsina Domínguez, 3",
"features": ["Garaje incluido", "2 hab.", "109 m²", "6ª planta exterior con ascensor"],
"bedrooms": 2,
"bathrooms": 2,
"sqm": 109.0,
"floor": "6ª planta exterior con ascensor",
"thumbnail": "https://img4.idealista.com/blur/591_420_mq/0/id.pro.es.image.master/b3/e3/51/1455585508.jpg",
"images": ["https://img4.idealista.com/blur/WEB_DETAIL_TOP-L-L/0/..."],
"amenities": ["109 m² construidos", "2 habitaciones", "Terraza", "Piscina"],
"agency": "Norando Homes",
"agencyUrl": "https://www.idealista.com/pro/norando-homes/",
"phoneNumbers": [],
"latitude": 36.7246144,
"longitude": -4.4862934,
"energyRating": "Consumo: 1 kWh/m² año",
"searchUrl": "https://www.idealista.com/venta-viviendas/malaga/teatinos",
"scrapedAt": "2026-08-19T14:00:26.019791+00:00"
}

The record above was produced with this input:

{
"searchQueries": ["malaga teatinos"],
"operation": "buy",
"propertyType": "homes",
"maxItems": 100,
"maxPages": 5,
"scrapeListingDetails": true,
"includeContactPhones": false,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "ES" }
}

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
startUrlsarray (requestListSources)No*[]Idealista search or listing URLsURL-based entry point; overrides location search when set
searchQueriesarray (stringList)No*["Madrid"]Location text (e.g. "Madrid", "malaga teatinos")Location search used only when startUrls is empty
operationstringNobuybuy, rentBuy or rent filter (location search only)
propertyTypestringNohomeshomes, newHomes, rooms, holiday, garages, storageRooms, offices, commercial, transfers, land, buildingsListing category (location search only)
maxItemsintegerNo00 (unlimited) or positive integerMaximum listings to collect
maxPagesintegerNo00 (unlimited) or positive integerMaximum search pages per search URL
scrapeListingDetailsbooleanNotruetrue / falseFetch full detail pages (charged as listing details)
includeContactPhonesbooleanNofalsetrue / falseFetch advertiser phone numbers (charged as contact details)
requestDelayMsintegerNo2500 or positive integerDelay between listing fetches in milliseconds
localestringNoeses, en, it, ptSite language for location suggestions
proxyConfigurationobjectNoApify proxy, RESIDENTIAL, country ESApify proxy groups or custom proxiesResidential proxies are required; Spanish (ES) exits work best

* Provide either startUrls or searchQueries — at least one source is required.

Minimal request:

{ "searchQueries": ["Madrid"], "operation": "buy", "propertyType": "homes" }

Advanced request (location search with details and contact phones):

{
"searchQueries": ["barcelona eixample"],
"operation": "rent",
"propertyType": "homes",
"maxItems": 1000,
"maxPages": 20,
"scrapeListingDetails": true,
"includeContactPhones": true,
"requestDelayMs": 800,
"locale": "es",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "ES" }
}

Retrieve the data through the API

The Actor runs on the Apify platform, so there is no server to host and no crawling infrastructure to maintain.

  1. Start the Actor with a JSON input (console or API).
  2. Wait for the run to finish, or use a synchronous endpoint if you want the response inline.
  3. Retrieve items from the run's default dataset.
  4. Paginate or export the dataset.

Python example:

from apify_client import ApifyClient
client = ApifyClient("YOUR-APIFY-TOKEN")
run_input = {
"searchQueries": ["malaga teatinos"],
"operation": "buy",
"propertyType": "homes",
"maxItems": 100,
"scrapeListingDetails": True,
}
run = client.actor("datascrapers/idealista-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["propertyId"], item["price"], item["pricePerSqm"])

Apify generates ready-to-run Python, JavaScript, and cURL examples on the Actor's API tab. Do not put a real API token in shared code or URLs.

Data quality and record handling

  • Conditional fields: images, amenities, and energy rating are present only when scrapeListingDetails is enabled; phoneNumbers is populated only when includeContactPhones is enabled and the contact endpoint succeeds.
  • Source changes: Idealista page structure and values can change; unreadable fields are returned as null rather than fabricated.
  • Deduplication: each run appends fresh records; the Actor does not deduplicate listings across runs. Use propertyId as the stable key and filter repeated runs against previously stored IDs.
  • Rate limits: Idealista is protected by anti-bot controls and frequently challenges datacenter traffic. Residential proxies with Spanish exit nodes are required for consistent coverage; blocked requests are not charged.
  • Normalization: prices are returned as numbers in EUR; scrapedAt is an ISO 8601 UTC timestamp. phoneNumbers is an empty array when no phone was retrieved.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL / SupabaseDataset API poll or webhook consumerStore property inventory alongside price history
Google SheetsApify Google Sheets integrationShare market shortlists with agents
CRM (HubSpot, Salesforce)Webhook on run completionPush new listings into lead pipelines
S3 / cloud storageScheduled export via Apify scheduler + integrationArchival of market snapshots

Pricing and cost examples

The Actor uses pay-per-event pricing with three chargeable events, all billed per 1,000 events:

EventTriggerRate
ListingEvery listing record pushed to the dataset$2.50 per 1,000
Listing detailsscrapeListingDetails enabled, detail page fetched$2.50 per 1,000
Contact detailsincludeContactPhones enabled, phone retrieved$2.50 per 1,000

Example costs:

RecordsConfigurationEstimated base cost
1,000Listing only$2.50
10,000Listing only$25.00
1,000Listing + details$5.00
1,000Listing + details + contact phones$7.50

Apify paid plans reduce the per-1,000 rate (for example $2.20 per 1,000 at the Gold tier). Failed or blocked extractions are not charged. Compute units consumed by the run are billed by your Apify plan. Estimates depend on the verified pricing model and the options selected for the run.

Limitations and responsible data use

  • The Actor collects publicly accessible data from Idealista pages only.
  • Field availability depends on what Idealista renders at run time; some values can be null or missing, and site changes can alter fields.
  • Phone numbers depend on a protected endpoint and may be absent even when enabled.
  • The Actor does not provide historical snapshots unless you store them yourself.
  • Large runs require residential proxies; without them, coverage may degrade due to anti-bot controls.
  • You are responsible for compliance with Idealista's terms of service, applicable privacy law, and any contractual obligations before using the data.

Dataset questions

What does one dataset item represent?

One property listing from Idealista. Detail-page fields (images, amenities, energy rating) are nested inside the same record, so a listing with full details still produces a single dataset item.

Which field should I use as a unique identifier?

propertyId is the stable Idealista listing identifier and is the recommended deduplication key. The url (canonical listing URL) is a reasonable secondary key.

Are fields nullable or conditional?

Yes. images, amenities, and energyRating exist only when scrapeListingDetails is enabled; phoneNumbers exists only when includeContactPhones is enabled. Within available records, fields that Idealista does not render (for example floor or pricePerSqm) are returned as null.

Can I retrieve the records as CSV or JSON?

Yes. The dataset can be exported as JSON, CSV, Excel, XML, or HTML from the Apify Console, and queried through the Dataset API.

Does the Actor return historical data?

No. Each run captures the state of the pages at run time. To track price changes over time, schedule repeated runs and store the outputs yourself.

What counts as a billable result?

Three pay-per-event charges apply: a listing charge for every record ($2.50 per 1,000), a listing-details charge for each detail page fetched ($2.50 per 1,000), and a contact-details charge for each phone retrieved ($2.50 per 1,000). A listing-only run incurs only the listing charge.

Why am I getting zero results or blocks?

Idealista is protected by anti-bot controls that challenge datacenter traffic. Keep the default residential proxy configuration with Spanish (ES) exit nodes, and increase requestDelayMs or reduce concurrency if you see repeated blocks in the run log.

  • Zoopla Scraper — UK property listings that can be compared with Idealista for cross-market pricing research.
  • Apartments Scraper — US rental listings useful alongside European property market analysis.
  • Redfin Scraper — US property listings and market signals for comparative real estate datasets.

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.