Idealista Scraper šŸ’° $0.60/1K – Spain, Portugal, Italy & France avatar

Idealista Scraper šŸ’° $0.60/1K – Spain, Portugal, Italy & France

Pricing

from $0.60 / 1,000 listing results

Go to Apify Store
Idealista Scraper šŸ’° $0.60/1K – Spain, Portugal, Italy & France

Idealista Scraper šŸ’° $0.60/1K – Spain, Portugal, Italy & France

From $0.60/1K. Scrape Idealista listings in Spain, Portugal, Italy & France: price, €/m², size, rooms, GPS, photos, agent phones, price drops. Sear ch by city, postal code, radius, agency or any search URL. No 1,500-result cap, no duplicates. Daily monitoring of new listings.

Pricing

from $0.60 / 1,000 listing results

Rating

1.4

(2)

Developer

LukÔŔ Širhal

LukÔŔ Širhal

Maintained by Community

Actor stats

13

Bookmarked

784

Total users

14

Monthly active users

a day ago

Last modified

Share

Idealista Scraper — Spain, Portugal, Italy & France

Scrape property listings from idealista.com, idealista.pt, idealista.it and idealista.fr: homes, rooms, holiday rentals, offices, shops, garages and land, for sale or rent. Get price, price per m², size, rooms, GPS coordinates, photos, agent phone numbers, price drops and more, as JSON, CSV or Excel. From $0.60 per 1,000 results, and you pay only for results.

Idealista has no public API. This Actor uses the same API as the Idealista mobile app, so it is fast and returns structured data, not scraped HTML.

What you can do

  • Search any way you like — by city, district or postal code (several in one run), a radius around a point, one agency's listings, listing IDs, or any Idealista search URL with its filters, including map views and drawn areas.
  • Get every result, not just 1,500 — the Idealista website stops at 1,500 results per search. Big searches are split by price automatically, so you get the whole market with no duplicates.
  • Monitor new listings — schedule a daily run with monitoringMode and get, and pay for, only listings that are new since the last run.
  • Find deals — each listing includes priceDown and priceDownPercentage; sort by biggest price drop or by €/m².
  • Generate leads — agency name, contact name and phone number on every listing that shows one.
  • Filter like on the website — price, size, bedrooms, bathrooms, home type, condition, floor, energy rating, furnished, auctions, published within, and features such as pool, terrace, lift, sea views or pets allowed.
  • Fetch full details — with fetchDetails, each result also gets its description and energy certificate from the property page.

Why this scraper

  • Each property is charged once — even when it shows up in several searches, price bands or start URLs in the same run.
  • No platform costs — you pay only per result. maxItems caps how much a run can cost.
  • Results in your language — titles and labels in English, Spanish, Catalan, Portuguese, Italian, French, German or Dutch.

Note: Due to Idealista's privacy policy, exact property locations may be hidden. In those cases the scraper returns the map center coordinates accessible from the property detail.

Note: description is returned in the language the advertiser wrote it in (usually Spanish), even though titles and other labels come back in English.

Pricing

This Actor uses pay-per-event billing — you are not charged for Apify platform usage (compute, proxy bandwidth), only for the results you get.

Prices per 1,000 results, by Apify plan:

EventFreeBronzeSilverGold+When it's charged
list-result$1.00$0.80$0.65$0.60One per property returned from a search (district or a search startUrl) with fetchDetails disabled
detail-result$2.50$1.80$1.40$1.20One per property fetched from its detail page — every result when fetchDetails is enabled, plus any direct property startUrl

Each property is charged once: with fetchDetails: true search results are not pushed on their own, so you pay detail-result only — never both events for the same property.

Detail results cost more because each one needs its own extra API request through residential proxies, on top of the search request. If you only need the fields listed in the search response (see the note under Example Result), leave fetchDetails off and pay the list-result rate.

Use maxItems to cap how many results — and therefore how much — a run can produce.

Input Parameters

