Idealista Scraper: Spain, Italy, Portugal Homes
Pricing
from $0.38 / 1,000 listings
Idealista Scraper: Spain, Italy, Portugal Homes
Scrape Idealista ads for sale and rent in Spain, Italy and Portugal by search link, place, map area, ad id or agency, past the 1,800 result cap, no login. Rows: price, price drop, m², rooms, floor, lift, photos, agency, energy rating, coordinates, phones. JSON, CSV, Excel or API; pay per listing.
Pricing
from $0.38 / 1,000 listings
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Idealista Scraper: Spain, Italy, Portugal Homes
Idealista scraper for idealista.com (Spain), idealista.it (Italy) and idealista.pt (Portugal): paste Idealista search links, or name places, Spanish or Italian postal codes, map areas, ad ids, agencies or a whole country, and get one row per ad with the price, the last price drop, the size, bedrooms or rooms, the floor, lift, parking, photos and the agency or private advertiser. Add Listing details for the full ad page (every feature line, energy certificate, year built, community fees, map position, update date, photos with room tags, floor plans, videos), Phone numbers, Map position and Agencies. Searches holding more than Idealista's 1,800 ads are read in price bands until every ad was met. Homes, rooms, new developments, offices, premises, garages, land, storage rooms, buildings, business transfers and holiday rentals, for sale and for rent, from professionals or any advertiser (private advertisers only on Spanish and Italian rooms and on every Italian search). No login and no Idealista API key. A gone ad, an unknown place, a repeat or a page Idealista refused is a free row.
Who uses it: property investors and buy to let landlords comparing prices per m² and price drops, agencies and portals studying their market and other agencies' stock, relocation and rental services, valuation, research and proptech teams building price indexes for Spain, Italy and Portugal, lead generation teams that need agencies with their phones, and AI agents that need Idealista data through an API.
Quick start
- Open the Input tab and paste an Idealista search link into Idealista links, for example
https://www.idealista.com/venta-viviendas/madrid/chamberi/(the prefill). The link keeps its own filters, order and page. - Or name places in Places (
Chamberí, Madrid,Milano,Lisboa, a Spanish or Italian postal code such as28004), draw Map areas, list Ad ids or ad links or Agencies, or switch on Whole country, and pick the Market, Sale or rent, Property type, the filters and the order you need. - Switch on the add-ons you need: Listing details, Agencies, Phone numbers, Map position (all off by default).
- Set Maximum listings to what you want to pay for and click Start. Download the rows as JSON, CSV or Excel, or read them through the Apify API.
What you get
One row per ad (type: "listing"); one row per agency with the Agencies add-on or the Agencies setting
(type: "agency"); one free row per development page (type: "development"); one free coverage row per search
(type: "search"); free status rows for anything that could not be delivered (type: "status"); and a free run summary
(type: "summary").
Fill rates of the search rows were measured on the Actor's platform run KhnEadthb3dDkcd5h of 2026-10-28: every ad of one Idealista search, 1,490 homes for sale in Chamberí, Madrid (1,354 from professionals, 136 from private advertisers). The Italian and Portuguese search rows of the Actor's other platform runs (32 and 24 different ads) carry the same fields; the differences are named in the table.
| Field | What it is | Filled (1,490 Spanish rows) |
|---|---|---|
id, url, market | Idealista's ad id (a string), the ad's link, ES, IT or PT | every row |
operation, propertyType | sale or rent; homes, rooms, newDevelopments, offices, premises, garages, land, storageRooms, buildings, businessTransfers, holidayRentals | every row |
isDevelopment | true when the card is a new development (its url is then the development page) | every row (true on none of these 1,490) |
title | the ad title as Idealista shows it (type, street or area, place) | 100 percent |
price, currency, priceText, pricePeriod | the asking price in EUR, as a number and as Idealista writes it; for rentals the period (month and others) | 100 percent (pricePeriod rentals only) |
previousPrice, priceDropPercent | the price before the last drop and the drop in percent, when Idealista shows a drop | 16.5 percent (ads with a drop) |
pricePerM2 | the price per m² where the card shows it | 83.5 percent |
sizeM2 | built size in m² | 100 percent |
bedrooms, rooms | bedrooms (Spain and Portugal), rooms or locali (Italy: rooms on 32 of 32 Italian rows) | bedrooms 98.3 percent |
bathrooms | bathrooms where the card shows them (holiday rentals) and on every ad looked up by id, link, dataset or development unit (from its ad page; with Listing details also in details) | lookups and holiday rentals |
floorText, lift, exterior, parkingIncluded | the floor line as Idealista writes it, lift, exterior, parking included in the price | 97.8, 97.7, 97.0 and 17.7 percent |
featureLines, description, highlight, tags | the card's feature lines, the card's description text (the start of it; the full text comes with Listing details), its highlight and tags | description 99.6, tags 20.1 percent |
photoCount, thumbnail, hasFloorPlan, has3dTour, hasVideo, hasVirtualTour, hasHomeStaging | photo count, first photo, and what the ad offers (floor plan on 943, video on 567, 3D tour on 156 of the 1,490) | photo count 98.7 percent |
advertiserType | professional or private | 100 percent |
agency (slug, name, url) | the agency of a professional ad, with its Idealista page | 65.4 percent |
promoted, onlineBooking | the ad's promotion flag, online booking (rooms and holiday rentals) | where Idealista shows them |
auction, auctionDate | Italian court auctions: the auction flag and the sale date | auctions only |
guests | holiday rentals: how many guests | holiday rentals only |
latitude, longitude, mapStatus | the ad's map position, with Map position or Listing details | 20 of 20 Portuguese rows with Map position on (run WSana4uQgta5DYWT8) |
phones, phonesStatus | the advertiser's phone numbers (number, formatted), with Phone numbers | see below |
derived | pricePerM2, pricePerBedroom, usableToBuiltRatio, daysSinceUpdate, distanceFromCentreKm (circle searches), computed from the row's own figures | price per m² 100 percent |
descriptionContacts | e-mail addresses, phone numbers and web links written in the description | 5 rows (0.3 percent) |
detailsStatus, details | the Listing details block (below) | with Listing details |
search (key, url, input, band, page, position) | which input, search, price band, page and place on the page delivered the row | every search row |
lookedUpBy, development | for ads looked up by id, link or dataset: which input; for a development's units: the development | lookups only |
scrapedAt | when the row was written | every row |
Listing details (add-on)
With Listing details (includeDetails) on, each ad's own page is read and added in details. Measured on the 42 ad pages
read with details in ten of the Actor's platform runs of 2026-10-28 (Spain 25, Italy 14, Portugal 3; 36 from professionals, 6
from private advertisers with personal data off; runs zWdcz5iB5if8b7Wml, SBgHZdgSEN2p0xrnm, sqdn5nMejtFpxuskg, GTUeEHrxDYCDvcBNu,
Wb0tcvwlCen58qyX5, 163TnZnja57Ni4clJ, AO2lrqgcxSVdSlveF, rIVNMyz0rccqGxwrb, bN74nwTlSXUjmFfqW, uxGEq0KPxk785bgUJ; run
KwJ5LxBIlULwZ4OWH read 4 more in the idealistaApi row format, which names these fields differently):
Field in details | What it is | Filled (42 ad pages) |
|---|---|---|
description, descriptionLanguages, descriptionTranslations | the full advertiser description (text, HTML or Markdown), its languages, and Idealista's own translations into up to 5 languages you pick (no extra charge) | description 97.6 percent; translations 8 of 8 Italian ads into English (run bN74nwTlSXUjmFfqW) |
featureSections, headlineFeatures, priceLines | every feature line of the ad page, by section, as Idealista writes it | 100 percent |
bathrooms, usableSizeM2, plotSizeM2, condition, yearBuilt, orientation, heating | from the feature lines | bathrooms 92.9, year built 50.0, heating 83.3, orientation 59.5 percent |
lift, parking, parkingPrice, terrace, balcony, wardrobes, storageRoom, airConditioning, pool, garden, furnishing, petsAllowed, accessible | the home's features | where the ad names them |
communityFees, communityFeesText | the monthly community fees | 35.7 percent |
energy (rating, consumption, consumptionClass, emissions, emissionsClass) | the energy certificate | rating 85.7 percent |
street, locationLines, location (street, neighbourhood, district, municipality, province), locationId | the address lines as Idealista lists them, split into named parts where Idealista labels them, and Idealista's deep location id of the ad | location lines 92.9 percent (holiday rentals show none); location id 39 of 42 (not on the 3 new development cards, whose details carry the development page) |
latitude, longitude, coordinatesExact | the ad's map position and whether Idealista shows it exact or approximate | 85.7 percent (36 of 36 professional ads; private ads only with personal data on) |
advertiserType, advertiserLabel, advertiserName, agencySlug, agencyLogo, advertiserLink, reference | the advertiser and the agency's own reference | advertiser name 85.7 percent |
updatedText, updatedDate | Idealista's "ad updated on" line and its date | 92.9 percent (holiday rentals show none) |
photos (url, tag), floorPlans, videos, documents | every photo with its room tag, floor plans, videos and documents | photos 100, floor plans 73.8, videos 52.4 percent |
counterOfferEnabled, videoGuidedVisit, onlineBooking, occupancy, newDevelopment, label | the ad's flags | where Idealista shows them |
auction, auctionDate, businessTransfer, transferRent, transferRentText, guests, touristLicence | Italian auctions with their date, business transfers with their rent, holiday rentals with guests and tourist registration | those property types only |
detailsStatus says delivered, not_requested, not_read or not_read_run_stopped; only delivered is billed. Two more
status fields appear on a row only when a run stop cut that read: translationsStatus (the description translations) and
locationIdStatus (the location id), each not_read_run_stopped. An ad whose page says it is gone is left out, free (counted
as ad_gone in the coverage row).
Phone numbers and map positions (add-ons)
Phone numbers (includePhones) reads the ad page's own phone button and writes the numbers of agencies and other
professionals into phones (number and formatted): 5 of 5 professional Spanish ads (run zWdcz5iB5if8b7Wml) and 8 of 8
Italian ads (run bN74nwTlSXUjmFfqW) on the Actor's platform runs. Idealista's phone button does not serve a private advertiser's
numbers (0 of 6 tries with personal data on, runs FJKkcnvafTIJXEDKA and GhKGaj54CvNmT6y5Q), so private ads get none, whatever the
personal data switch says: phonesStatus: "not_served_for_private_advertisers", never billed. Map position
(includeCoordinates) reads Idealista's own map for a search row's latitude and longitude (Listing details already carries
the position): 20 of 20 Portuguese ads (run WSana4uQgta5DYWT8) and 5 of 5 Spanish ads (run nnbOYHGrfgrv7Hzh2); a private
advertiser's position only with personal data on. Each is billed only when it delivered.
phonesStatus:delivered,no_phone(the ad has none),not_served_for_private_advertisers,not_read(Idealista refused or did not answer),not_read_run_stopped(the run stopped before the read) ornot_available_for_development(a development card; its units carry their own).mapStatus:delivered,no_map,private_advertiser_needs_personal_data,not_read,not_read_run_stoppedornot_available_for_development.
A phone or map position read Idealista refused is counted in the run's status message, and nothing is charged for it.
Agencies
With Agencies (includeAgencies) on, every agency met in the run gets one row, once: name, addressLines (with the
postal code), adsCount, clientSince, publicationQualityPercent, website, languagesText, description, logo,
listingTitle, locations (the areas it covers, each with Idealista's locationId, its name and the agency's own search of
that area in path, a relative path on the market's site such as /pro/homeclub/alquiler-viviendas/balears-illes/: put
https://www.idealista.com, .it or .pt in front) and the office's own phones with phonesStatus (free inside the Agency
row, where the agency page names an office: 5 of 6 agencies on runs zWdcz5iB5if8b7Wml and 6Sbg6Yzmdd0876Chl, the sixth
read was not answered and says not_read; not_read_work_allowance when the run's unpaid work allowance had no room for
this optional read; no_office when the agency page names no office). An agency named in the
Agencies setting (/pro/<name>/ or its link) gives its Agency row and its own ads as Listing rows (of the
Property type and Operation you set; homes for sale by default).
Developments
A development link (/obra-nueva/<id>/, /nuova-costruzione/<id>/, /empreendimento/<id>/) in Idealista links gives one
free development row (name, developer, agency, priceFromText, summary, featureSections, locationLines, units
with their cells and links, documents, photos, description), then each unit as its own Listing row with its full ad page
(billed as Listing details). In a search (new developments, or a development shown among homes), each development card is one
Listing row whose url is the development page; with Listing details its details carry the development page, priceFromText
and the units table.
Holiday rentals and auctions
Holiday rentals (Spain, Property type holidayRentals, for rent) are read with their own link /es/accommodation/<id>/,
with guests and, with Listing details, the tourist registration in touristLicence. Italian court auctions carry auction and
the sale date in auctionDate; Auctions (only, exclude) filters them where Idealista offers it.
The coverage row
Each search gets one free row (type: "search") with its link, Idealista's total, the ads met and delivered, skipped
by reason (price_below_minimum, price_above_maximum, size_below_minimum, size_above_maximum; ad_gone for an ad whose
page says it is gone; outside_area for an ad whose known map position lies outside your drawn area or circle; advertiser_type
for an ad of the other seller type and advertiser_type_unknown for a card without a private or professional mark, when
Advertiser is checked on the cards), pages and pagesFailed, the price bands used past the 1,800 cap, a priceSummary of
the delivered rows (listings, median, minimum and maximum price, median price per m², sale prices and rents apart), whether the
search was read to its end (complete) and why it stopped (stoppedBy; for a private sellers walk in Italy also
started_on_a_later_page, seller_unknown_on_some_cards or no_price_split_for_private_order). On run KhnEadthb3dDkcd5h the Chamberí search reported
total 1,490, met 1,490, delivered 1,490, 50 pages, complete: true.
The summary row
The run's last row (type: "summary", free) counts listings delivered, looked up and gone, details, agencies, places not found
or ambiguous, repeats skipped, rows past the caps, the events charged and those withheld by the charge limit, the requests by
answer, the Portugal browser sessions, and why the run stopped (stoppedBy).
How much does it cost to scrape Idealista?
You pay per event, with Apify's store discounts by plan:
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Listing (one ad from a search) | $0.53 per 1,000 | $0.48 per 1,000 | $0.44 per 1,000 | $0.38 per 1,000 |
| Results page (one page of up to 30 ads that delivered at least one Listing) | $0.0077 | $0.0071 | $0.0064 | $0.0055 |
| Listing details (one ad page read, and every ad looked up by id or link) | $0.0049 | $0.00448 | $0.00406 | $0.0035 |
| Agency (one agency, once per run) | $0.0077 | $0.00704 | $0.00638 | $0.0055 |
| Phone number (one ad's phone numbers) | $0.0014 | $0.00128 | $0.00116 | $0.001 |
| Map position (one ad's position) | $0.00042 | $0.00038 | $0.00035 | $0.0003 |
| Portugal session (once per run that reads idealista.pt) | $0.483 | $0.44 | $0.40 | $0.345 |
| Actor start (once per run, charged on every run) | $0.016 | $0.016 | $0.016 | $0.016 |
Platinum and Diamond plans pay the Gold price.
The Store pricing card shows every event per 1,000 events: "$0.38 / 1,000" on the Listing row means one listing costs USD 0.00038 at Gold; "$5.50 / 1,000" on the Results page row means one results page costs 0.55 cents, and the same figure on the Agency row means one agency costs 0.55 cents; "$3.50 / 1,000" on the Listing details row means one ad page costs 0.35 cents; "$345.00 / 1,000" on the Portugal session row means one Portugal session costs 34.5 cents, charged at most once per run.
- Never billed: status rows, coverage rows, development rows and the summary; an ad met twice in one run; ads outside your price, size or seller type filters, or whose known map position lies outside your drawn area or circle; ads that are gone; places Idealista does not know or that match several places (in Portugal the lookup itself opens the run's Portugal session: see the next point); Portuguese postal codes (refused before any browser opens); links Idealista does not have; pages, ads, agencies or add-ons Idealista refused or did not answer; phone numbers of private advertisers (Idealista does not serve them) and their map positions with personal data off; description translations; rows the charge limit withholds. An ad looked up by id, link, dataset or development unit is billed as Listing details only (no Listing, no Results page). The office phone of an agency comes free inside its Agency row.
- The Portugal session is charged once per run when the run starts its first browser session for idealista.pt, also when Idealista Portugal then refuses that browser. Looking up a Portuguese place name needs that browser too, so a run whose Portuguese place name matches nothing, or several places, still pays the session fee once. A run without Portuguese entries never pays it.
- The Actor start event is charged on every run, whatever it delivers: an input with nothing usable delivers nothing, and only the start fee is charged.
- The run obeys the maximum cost you set for it: a row whose events the limit cannot pay is not delivered, nothing after it is
delivered, and the summary says
stoppedBy: "charge_limit". The Portugal session is reserved against the limit before the browser starts. - Example on the Gold plan: 1,000 listings from searches cost $0.016 (start) + $0.38 (1,000 listings) + $0.187 (34 results pages of 30) = about $0.58. On the Free plan: $0.016 + $0.53 + $0.262 = about $0.81.
- 100 listings from a search with Listing details and Phone numbers, at Gold: $0.016 + $0.038 (100 listings) + $0.022 (4 results pages) + $0.35 (100 Listing details) + at most $0.10 (100 phone numbers; ads without a number are free) = at most about $0.53. On the Free plan: $0.016 + $0.053 + $0.031 + $0.49 + $0.14 = at most about $0.73.
- A Portugal run of 100 listings, at Gold: $0.016 + $0.345 (Portugal session) + $0.038 (100 listings) + $0.022 (4 results pages) = about $0.42. On the Free plan: $0.016 + $0.483 + $0.053 + $0.031 = about $0.58.
A results page is billed once, on the first Listing it delivers; a page whose ads are all repeats or outside your filters is free, so a search with many repeats can bill a few more pages than listings divided by 30.
Input
Every entry you give is read; an entry that cannot be used gets a free status row saying why.
| Setting | What it does |
|---|---|
startUrls | Idealista links of any market, up to 1,000: search results pages (with their own filters, order and page), drawn areas (/areas/...?shape=), multi area links (/multi/...), map pin links (/point/..., read as the area around the pin), ad links (/inmueble/<id>/, /immobile/<id>/, /imovel/<id>/, /es/accommodation/<id>/; a unit link /obra-nueva/<dev>/inmueble/<id>/ is read as its ad), development links and agency links (/pro/<name>/). Also accepted as urls, searchUrls or listingUrls. |
locations | Place names as Idealista writes them (Chamberí, Madrid, Milano, Lisboa), Spanish and Italian postal codes (28004, 20121) or the place part of an Idealista link (madrid-madrid, madrid/chamberi). A name that matches several places, or none, gets a free row with Idealista's own candidates (in Portugal the lookup opens the run's Portugal session). A Portuguese postal code is refused, free, before any browser opens: Idealista Portugal's place search has none; give the town or parish name or its link. |
wholeCountry | Searches every province of the market (Spain 52, Italy 107, Portugal 29 districts and islands), each past the 1,800 cap in price bands. Set maxItems. |
mapAreas | A drawn area lat,lng; lat,lng; lat,lng (3 to 50 points) or a circle lat,lng,radiusKm (0.1 to 50 km). |
adIds | Idealista ad ids (in the market below) or ad links of any market, up to 10,000; each delivered with its full ad page. |
agencies | Agency names from their link (/pro/<name>/) or the links: the Agency row and the agency's homes for sale. |
datasetId | A dataset of an earlier run (or any dataset whose rows carry an Idealista link in url), up to 10,000 rows: its ads are read again with their full ad page (billed as Listing details), and its development links are read as developments; rows that link to neither are counted in one free row. |
market, operation, propertyType | For places, map areas, the whole country, bare ad ids and agency names: es, it, pt (default Spain); sale (default) or rent; homes (default), newDevelopments, rooms, offices, premises, garages, land, storageRooms, buildings, businessTransfers, holidayRentals. A combination Idealista does not offer refuses the run (only the start fee is charged). Links carry their own. |
sortBy | Idealista's own orders: relevance, priceAsc, priceDesc, newest, oldest, biggestPriceDrop, pricePerM2Asc, pricePerM2Desc, sizeDesc, sizeAsc, highestFloor, lowestFloor, privateFirst and agenciesFirst (Italy), mostBedrooms (holiday rentals). Spain refuses its date order to automated reads: use publishedWithin there. |
| Filters | minPrice, maxPrice (EUR, per month for rentals), minSize, maxSize (m²), rooms (0 in Spain and Portugal, 1 to 3, then 4 and 5+ in Italy, 4+ in Spain and Portugal), bathrooms (1, 2, 3+), homeTypes (16 types), condition, floor, features (24, from air conditioning to sea views), energyEfficiency, occupancy, publishedWithin (24h, 48h, week, month), rentalType, furnishing, auctions, advertiserType, withFloorPlan, withVirtualTour, bankOwned. Each is sent to Idealista as its own search form sends it; on a pasted link a filter you set replaces that filter of the link. Price and size are checked again on every row before it is charged. advertiserType: professional works for every property type (each card's own private or professional mark is checked). private works where Idealista itself helps find private ads: rooms in Spain and Italy (its own filter) and every Italian search, which is then read in Idealista's own private first order (leave Order empty or on relevance, which then reads in private first order, or set privateFirst; any other order is refused with a free reason) and ends at the first page with no private ad, its coverage row complete (in that order the private ads come first: in Bologna 69 private ads filled pages 1 to 3 and page 4 held none; no price bands). For other Spanish and Portuguese searches private is refused with a free reason: Idealista offers no private filter or order there and lists professionals first (in Madrid's Chamberí the first private ad was on page 13), so a scan would read pages that earn nothing. Ads of the other type and cards without a mark are left out, free, and counted in the coverage row (advertiser_type, advertiser_type_unknown). With Listing details on, the ad page's own advertiser is checked again. An agency's own ads (from Agencies, or an agency's own listing link in Idealista links) are a professional's: with private they are not read (a free seller_type_excludes_agency row, or a free problem row for the link, says so; the agency's own row is still delivered for Agencies). A filter setting Idealista does not offer for the Property type and Market you set refuses the whole run (only the start fee is charged); against a pasted link of another property type it refuses that link only. A filter word inside a pasted link that the Actor does not know refuses that link only (a free problem row; the rest of the input runs). Filters and the order also apply to an agency's own ads (from Agencies), written into the agency's search; a filter Idealista does not offer there gives a free row and that agency's ads are not read. Filters need a search or an agency: with ad ids only they refuse the run. |
siteFilters | Any other filter of Idealista's own search form, as <form field>=<value> (list below). |
includeDetails, includeAgencies, includePhones, includeCoordinates | The paid add-ons, off by default. |
includePersonalData | Off by default (below). |
maxItems, maxItemsPerSearch, maxPagesPerSearch, splitPastCap | The most Listing rows of the run (no limit when empty: set it) and of one search; pages per search (1 to 60, Idealista shows at most 60 pages of 30 ads); reading past the 1,800 ad cap in price bands, cheapest first (on by default). Also accepted: maxResults for maxItems. |
language | Idealista's own page language for titles, labels and descriptions where Idealista translates them: Spanish, Catalan, English, Italian, Portuguese, French, German, Dutch or Norwegian (prices, sizes, rooms and every label are read in each of them). Default: the market's own. Description translations (with Listing details) take 18 languages. |
outputFormat, descriptionFormat, descriptionTranslations, descriptionMaxLength, omitEmptyFields | full (default), compact (core fields) or idealistaApi (the field names of Idealista's own partner API: propertyCode, priceByArea, hasLift and more, plus this Actor's agency and advertiserType); descriptions as text, html or markdown; translations into up to 5 languages (with Listing details); a length cap; empty fields left out. |
maxConcurrency, proxyUrls | Parallel reads (1 to 4, default 3); your own proxy links instead of Apify residential proxies (included in the price). |
Other Idealista filters (siteFilters)
Written as the site's own form field and value, for example adfilter_hasautomaticdoor=1. A field with * takes any whole
number. The named filters above are not repeated here.
- Homes: Portugal for sale
adfilter_moradiaterrea=1,adfilter_quintas=1,adfilter_solarpalacete=1. - New developments:
adfilter_new_development_finished=1,adfilter_new_development_in_project=1,adfilter_new_development_rent_to_own=1,adfilter_new_development_hometype_flat=1,adfilter_new_development_hometype_house=1, bedroomsadfilter_is_rooms_0=1toadfilter_is_rooms_3=1andadfilter_is_rooms_4_more=1(Italyadfilter_is_rooms_1=1toadfilter_is_rooms_4=1andadfilter_is_rooms_5_more=1). - Rooms (Spain and Italy, rent):
adfilter_arepetsallowed=0|1,adfilter_bedtype=1|2|3|4,adfilter_childrenallowed=1,adfilter_couplesallowed=1,adfilter_hasHouseKeeper=1,adfilter_hasprivatebathroom=1,adfilter_isAccessible=1,adfilter_issmokingallowed=0|1,adfilter_newgender=2|3,adfilter_newsexualorientation=2,adfilter_occupation=2|3,adfilter_onlineBooking=1,adfilter_onlineBookingWithInsurance=1,adfilter_ownerIsNotLiving=1,adfilter_tenantnumber_2=2,adfilter_tenantnumber_3=3,adfilter_tenantnumber_4=4, and in Spainadfilter_windowViewsId=1. - Offices:
adfilter_accessibleBuilding=1,adfilter_airconditioningid=1,adfilter_distribution=1|3,adfilter_hashotwater=1,adfilter_liftsnumber=1,adfilter_officeTypePrivate=1,adfilter_officeTypeShared=1,adfilter_onlyofficebuilding=0|1,adfilter_parkingspacenumber=1; for rent alsoadfilter_officeTypeDesk=1; in Spain alsoadfilter_officelocationid=1. - Premises and warehouses:
adfilter_accessibleBathroom=1,adfilter_accommodation=1,adfilter_aestheticAndBeauty=1,adfilter_barsAndNightClub=1,adfilter_catering=1,adfilter_commercialproperty=1,adfilter_educationalCenter=1,adfilter_foodTrade=1,adfilter_hassmokeextractor=1,adfilter_inamall=1,adfilter_industrialbuilding=2,adfilter_iscornerlocated=1,adfilter_laboratory=1,adfilter_mezzanine=3,adfilter_newsStand=1,adfilter_onthestreet=2,adfilter_ontopfloor=6,adfilter_otherCommercialActivities=1,adfilter_otherubication=5,adfilter_pharmacy=1,adfilter_professionalServices=1,adfilter_retail=1,adfilter_sportsFacilities=1,adfilter_storehouse=1,adfilter_tobaccoShop=1,adfilter_underground=4; for saleadfilter_saleWarehouseOnly=1,adfilter_saleWarehouseThirdPartiesRented=1,adfilter_saleWarehouseWithBusinessTransfer=1; for rentadfilter_rentWarehouseOnly=1,adfilter_rentWarehouseWithBusinessTransfer=1,adfilter_transferCost=*,adfilter_transferCostMin=*(Italy alsoadfilter_rentWarehouseAndBusiness=1). - Business transfers: the premises fields above (without the sale only and rent only ones), plus
adfilter_rentWarehouseWithBusinessTransfer=1,adfilter_saleWarehouseWithBusinessTransfer=1,adfilter_priceRentWarehouse=*,adfilter_priceRentWarehouseMin=*,adfilter_priceSaleWarehouseAndTransfer=*,adfilter_priceSaleWarehouseAndTransferMin=*,adfilter_transferCostForTransfers=*,adfilter_transferCostForTransfersMin=*. - Garages:
adfilter_garagecapacity=3(motorbike),adfilter_hasautomaticdoor=1. - Land:
adfilter_urban_landtype=1,adfilter_developable_landtype=2,adfilter_undevelopable_landtype=3. - Holiday rentals (Spain):
adfilter_pricePerNight=*,adfilter_pricePerNightMin=*,adfilter_vacationalAccessibleHousing=1,adfilter_vacationalAirConditioning=1,adfilter_vacationalBbq=1,adfilter_vacationalElevator=1,adfilter_vacationalFirstLineBeach=1,adfilter_vacationalFlat=1,adfilter_vacationalGarden=1,adfilter_vacationalHosts=1,adfilter_vacationalHouse=1,adfilter_vacationalInternet=1,adfilter_vacationalOnlineBooking=1,adfilter_vacationalParking=1,adfilter_vacationalPool=1,adfilter_vacationalRooms=1,adfilter_vacationalTerrace=1,adfilter_vacationalTv=1,adfilter_vacationalVilla=1,adfilter_vacationalWashingMachine=1,adfilter_vacationalWithPets=1. - Storage rooms and whole buildings: price, size and published within only (the named filters; in Italy for sale also auctions).
Speed
From the Actor's platform runs of 2026-10-28 (start to finish of each run): the prefill (30 Spanish listings from one search) took 2.8 to 20.1 seconds over six runs (kgvZpCGGgYcKm4Yre, qubB8iscvKkf4x4B9, UPN6dVMWkwTvsh6Ph, ldjznGccRz9RIoz8X, P5pBE9m88Pv7FAVNQ, tnYwzQwb0dsoohVdL); a whole search of 1,490 Spanish listings (50 pages) took 52 seconds at 4 parallel reads (KhnEadthb3dDkcd5h). Listing details, phones and map positions add one small read per ad each: 6 Spanish ads with details, phones, map positions and agencies took 33 seconds (zWdcz5iB5if8b7Wml), 8 Italian ads with details, phones and an English translation 57 seconds (bN74nwTlSXUjmFfqW). Portugal is slower because a real browser session starts first: 1 listing took 21 seconds (hVybr59BpY9iC05nv), 20 listings with map positions 67 seconds (WSana4uQgta5DYWT8), one listing from each of 3 districts of the whole country 85 seconds (8gVocHZBKaZ0i3XGC).
Portugal
idealista.pt can only be read through a real browser. A Portugal run starts a browser session on a fresh Portuguese exit, waits until Idealista lets it in (it never clicks or solves a challenge), and reads the pages inside it; it tries at most 4 sessions a run. It needs 1,024 MB of memory (the default): at less memory the Portuguese entries get one free row naming the memory and the rest of the input runs. For long Portugal runs (the whole country, thousands of ads) you may set 2,048 MB: the browser then has more room (the run costs a little more compute).
Looking up a Portuguese place name in Places also goes through that browser, so it opens the run's Portugal session: the session fee is charged once even when the name matches no place, or several (the place row itself is free). Idealista Portugal's place search has no postal codes (no Portuguese postal code was found in 6 platform runs), so a Portuguese postal code is refused before any browser opens, free: give the town or parish name, or its Idealista link.
Personal data
Agencies' and other professionals' names, logos, links, office phones and their ads' phone numbers are business data and always
delivered (phones with Phone numbers on). For ads of private advertisers, the advertiser's first name, the street line, the
exact map position, the advertiser's own link and the contacts written in the description (descriptionContacts) are delivered
only with Include personal data (includePersonalData) on; with it off those fields are empty, and the Map position add-on is
not read or charged for them. A private advertiser's phone numbers are never delivered, whatever the switch says: Idealista's
phone button does not serve them (phonesStatus: "not_served_for_private_advertisers", not read, never billed). Titles,
descriptions, translations and every other text are delivered exactly
as Idealista serves them, whether the switch is on or off (what an advertiser writes into a text is not rewritten). You are
responsible for using personal data lawfully (GDPR included).
When Idealista fails
When Idealista refuses or does not answer after retries, the run still ends normally and its status message says how many calls
Idealista failed, which search pages, ad pages, Listing details reads, agency pages or phone and map position reads could not be
read, that nothing was charged for them, and to try again later. A search page, ad page or agency page that failed also gets a free status row; a failed
add-on leaves its status on the row (detailsStatus, phonesStatus, mapStatus: not_read) and is not billed. A search link
Idealista does not have gets a free search_not_found row; a link Idealista sends to another page gets a free search_moved
row naming that page (the Actor never follows it: it can be a wider area): give the link Idealista shows for your search. When
every connection the run may open is refused (or Idealista Portugal refuses the browser on every try), the run stops there: rows
already delivered stay, and nothing after the stop is delivered or charged; its status message says so.
API examples
Call it like an API in one HTTP call: the run sync endpoint starts a run, waits for it and answers with the dataset rows (replace
YOUR_TOKEN):
curl -X POST "https://api.apify.com/v2/acts/automation_craft~idealista-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"locations": ["Chamberí, Madrid"], "operation": "rent", "maxPrice": 2500, "rooms": ["2", "3"], "maxItems": 100}'
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('automation_craft/idealista-scraper').call({startUrls: ['https://www.idealista.it/vendita-case/milano-milano/'],includeDetails: true,maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((x) => x.type === 'listing').map((x) => [x.id, x.price, x.details?.energy?.rating]));
What this Actor does not do
- No France. idealista.fr is not covered; Spain, Italy and Portugal are.
- No search by Idealista location id. Idealista answers a search by location id with an error, so such an entry gets a free row with the reason; give the place name, its link part or its link. Every ad read with Listing details carries its own location id.
- No Portuguese postal codes. Idealista Portugal's place search has none, so a Portuguese postal code in Places is refused,
free, before any browser opens; give the town or parish name or its link. Spanish and Italian postal codes work (
28004and20121each delivered listings on runs lqUoSTzSiojCFwtlK and qfmUbyI3V9nWa3Ify). - No phone numbers of private advertisers. Idealista's phone button does not serve them (0 of 6 tries with personal data on);
private ads get
phonesStatus: "not_served_for_private_advertisers"and are never billed for it. Agencies' and other professionals' numbers are delivered. - No private sellers only on Spanish and Portuguese searches other than rooms. Idealista offers no private filter or private
first order there and lists professionals first, so
advertiserType: privateis refused with a free reason. Private sellers only works on Spanish and Italian rooms (Idealista's own filter) and on every Italian search (its private first order); professionals only works everywhere. - No newest first order in Spain. Idealista Spain refuses its date order to automated reads; use Published within (last 24 hours, 48 hours, week or month) for the newest Spanish ads. Italy and Portugal deliver it (Portugal orders by update date).
- No distance order. Idealista's search forms have none; every row of a circle search carries
derived.distanceFromCentreKm, so the dataset sorts by it in one step. - No price history. The ad page shows one previous price only:
previousPriceandpriceDropPercentare delivered. - No IBI property tax. Idealista shows no IBI line; when an advertiser writes it, it stays in the description. Community fees are delivered.
- No first publication date. Idealista shows only the last update:
updatedDate. - No postal code of an ad. The ad page does not show one; agency rows carry their own postal code in
addressLines. - No listing counts per area of an agency. The agency page lists its areas without counts; the areas are delivered.
- No views, favourites or contact counts of an ad. Idealista shows them only to signed in users.
- No monitoring between runs. It keeps no memory from one run to the next and does not deliver only new or changed ads; run
it on a schedule, and give an earlier run's dataset in
datasetIdto read a list of ads again. - No agency e-mails. Agency pages carry a contact form, not an e-mail, and the Actor looks nothing up on agencies' own
websites; an e-mail an advertiser writes in a description is delivered in
descriptionContacts. - No AI market analysis. It delivers Idealista's data and a free price summary per search, not yields or forecasts.
- A run can stop early to protect its margin. Work that earns nothing is capped (the unpaid work allowance: USD 0.0025 plus 30
percent of what the run's events earn). Many misses in a row, a very strict filter or very slow answers can end a run with
stoppedBy: "work_allowance"on the summary; nothing is charged for ads not delivered. - No login and no captcha solving. It reads only what Idealista shows any visitor.
FAQ
Is there an Idealista API?
Idealista's own API is for partners it approves. This Actor needs no Idealista account or API key and works as an Idealista API
through Apify: call it with links, places or ad ids and read the rows back as JSON, or pick Row format idealistaApi for
the field names of Idealista's partner API.
Can I export Idealista listings to Excel or CSV?
Yes. Every run's dataset downloads as Excel, CSV, JSON or XML from the Output tab or the API. Row format compact keeps the
core columns for spreadsheets.
Can I get past Idealista's 1,800 results limit?
Yes. Idealista shows at most 60 pages of 30 ads per search; with Go past the 1,800 ad cap on (the default) a bigger search is read in price bands, cheapest first, until every ad was met, and its coverage row says whether it was read to its end. Holiday rental searches are not split either (Idealista's holiday form filters the price per night, which the bands do not use): a holiday search over 1,800 ads stops at the cap and its coverage row says so. Searches for premises to rent and for business transfers are the exception: their price filters mix a rent, a transfer amount and a sale price, so they are left to Idealista and not split into bands; such a search stops at the 1,800 cap and its coverage row says so.
Can I get the agency's phone number?
Yes. Phone numbers delivers the numbers of each ad of an agency or other professional (billed per ad that has one), and an Agency row carries the agency office's own phone, free, where the agency page names an office. Idealista does not serve a private advertiser's numbers, so private ads get none and are not billed for it.
Can I get the price history of an Idealista property?
Only the last change: Idealista's ad page shows the previous price, delivered as previousPrice with priceDropPercent. To build
a history, run the same search or the same ads (datasetId) on a schedule and compare the runs.
Why does this Actor run with limited permissions?
Least privilege: it reads and writes only its own run's dataset and key-value store, opens no named store, and reads another
dataset only when you give its id in datasetId. Limited permissions keep the rest of your Apify data out of its reach.
Changelog
- 0.1 (2026-10-28): first release: Idealista Spain, Italy and Portugal by search link, place, Spanish or Italian postal code, map area, map pin, whole country, ad id or link, agency, development or dataset; past the 1,800 cap in price bands; seller type (private or professional) for every property type; Listing details, Phone numbers, Map position and Agencies add-ons; holiday rentals, Italian auctions, business transfers; coverage row and price summary per search; personal data behind its switch.
More data tools by Automation Craft
- Zillow Scraper: Homes for Sale, Rent and Sold
- SeLoger Scraper: Listings, Prices and Agencies
- Bien'ici Scraper: France Real Estate Ads & DPE
- PAP Scraper: pap.fr Real Estate Ads & Phones
- Immowelt Scraper: Rents, Prices and Energy Data
- willhaben Scraper: Immobilien, Cars, Jobs & Ads
- FINN Eiendom Scraper: Norway Homes and Rentals
- Airbnb Scraper: Airbnb Data, Prices, Calendar