Skip to content

How to Scrape Idealista Listings: Prices, Size, Rooms and Coordinates

Scrape Idealista listings in Spain, Italy and Portugal by city, postal code, results URL or property code: price, size, rooms, floor, coordinates, photos and advertiser. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.

Published
Reading time
7 min read
Pixel-art robot with an orange >_ on its terminal head pulls a listing card with a house icon out of an apartment block with balconies whose sign shows the lime idealista logo, and drops it into a crate
In this article
  1. What data you can get from Idealista
  2. How to scrape Idealista without code
  3. How to scrape Idealista with the API
  4. With an AI agent (MCP)
  5. A real run: eight Madrid rentals
  6. What it costs
  7. What to watch out for
  8. Is it legal to scrape Idealista?
  9. Why Scrape.ly for Idealista
  10. FAQ
  11. Can you scrape Idealista for free?
  12. Does Idealista have an API?
  13. Can I scrape Idealista in Italy and Portugal?
  14. How do I get only new listings?
  15. Does it include phone numbers?
  16. Can I scrape Idealista with Python?

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

  1. Open the Idealista Scraper in the Scrape.ly Store.
  2. Pick the Homes for rent in Madrid, 8 listings preset. It fills in this input:
json
{
  "location": "Madrid",
  "country": "es",
  "operation": "rent",
  "propertyType": "homes",
  "maxItems": 8
}
  1. Change the location, or paste your own Idealista results URL, and click Start. Our run took 14 seconds.
  2. Open the dataset and export it as JSON, CSV, Excel or HTML.

The input fields that matter most:

  • location or locations: places or postal codes such as Segovia, Marbella or 28001; 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 as 112801269, 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 as lift, terrace, swimmingPool, seaViews and bankOffer.
  • maxItems: total listings; 0 takes 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:

shell
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:

python
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:

javascript
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:

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
Text
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. Filter labels or set rentalTypes: ["longTerm"] before you report a market rent.
  • Half the market is private owners. Four of the eight were private advertisers and four agencies. contactInfo.userType lets you split them, which matters if you're studying agency fees or direct-from-owner supply.
  • Rentals don't carry price per m². priceByArea was empty on all eight rentals, so compute it from price and size, as the Python script does.
  • Photo counts vary from 0 to 52. A listing with no photos is often fresh or low-effort; numPhotos is 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.

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.

  • idealista
  • real estate
  • spain
  • rental market
  • python
  • api

About the author

Actor publisher on the Scrape.ly Store

Homes, stays, trips and cars: listings from 40+ property portals, the big travel and booking sites and the main car marketplaces. For agents, investors, travel analysts and dealers. A Scrapely studio.

//Keep reading\\

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes.

No credit card. No setup calls.