FieldTypeRequiredDescription
countryStringāœ“es (Spain), pt (Portugal), it (Italy), fr (France). Used with district; a startUrl always uses the country of its domain.
operationStringāœ“sale or rent
proxyObjectāœ“Proxy configuration — RESIDENTIAL proxies required
districtStringLocation name or postal code to search, e.g. Madrid or 28013. Required if no startUrl, radius search, agency or propertyIds provided.
districtsArrayMore locations or postal codes searched in the same run, e.g. ["Barcelona", "28013"].
postalCodesArrayPostal codes searched in the same run, e.g. ["28013", "08001"] — same as adding them to districts.
agencyStringOnly one agency's listings: its short name or page URL (https://www.idealista.com/pro/<agency>/). Agency page URLs also work as a startUrl.
propertyIdsArrayListing IDs to fetch directly (billed as detail-result), on the country site.
propertyTypeStringhomes (default), newDevelopments, bedrooms, vacationRentals (rent only), offices, premises, transfers, garages, lands, storageRooms, buildings
startUrlArrayList of Idealista property detail or search URLs from any supported domain (idealista.com, .pt, .it, .fr), including map-view (/mapa) and drawn-area URLs (/areas/...?shape=...)
maxItemsIntegerMaximum number of results for the whole run (across all districts, URLs and price bands). Leave empty for all results.
endPageIntegerLast search page per search, 50 results per page (default and maximum 50)
splitByPriceBooleanOne Idealista search returns at most 2,500 listings. When a search has more, it is split into price bands so you get the full result set. Default true.
monitoringModeBooleanReturn only listings that previous runs with the same search did not return (see Monitoring). Default false.
minPrice / maxPriceIntegerPrice range in €.
publishedWithinStringany (default), last24Hours (rent only), last48Hours (sale only), lastWeek, lastMonth
sortByStringweigh (relevance, default), price, publicationDate, modificationDate, priceDown, ratioeurm2, size, distance (radius search only)
sortOrderStringdesc (default) or asc
languageStringLanguage of titles and labels: en (default), es, ca, pt, it, fr, de, nl. Descriptions stay in the advertiser's language.
latitude / longitude / radiusKmNumberRadius search around a point instead of a district, e.g. 40.4168, -3.7038, 2. Default radius 5 km.
fetchDetailsBooleanFor each search result, also fetch the full property detail page (adds description, energyCertification, and more accurate floor/hasLift/location fields). Slower, uses one extra request per property, and bills at the detail-result rate (see Pricing). Default false.
minSizeStringMinimum property size in m², e.g. "60"
maxSizeStringMaximum property size in m², e.g. "200"
bedroomsArraye.g. ["studio","1","2","3","4"]
bathroomsArraye.g. ["1","2","3"]
homeTypeArrayflat, penthouse, duplex, studio, chalet (houses), countryHouse, apartment, villa, loft, atticStudio, casaBaja. Several values widen the search. detachedHouse, semiDetachedHouse and terracedHouse are searched as chalet — Idealista has no separate filter for them.
conditionArraynewDevelopment, good, renew
propertyStatusArraybareOwnership, tenanted, illegallyOccupied, free
floorHeightsArraytopFloor, intermediateFloor, groundFloor
featuresArrayairConditioning, builtinWardrobes, elevator, exteriorDomesticSpace, balcony, terrance, exterior, garage, garden, swimmingPool, storeRoom, accessible, luxury, seaViews, bankOffer (bank-owned), virtualTour, hasPlan (floor plan), petsAllowed (rent only)
energyRatingStringany (default), high, medium, low
furnishedStringRent only: any (default), furnished, furnishedKitchen
auctionStringany (default), only, exclude
onlyPriceDropsBooleanReturn (and pay for) only listings whose price was reduced. Default false.
minPriceDropPercentIntegerOnly listings whose price dropped by at least this %, e.g. 10. Implies onlyPriceDrops.
compactBooleanOne flat row per listing with the most used fields (agency, phone, mainPhoto, … instead of nested contacts/photos). Best for CSV/Excel. Default false.
excludeEmptyFieldsBooleanLeave out empty fields (null, empty text, empty lists). Default false.
descriptionMaxLengthIntegerCut description to this many characters. Empty or 0 = full text.
debugLogBooleanEnable verbose debug logging

This solution requires Proxy servers. Use Apify Proxy with the RESIDENTIAL group or your own residential proxies.

Example Result

