To scrape Idealista, give a ready-made Actor a city, district or postal code, paste an Idealista results URL you already filtered on the site, or list property codes, and it returns one row per listing: price, size in m², rooms, bathrooms, floor, lift, condition, coordinates, every photo, the full description and whether the advertiser is an agency or a private owner. On Scrape.ly that's a preset and one click, or one API call, with no Idealista account and no proxy setup.
This guide covers the fields you get, the no-code steps, the same job in curl, Python, Node.js and through an AI agent, a real run from 27 October 2026 (eight Madrid rentals), its log and exact cost, and how to export more than Idealista's 1,800-result window.
What data you can get from Idealista
The Idealista Scraper returns one row per listing:
| Field | What it holds |
|---|---|
propertyCode, url | The Idealista code and listing link |
price, priceByArea | Asking price or monthly rent, and price per m² where Idealista shows it |
propertyType, operation, status | Flat, studio, house and so on; sale or rent; condition |
size, rooms, bathrooms, floor, hasLift, exterior | Home facts |
address, district, municipality, province, latitude, longitude | Location, when the advertiser shows it |
description, suggestedTexts.title | The full ad text and title |
thumbnail, multimedia.images, numPhotos | Photo links |
contactInfo | Advertiser type (professional or private), agency name and logo |
features, parkingSpace, labels | Pool, terrace, air conditioning, parking, and labels such as seasonal rental or tenanted |
Description, coordinates, bathrooms, photos and advertiser come from each listing page, with Full listing details on (the default). Turn it off for search-card data only, in less than half the time.
How to scrape Idealista without code
- Open the Idealista Scraper in the Scrape.ly Store.
- Pick the Homes for rent in Madrid, 8 listings preset. It fills in this input:
{
"location": "Madrid",
"country": "es",
"operation": "rent",
"propertyType": "homes",
"maxItems": 8
}- Change the location, or paste your own Idealista results URL, and click Start. Our run took 14 seconds.
- Open the dataset and export it as JSON, CSV, Excel or HTML.
The input fields that matter most:
locationorlocations: places or postal codes such asSegovia,Marbellaor28001; Idealista's own place search picks the match.startUrls: results pages (filters and sort order kept) or listing pages, on idealista.com, idealista.it or idealista.pt.propertyCodes: listing codes such as112801269, to open specific listings.operation,propertyType,country,sortBy: sale or rent, homes, offices, garages, rooms and more, the site, and the order.minPrice,maxPrice,minSize,bedrooms,bathrooms,homeType,condition,floor,publicationDate: filters, plus switches such aslift,terrace,swimmingPool,seaViewsandbankOffer.maxItems: total listings;0takes everything the search returns.
Other presets cover Valencia homes €100k–300k with a terrace, homes for sale in Milan and homes for sale in Lisbon.
How to scrape Idealista with the API
Create a token under Settings → API & Integrations in the dashboard and store it as SCRAPELY_TOKEN. Small searches finish well inside the synchronous endpoint's 45-second wait:
curl -X POST "https://api.scrape.ly/v2/actors/roamandroof~idealista-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $SCRAPELY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"location": "Valencia", "operation": "sale", "maxPrice": 300000, "bedrooms": ["2", "3"], "terrace": true, "maxItems": 20}'Add ?format=csv for a CSV. For whole cities, start the run asynchronously (POST /v2/actors/roamandroof~idealista-scraper/runs), poll /v2/actor-runs/RUN_ID?waitForFinish=60, then read /v2/actor-runs/RUN_ID/dataset/items?format=csv. The API docs cover each step.
In Python (pip install scrapely-client-python), this rent tracker pulls Madrid's newest rentals and prints the median rent per m² by district:
import os
from collections import defaultdict
from statistics import median
from scrapely_client import ScrapelyClient
client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")
run = client.actor("roamandroof/idealista-scraper").call(
run_input={"location": "Madrid", "operation": "rent", "propertyType": "homes",
"sortBy": "mostRecent", "maxItems": 500}
)
per_m2 = defaultdict(list)
for home in client.dataset(run.default_dataset_id).iterate_items():
if home.get("price") and home.get("size"):
per_m2[home.get("district") or "unknown"].append(home["price"] / home["size"])
for district, values in sorted(per_m2.items(), key=lambda kv: -median(kv[1])):
print(f"{district:30} {median(values):6.1f} €/m² ({len(values)} listings)")In JavaScript or Node.js (npm install scrapely-client), get only listings published in the last day, for a daily alert:
import { ScrapelyClient } from 'scrapely-client';
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });
const run = await client.actor('roamandroof/idealista-scraper').call({
location: 'Barcelona',
operation: 'sale',
publicationDate: 'T',
maxPrice: 400000,
maxItems: 0,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const h of items) console.log(h.price, h.size, h.district, h.url);The Python client docs cover paging through large datasets.
With an AI agent (MCP)
Scrape.ly runs a hosted MCP server at https://mcp.scrape.ly. In Cursor, add it to ~/.cursor/mcp.json:
{
"mcpServers": {
"scrapely": {
"url": "https://mcp.scrape.ly",
"headers": { "Authorization": "Bearer YOUR_TOKEN" }
}
}
}In Claude Code, run claude mcp add --transport http scrapely https://mcp.scrape.ly, then /mcp to sign in with OAuth. Then ask: "Use scrapely to get 200 Idealista rentals in Madrid and compare rent per m² across districts, separating private owners from agencies." The MCP docs list ChatGPT, VS Code, Windsurf and the other clients.
A real run: eight Madrid rentals
We ran the preset as-is on 27 October 2026. It saved 8 listings in 14 seconds. Street addresses are left out here, because several advertisers are private owners:
| District | Type | Rent / month | Size | Rooms / baths | Floor | €/m² | Advertiser |
|---|---|---|---|---|---|---|---|
| Chueca-Justicia | Flat | €3,400 | 120 m² | 3 / 2 | 1 | €28.3 | Agency (seasonal) |
| Fuente del Berro | Flat | €2,400 | 111 m² | 4 / 2 | 3 | €21.6 | Agency (seasonal) |
| Prosperidad | Flat | €900 | 65 m² | 1 / 1 | Mezzanine | €13.8 | Private |
| Cuatro Caminos | Flat | €1,650 | 60 m² | 2 / 1 | 24 | €27.5 | Private |
| Arapiles | Flat | €2,490 | 140 m² | 4 / 3 | 3 | €17.8 | Agency |
| Malasaña-Universidad | Studio | €900 | 35 m² | 0 / 1 | 4 | €25.7 | Private |
| Pilar | Flat | €1,495 | 56 m² | 2 / 1 | 6 | €26.7 | Agency |
| Chueca-Justicia | Flat | €1,450 | 60 m² | 2 / 2 | 2 | €24.2 | Private |
2026-10-27T17:17:33.833Z [scrapely.actor] INFO Opening https://www.idealista.com through RESIDENTIAL.
2026-10-27T17:17:39.563Z [scrapely.actor] INFO Searching "Madrid" (Madrid, Madrid).
2026-10-27T17:17:44.021Z [scrapely.actor] INFO Page 1: 8 listings, details in 3.5 s.
2026-10-27T17:17:44.277Z [scrapely.actor] INFO [Status message]: Saved 8 listings.What the eight rows show:
- Rent per m² is the number to compare. Rents ran from €900 to €3,400, but per m² the spread is much tighter, €13.8 to €28.3. The two cheapest were a 35 m² studio and a mezzanine flat in Prosperidad at under €14 per m².
- Seasonal rentals skew the average. The two most expensive listings carried the label
Alquiler de temporada(seasonal rental), which in Madrid usually means furnished, shorter lets at higher prices. Filterlabelsor setrentalTypes: ["longTerm"]before you report a market rent. - Half the market is private owners. Four of the eight were private advertisers and four agencies.
contactInfo.userTypelets you split them, which matters if you're studying agency fees or direct-from-owner supply. - Rentals don't carry price per m².
priceByAreawas empty on all eight rentals, so compute it frompriceandsize, as the Python script does. - Photo counts vary from 0 to 52. A listing with no photos is often fresh or low-effort;
numPhotosis a cheap quality signal for ranking leads.
The run used Idealista's own place search for "Madrid" and opened each listing for its details, on residential proxies built into the Actor.
What it costs
The Actor charges one event per listing, platform usage (compute, proxy and browser) included. Price checked on the Store page on 27 October 2026: $0.000522 per listing, which is $0.522 per 1,000 listings.
Our run: 8 × $0.000522 = $0.004176 at list price ($0.00334 charged, because our plan has a Store discount).
At scale: 10,000 listings cost $5.22. A daily new-listings run of 300 homes in five cities is 1,500 listings, $0.78 a day. The Free plan's $5 of monthly usage covers about 9,500 listings.
What to watch out for
- 1,800 results per search. That's Idealista's own window. For a Location search, the Actor keeps going in price order and removes duplicates; a pasted results URL stops at 1,800 and says how many exist.
- No phone numbers. Idealista shows them only to logged-in users, and the Actor never logs in.
- Hidden addresses mean no coordinates. Advertisers who hide the address have no latitude and longitude.
- Filters are Spanish-site filters. For Italy, set the filters on idealista.it and paste the results URL. Portugal and France sit behind an extra check that can make a run slower.
- Private advertisers are people. Names, descriptions that mention them, and exact addresses of private listings are personal data under the GDPR.
Is it legal to scrape Idealista?
The Actor reads only public listing pages that anyone can open without an account. Read Idealista's general conditions before a commercial project; whether and how site terms bind you depends on your jurisdiction, whether you have an account that accepted them, and your use. Idealista also offers its own Search API, which "lets you integrate property information published on idealista into your site or app"; per its access request page, "To receive an API key get in touch and tell us a bit about your project."
Because Idealista operates in the EU, the GDPR applies to any personal data you collect, such as private advertisers and exact addresses. Keep what you need for the analysis and drop the rest; our GDPR and web scraping guide explains how. This is not legal advice; for a commercial project, ask a lawyer about your case.
Why Scrape.ly for Idealista
- No API application. Search, filter and export today with one Scrape.ly token, instead of waiting for an API key.
- Past the 1,800 window. Location searches continue in price order with duplicates removed, so a whole city is one run.
- Three countries, one Actor. Spain, Italy and Portugal, with the residential proxy built in and nothing to configure.
- More European property data. The same token runs scrapers for Immobiliare.it, SeLoger and Rightmove; our real estate data scraping guide shows how to combine them.
FAQ
Can you scrape Idealista for free?
Yes. The Free plan includes $5 of usage credit every month with no credit card, which covers about 9,500 listings at list price.
Does Idealista have an API?
Yes, the idealista Search API, which you request through its developer site by describing your project. The Actor needs no application and returns the same listings as JSON through the Scrape.ly API.
Can I scrape Idealista in Italy and Portugal?
Yes. Set country to it or pt for a location search, or paste an idealista.it or idealista.pt results URL with the filters you set on the site.
How do I get only new listings?
Set publicationDate, Idealista's own "published" filter, which takes T, Y, W or M for windows from the last day to the last month, sort by mostRecent and schedule the run daily.
Does it include phone numbers?
No. Idealista shows phone numbers only to logged-in users. You get the advertiser type, agency name and agency page instead.
Can I scrape Idealista with Python?
Yes. Install scrapely-client-python and call roamandroof/idealista-scraper, as in the rent tracker above. The scraping runs in the cloud, so you don't manage proxies or sessions.




