Idealista Rental Yield Finder - Spain, Portugal, Italy avatar

Idealista Rental Yield Finder - Spain, Portugal, Italy

Pricing

from $40.00 / 1,000 area reports

Go to Apify Store
Idealista Rental Yield Finder - Spain, Portugal, Italy

Idealista Rental Yield Finder - Spain, Portugal, Italy

Gross rental yield and market stats per area and per district from live idealista sale and rent listings (Spain, Portugal, Italy): median and quartile price per m², asking price and rent, yield by rooms, price drops, new listings. Comparison sorted by yield. $0.05 per area report.

Pricing

from $40.00 / 1,000 area reports

Rating

0.0

(0)

Developer

Amit Aviv

Amit Aviv

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Gross rental yield and market statistics for any area of idealista.com, idealista.pt or idealista.it: give an area (a search URL or a location slug) and get one report with the median price per m² for sale and for rent, quartiles, median asking price and rent, gross yield, the same split by rooms, price drops and new listings, computed from the live sale and rent listings of that area. You pay per report delivered, and a run that delivers nothing because of an error ends as Failed, never as a green empty run.

What you get

  • One report per area, and optionally one per sub-area (a city's districts, a district's neighbourhoods, a Portuguese municipality's parishes): the comparison investors want, in one run.
  • Yield: gross rental yield 12 × median rent per m² ÷ median sale price per m² and the price-to-rent ratio in years.
  • Sale and rent side each: number of listings, median, 25th and 75th percentile of the asking price and of the price per m², median size, share of listings with a price drop and the median drop in %, listings published in the last 7 days (count and share), share of private sellers / landlords (a percentage only, no names).
  • By rooms (0-1, 2, 3, 4+): sample size, median price, median price per m² and yield for each band.
  • Rentals: long-term lets only by default (idealista's own filter); the report also gives the number of rentals of every kind and the share of seasonal / temporary lets.
  • Honesty fields: saleSampled / rentSampled, saleSampleSize / rentSampleSize, lowSample, a method sentence saying how many listings were read, and warnings.
  • A comparison table of all areas of the run sorted by yield, with lowSample areas last (COMPARISON in the run's key-value store), and a run summary (OUTPUT_SUMMARY): what was requested, delivered and charged, pages read per area, inputs that failed or were ignored, why the run stopped.

What it does not return: individual listings, addresses, photos, contact data or any personal data (only aggregated figures), rental yields net of costs, sold prices (idealista shows asking prices), anything behind a login.

How to use

  1. Open idealista, search homes for sale or for rent in the area you want (a city, district or neighbourhood, optionally with filters such as flats only or 2 bedrooms), and copy the URL. Or type a slug such as madrid-madrid, madrid/centro, pt:lisboa, it:milano-milano.
  2. Paste it into Areas. Several areas are fine; each gets its own report.
  3. Turn on Also report every sub-area to get one report per district or neighbourhood.
  4. Press Start. Download the reports from the Output tab (JSON, CSV, Excel) or open the comparison table.

Input

FieldTypeDefaultWhat it does
areaslist of textnone (required)idealista homes search URLs (sale or rent, any of the three sites) or location slugs. For each area the matching sale and rent searches are read: a sale URL gives its rent counterpart and the other way round. Filters in the URL (rooms, size, type, features) apply to both sides; price and publication-date filters are dropped (and said so in warnings). Map views, page numbers and sort orders are ignored; URLs without https:// and slugs with accents (madrid/chamartín) are accepted. Offices, premises, garages, land and new-build searches are refused with a reason.
countryES / PT / ITESSite of a slug without a pt: / it: prefix.
includeSubAreasyes/nonoOne more report per place idealista lists one level below the area. Each is charged like an area report.
maxSubAreasnumber50At most this many sub-area reports per area, in idealista's order.
propertyTypehomes / flats / houseshomesidealista's flats or houses filter on both sides.
roomslistnoneOnly homes with these rooms: 0, 1, 2, 3, 4+. Spain and Portugal count bedrooms (0 = studio, T0); Italy counts rooms including the living room (1 = monolocale).
minSizeM2, maxSizeM2numbernoneSize band. idealista offers 60, 80, 100, 120, 140, 160, 180, 200, 300, 400 m²; a minimum is rounded down and a maximum up to these; a minimum below 60 or a maximum above 400 is not applied. The report says so in both cases.
rentTypelong-term / alllong-termLong-term lets only (recommended for yield), or all rentals including seasonal / temporary lets.
sampleSizenumber240Listings read per side of a large area (60 to 360). See "How the numbers are computed".
debugyes/nonoSaves the first results pages to the key-value store.
{
"areas": ["https://www.idealista.com/venta-viviendas/madrid/centro/"],
"includeSubAreas": true
}

This input gave 7 reports (Centro and its 6 neighbourhoods) in 172 s in run VA9vXTAfo5BL2SnFd on 2026-10-14.

Example result

From run x2pXZIxMwJUdOfVty on 2026-10-14 (input {"areas": ["pt:lisboa/ajuda"]}), unedited:

{
"id": "idealista.pt/casas/lisboa/ajuda|sale:|rent:arrendamento-longa-duracao",
"area": "Ajuda",
"level": "area",
"parentArea": null,
"locationId": "0-EU-PT-11-06-001-01",
"site": "idealista.pt",
"country": "PT",
"grossYieldPct": 5,
"priceToRentYears": 20,
"lowSample": false,
"saleListings": 169,
"saleSampleSize": 157,
"saleSampled": false,
"saleMedianPrice": 555000,
"saleP25Price": 369500,
"saleP75Price": 606750,
"saleMedianPricePerM2": 5278,
"saleP25PricePerM2": 4091,
"saleP75PricePerM2": 6881,
"saleMedianSizeM2": 94,
"salePriceDropSharePct": 8.9,
"saleMedianPriceDropPct": 3.4,
"saleNewLast7Days": 10,
"saleNewLast7DaysSharePct": 5.9,
"salePrivateSellerSharePct": 13.4,
"rentListings": 81,
"rentListingsAllLetTypes": 104,
"rentSeasonalLetListings": 23,
"rentSeasonalLetSharePct": 22.1,
"rentSampleSize": 81,
"rentSampled": false,
"rentMedianPrice": 1350,
"rentP25Price": 1167,
"rentP75Price": 1600,
"rentMedianPricePerM2": 22,
"rentP25PricePerM2": 17.86,
"rentP75PricePerM2": 25.03,
"rentMedianSizeM2": 65,
"rentPriceDropSharePct": 11.1,
"rentMedianPriceDropPct": 6.9,
"rentNewLast7Days": 12,
"rentNewLast7DaysSharePct": 14.8,
"rentPrivateLandlordSharePct": 30.9,
"roomsCountedAs": "bedrooms",
"byRooms": [
{ "rooms": "0-1", "saleSampleSize": 25, "saleMedianPrice": 315000, "saleMedianPricePerM2": 6044, "rentSampleSize": 38, "rentMedianPrice": 1162, "rentMedianPricePerM2": 24.38, "grossYieldPct": 4.84 },
{ "rooms": "2", "saleSampleSize": 53, "saleMedianPrice": 485000, "saleMedianPricePerM2": 5795, "rentSampleSize": 35, "rentMedianPrice": 1500, "rentMedianPricePerM2": 20, "grossYieldPct": 4.14 },
{ "rooms": "3", "saleSampleSize": 33, "saleMedianPrice": 540000, "saleMedianPricePerM2": 4947, "rentSampleSize": 8, "rentMedianPrice": 1998, "rentMedianPricePerM2": 17.69, "grossYieldPct": 4.29 },
{ "rooms": "4+", "saleSampleSize": 46, "saleMedianPrice": 555000, "saleMedianPricePerM2": 4269, "rentSampleSize": 0, "rentMedianPrice": null, "rentMedianPricePerM2": null, "grossYieldPct": null }
],
"rentType": "long-term",
"filters": { "sale": [], "rent": ["arrendamento-longa-duracao"] },
"saleUrl": "https://www.idealista.pt/comprar-casas/lisboa/ajuda/",
"rentUrl": "https://www.idealista.pt/arrendar-casas/lisboa/ajuda/com-arrendamento-longa-duracao/",
"method": "Sale: all 169 listings read; Rent: all 81 listings read.",
"warnings": ["12 sale listings read were left out as not a free-market price (bare ownership, occupied or tenanted, auction)."],
"currency": "EUR",
"reportedAt": "2026-10-14T16:12:17.119Z"
}
FieldMeaning
idSite, place and filters of each side; stable between runs.
area, level, parentArea, locationIdName as idealista shows it; area or sub-area; the area a sub-area belongs to; idealista's location id.
grossYieldPct12 × rentMedianPricePerM2 ÷ saleMedianPricePerM2 × 100 (unrounded medians). null when either side has fewer than 5 listings with price and size.
priceToRentYearsSale price per m² ÷ 12 months of rent per m².
lowSampletrue when either side has fewer than 30 listings with price and size: the figures are indicative.
saleListings, rentListingsListings idealista counts for the search (the results page total).
saleSampleSize, rentSampleSizeListings actually used for the price per m² figures (free-market price and a size of at least 10 m²).
saleSampled, rentSampledfalse: every listing was read (exact). true: a sample was read (see below).
…MedianPrice, …P25Price, …P75PriceAsking price (sale) or monthly rent, in EUR.
…MedianPricePerM2, …P25PricePerM2, …P75PricePerM2Price per m² (sale, whole euros) or monthly rent per m² (two decimals).
…PriceDropSharePct, …MedianPriceDropPctShare of listings showing a reduced price, and the median reduction in %.
…NewLast7Days, …NewLast7DaysSharePctListings idealista's "published in the last week" filter returns, and their share of the side.
salePrivateSellerSharePct, rentPrivateLandlordSharePctShare of listings not advertised by a professional.
rentListingsAllLetTypes, rentSeasonalLetListings, rentSeasonalLetSharePctWith long-term lets: rentals of every kind, and seasonal / temporary lets among them.
roomsCountedAsbedrooms (Spain, Portugal) or rooms incl. living room (Italy): how the byRooms bands count.
byRoomsThe same figures per rooms band. A band's yield needs at least 5 listings on each side.
method, warningsHow many listings were read on how many pages; small samples, dropped filters, listings left out.

Fields that cannot be computed are null, never missing.

How the numbers are computed

  • Only results pages are read (cards: price, previous price, size, rooms, tags), never property pages. Pages are read sorted by price, cheapest first.
  • Small sides are read in full (exact figures, saleSampled: false): up to sampleSize listings plus 4 more results pages (120 listings). At the default 240, that is every side of up to 360 listings.
  • Larger sides are sampled (saleSampled: true): sampleSize listings on results pages at evenly spaced positions across the price-sorted list, cheapest to dearest, each page weighted by the share of the list it stands for. idealista shows at most 60 pages per search; deeper positions are reached with a price floor whose total gives each page's exact position. Against a full read of the same Madrid neighbourhood (374 listings for sale, 2026-10-14) the sample's median sale price per m² was 1.9% off and the yield 0.07 points off; for rooms bands the error can be about 10%.
  • Sale listings that are not a free-market price are left out and counted in warnings: bare ownership, occupied, tenanted (tagged "Alquilada", "Arrendada", "Affittata") and auctions. Seasonal lets are left out of the long-term rent side.
  • New-listing counts come from idealista's own "last week" filter (top-level areas: one extra page per side; sub-areas: from the same page's breadcrumb counts, no extra request).
  • Gross yield is before costs, vacancy and taxes, from asking prices and asking rents.

Pricing

Pay per event. You pay for reports delivered, not for time or proxy traffic.

EventFreeBronzeSilverGold and above
Actor start (per GB of memory, 2 GB by default)$0.0042$0.0035$0.00315$0.0028
Area report delivered (area or sub-area)$0.06$0.05$0.045$0.04

Worked example (Bronze): Madrid Centro with its 6 neighbourhoods = 7 reports × $0.05 + 2 × $0.0035 = $0.357.

  • An area that idealista lists no homes for gives no report and is not charged. A failed area is not charged.
  • The maximum total charge you set for a run is respected: the actor stops before it would go over, keeps what was delivered, and says so in the status message (run lnRGa4T24gfG0sBi4: limit $0.108, 2 reports delivered and charged).
  • The price is the same for every sampleSize.

Reliability and failure behaviour

What happenedRun statusStatus message
Reports deliveredSucceededScraped 7 area reports from 1 query
idealista lists no homes for the area and filtersSucceeded0 results: idealista has no area reports for this query — idealista lists no homes for sale or rent matching …
Some areas worked, some failedSucceededScraped 1 area report from 2 queries — 1 of 2 queries failed (…)
Nothing delivered because of errors or blockingFailedNo area reports delivered: idealista blocked every attempt; try again later. No reports were charged (the start fee applies).
Input the actor cannot useFailed, within secondsNothing to do: none of the 2 entries in the input is usable (…). Add at least one entry to "areas", e.g. …
A place idealista does not knowFailed… idealista has no results page at … (HTTP 404): check the location (copy it from an idealista search URL)
Maximum charge reachedSucceededScraped 2 area reports from 1 query — stopped at the maximum charge set for this run
  • The reason a run ended is also always in the run log and in OUTPUT_SUMMARY (stopReason, failedInputs, and ignoredInputs with every unusable entry and why).

  • idealista is protected by an anti-bot service. Each run uses a real Firefox browser through a residential proxy of the site's country and reads one page at a time. A refused browser session is replaced (up to 6 in a row per page, 25 per run); run t7hPmmmqWscRTZHRa met 3 refused sessions and delivered all 7 reports.

  • Reports are saved one by one. A run that is aborted, times out or is restarted keeps what was delivered and never delivers or charges the same report twice (live check: run j0S934tp13HcIeCJe was restarted after 2 reports and charged 5 reports for 5 delivered).

  • On 2026-10-14, 12 of 12 test runs on the final code (builds 0.1.4 and 0.1.5) ended as intended (10 with reports on all three sites, 1 with 0 results, 1 refused input).

Limits

  • Figures come from asking prices and asking rents, not transactions.
  • Large areas are sampled (240 listings per side by default, 360 at most): medians are estimates, rooms bands more so. Small sub-areas often have few rentals: check lowSample and rentSampleSize.
  • Speed: under a minute for one small area (17-31 s measured), about 3 minutes for a district with 6 sub-areas, about 5 minutes for 11 reports.
  • In Italy many sale listings are auctions ("Asta") and are left out, so saleSampleSize can be well below the listings read (Torino: 75 of 240 left out). The count is in warnings.
  • Italy has no studio band of its own ("0" is not a filter there): monolocali count as 1 room.
  • Spain, Portugal and Italy only (the three idealista sites). Homes only.

FAQ

Why is the yield of a neighbourhood missing? Fewer than 5 listings with price and size on one side. The other figures are still given, and the report is ranked last in the comparison table.

Why does saleSampleSize differ from saleListings? Large areas are sampled; and listings without a size, or not at a market price (auctions, bare ownership, tenanted), are left out of the per-m² figures.

Can I run it from code or on a schedule? Yes: the API, the Apify clients for JavaScript and Python, schedules, and integrations such as Make, Zapier and n8n. A monthly schedule per city gives a market tracker.

What happens when idealista changes its pages? A page that cannot be read fails the area loudly (could not be read … idealista may have changed its layout) instead of returning empty figures. Report the run id under Issues.

This actor reads listing data that idealista shows publicly without a login and returns only aggregated statistics per area. It returns no personal data: no names, phone numbers, emails, photos or user ids of sellers or landlords, only the share of listings by private advertisers.

You are responsible for how you use the data: respect idealista's terms, copyright and database rights, and data-protection law in your country. The figures are not investment advice.

Changelog

  • 2026-10-14: first version. Studios counted in the 0-1 rooms band in Spain; tenanted homes left out in all three countries; lowSample and roomsCountedAs fields; no yield from fewer than 5 listings on a side; sides up to sample size + 120 listings read in full.

Other actors by the same developer:

  • Idealista Scraper: the individual listings behind these figures, from any idealista search URL in Spain, Portugal or Italy, with price, price drop, size, rooms, agency and, optionally, full details and coordinates. Use it to shortlist properties in the areas with the best yield.
  • Fotocasa Scraper: sale and rent listings from fotocasa.es, another of Spain's main property portals, with price per m² and price drops.
  • Immobiliare.it Scraper: sale, rent and auction listings from immobiliare.it, for Italian areas.
  • Listing Status Checker: re-checks saved Fotocasa, ImmoScout24 and Kleinanzeigen listing URLs (among others) for online, sold or removed status and price changes. It does not check idealista URLs.

Support

Open an issue on the actor's Issues tab with the run id.