{
"url": "https://www.idealista.it/immobile/35994897/",
"title": "Flat / apartment in Via della Balduina, 63, Centro di Balduina, Roma",
"id": "35994897",
"price": 830000,
"size": 220,
"priceByArea": 3773,
"baths": 3,
"rooms": 10,
"address": "Flat / apartment in Via della Balduina, 63, Centro di Balduina, Roma",
"hideAddress": false,
"latitude": 41.9166671,
"longitude": 12.4417612,
"typology": "flat",
"subTypology": null,
"description": "BALDUINA | Refined 210 sq m apartment with livable terraces, garage, and cellar...",
"energyCertification": null,
"floor": "3",
"status": "good",
"newDevelopment": false,
"hasLift": true,
"externalReference": null,
"district": "Balduina",
"municipality": "Roma",
"province": "Roma",
"neighborhood": "Centro di Balduina",
"locationId": "0-EU-IT-RM-01-001-097-38-002",
"parkingSpace": {
"hasParkingSpace": true,
"isParkingSpaceIncludedInPrice": true
},
"features": {
"hasSwimmingPool": false,
"hasTerrace": false,
"hasAirConditioning": true,
"hasBoxRoom": true,
"hasGarden": false
},
"labels": [
{ "name": "bright", "text": "Bright" }
],
"highlight": "Top",
"photos": [
{
"url": "https://img4.idealista.com/blur/480_360_mq/0/id.pro.es.image.master/a9/f6/68/1356345714.webp",
"tag": "facade",
"localizedName": "Facade",
"deeplinkUrl": null
}
],
"videos": [],
"3dtour": [],
"listingUpdate": "2024-03-15T10:00:00.000Z",
"listingUpdateText": "Updated 2 days ago",
"priceDown": null,
"priceDownPercentage": null,
"contacts": {
"commercialName": "Grupo Ibosa",
"contactName": "NR Village homes",
"phone1": {
"phoneNumber": "919388896",
"formattedPhone": "919 38 88 96",
"prefix": "34",
"phoneNumberForMobileDialing": "+34919388896",
"nationalNumber": true,
"formattedPhoneWithPrefix": "+34 919 38 88 96"
}
}
}

Note: By default, search results (district or search-URL scraping) return the data included directly in the search response — it does not include everything a single property page has. Enable fetchDetails to fetch the full detail page for every search result instead:

  • energyCertification is only available from the detail page — there's no way to get it from search results, fetchDetails or not.
  • description, size, and priceByArea are present in both search results and detail pages.
  • neighborhood, parkingSpace, newDevelopment, and highlight are only present in search results — they're not returned by the detail endpoint at all, so scraping via a direct property URL (/inmueble/, /immobile/, /imovel/) or with fetchDetails enabled won't populate them.
  • district/municipality/province use a different, coarser location breakdown on the detail page (it's approximated from Idealista's administrativeAreaLevel1-3 fields, which don't line up cleanly with the search response's own district/municipality/province).
  • features (pool, terrace, air conditioning, etc.) is less complete from the detail page — some flags (terrace, air conditioning) only exist there as free-text, not structured fields, so they're left out to avoid unreliable text-matching.
Tip

To use a filtered search: go to Idealista, apply filters on the search page, then copy and paste the URL as a startUrl entry.

Drawn-area searches work too: draw the area on Idealista's map, then paste the resulting /areas/...?shape=... URL as a startUrl. The polygon is used as the search area, so no district name is needed.

Filters in the URL path (price, size, rooms, bathrooms, home type, condition, features) are applied to the search and override the same fields in the actor input. Two caveats: the chalet subtypes (chalets-independientes, chalets-adosados, casas-de-pueblo, ...) are searched as one "houses" bucket, because the API has no subtype filter; and any filter token that cannot be mapped is logged as a warning and ignored.

Idealista's API serves at most 50 pages of 50 listings for one search. With splitByPrice on (the default), a search that reports more results is re-run as price bands that each stay under that limit, and the bands are merged into one dataset. Each property is returned and charged once, even when it appears in two bands. Set maxItems to cap the run; with maxItems at 2,500 or less no splitting happens.

Monitoring: new listings only

Set monitoringMode: true and schedule the Actor (e.g. daily). The first run returns the full result set. Every later run with the same search returns only listings that no earlier run returned, so you pay only for new listings. The list of seen listings is kept in your account's idealista-monitoring key-value store, separately for each search: changing a location or filter starts a new list, while changing maxItems, sorting or language does not. Tip: sort by publicationDate so new listings come first. Property detail URLs in startUrl are always returned.

Ready-made examples

Copy an input into the Actor's JSON input tab and run it. Every example works without a pasted URL unless it shows one.

You wantKey input
New homes for sale in Madrid, daily"district": "Madrid", "publishedWithin": "last48Hours", "sortBy": "publicationDate", "monitoringMode": true
2-bed flats to rent in Eixample, Barcelona under €1,400"startUrl": [{ "url": "https://www.idealista.com/alquiler-viviendas/barcelona/eixample/con-precio-hasta_1400,de-dos-dormitorios/" }]
Madrid flats reduced by 10% or more"district": "Madrid", "homeType": ["flat"], "minPriceDropPercent": 10
Sea view apartments in MĆ”laga under €400,000"district": "MĆ”laga", "homeType": ["flat"], "features": ["seaViews"], "maxPrice": 400000
Furnished flats to rent in Madrid"district": "Madrid", "operation": "rent", "homeType": ["flat"], "furnished": "furnished"
Villas for sale in Marbella"district": "Marbella", "homeType": ["villa"]
Homes within 1 km of Puerta del Sol"latitude": 40.4169, "longitude": -3.7035, "radiusKm": 1, "sortBy": "distance", "sortOrder": "asc"
Homes in Madrid postal codes 28013 and 28004"postalCodes": ["28013", "28004"]
Flat CSV-ready rows for Excel"district": "Valencia", "compact": true, "descriptionMaxLength": 200
Pet-friendly flats to rent in Barcelona"district": "Barcelona", "operation": "rent", "homeType": ["flat"], "features": ["petsAllowed"]
Holiday rentals in Barcelona (price per night)"district": "Barcelona", "operation": "rent", "propertyType": "vacationRentals"
The whole Madrid sale market (past 2,500 results)"district": "Madrid", "splitByPrice": true, "maxItems": 3000
1-bed flats to rent in Lisbon under €1,100"country": "pt", "district": "Lisboa", "operation": "rent", "bedrooms": ["1"], "maxPrice": 1100
Milan apartments with price drops"country": "it", "district": "Milano", "sortBy": "priceDown"
Flats to rent in Paris under €1,500"country": "fr", "district": "Paris", "operation": "rent", "homeType": ["flat"], "maxPrice": 1500

A full input, for example the daily Madrid alerts (schedule it in Apify Console):

{
"district": "Madrid",
"operation": "sale",
"publishedWithin": "last48Hours",
"sortBy": "publicationDate",
"monitoringMode": true,
"maxItems": 300,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

FAQ

Can I get more than 1,500 results from Idealista?

Yes. The Idealista website shows at most 1,500 results per search, and its API at most 2,500. With splitByPrice on (the default) bigger searches are split into price bands and merged, so you get the full result set. See How to get more than 2,500 results.

How do I get only new listings every day?

Set monitoringMode: true, sort by publicationDate and schedule the Actor in Apify Console. Each run returns only listings that earlier runs with the same search did not return. See Monitoring.

Does it return agent phone numbers?

Yes, when the advertiser shows a phone on Idealista. It is in contacts.phone1 (phoneNumberForMobileDialing is ready to dial, e.g. +34919388896), together with the agency's commercialName and the contactName. Private sellers often hide their number.

How do I find price drops?

Every result includes priceDown (amount in €) and priceDownPercentage. Set onlyPriceDrops: true to get, and pay for, only reduced listings, or minPriceDropPercent: 10 for drops of 10% or more. With the default sort the results come biggest drop first, and the run stops as soon as the drops run out.

How much does a run cost?

List results cost $0.60–$1.00 per 1,000 depending on your Apify plan, results with fetchDetails $1.20–$2.50 (see Pricing). Example: all 3,000 sale listings of a mid-size city cost about $1.80–$3.00. Set maxItems to cap a run.

Which countries are supported?

Spain (idealista.com), Portugal (idealista.pt), Italy (idealista.it) and France (idealista.fr). Start URLs can mix countries; each URL uses the country of its domain.

Can I use it from my code or another tool?

Yes. Run it through the Apify API or the JavaScript and Python clients, or connect it to Make, Zapier, n8n, Google Sheets, Slack and other tools via Apify integrations. Results can be downloaded as JSON, CSV, Excel or XML.

Why is a listing's location approximate?

Some advertisers hide the exact address. Idealista then shows only an area, and hideAddress is true; the coordinates point to the area's center.

The Actor collects only data that Idealista shows publicly. Listings can include personal data such as names and phone numbers; under the GDPR you need a legitimate reason to store and use it. If you are unsure, ask a lawyer.

Bugs, fixes, updates and changelog

If you have any feature requests you can create an issue from here. Here is the changelog with new features and bugfix info.