---
title: "How to Scrape Idealista Listings | Scrape.ly"
description: "Scrape Idealista listings in Spain, Italy and Portugal: price, size, rooms, floor, coordinates and advertiser. A real run, its cost, and API and MCP code."
url: https://scrape.ly/blog/scrape-idealista
markdown: https://scrape.ly/blog/scrape-idealista.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# 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.

[Roam & Roof Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/roamandroof.md)

- Published

  Oct 27, 2026

- 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](https://scrape.ly/media/scrape-idealista.png?w=1080)

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](https://scrape.ly/store/roamandroof/idealista-scraper.md) 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](https://scrape.ly/store/roamandroof/idealista-scraper/presets/es-madrid-rent.md) preset. It fills in this input:

```json
{
  "location": "Madrid",
  "country": "es",
  "operation": "rent",
  "propertyType": "homes",
  "maxItems": 8
}
```

3. Change the location, or paste your own Idealista results URL, and click **Start**. Our run took 14 seconds.
4. 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](https://scrape.ly/store/roamandroof/idealista-scraper/presets/es-filters-no-details.md), [homes for sale in Milan](https://scrape.ly/store/roamandroof/idealista-scraper/presets/it-milano-sale.md) and [homes for sale in Lisbon](https://scrape.ly/store/roamandroof/idealista-scraper/presets/pt-lisboa-sale.md).

Scrape.ly Store Idealista Scraper Idealista listings in Spain, Italy and Portugal by place, results URL or property code: price, size, rooms, floor, coordinates, photos and advertiser, with no login.

[Try it free](https://scrape.ly/store/roamandroof/idealista-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## 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](https://scrape.ly/docs/api-actors.md) 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](https://scrape.ly/docs/client-python.md) 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](https://scrape.ly/docs/mcp.md) 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           |

```plaintext
20261027T17:17:33.833Z [scrapely.actor] INFO  Opening https://www.idealista.com through RESIDENTIAL.
20261027T17:17:39.563Z [scrapely.actor] INFO  Searching "Madrid" (Madrid, Madrid).
20261027T17:17:44.021Z [scrapely.actor] INFO  Page 1: 8 listings, details in 3.5 s.
20261027T17: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.

## 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](https://developers.idealista.com/access-request), "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](https://scrape.ly/blog/gdpr-web-scraping.md) 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](https://scrape.ly/store/roamandroof/immobiliare-scraper.md), [SeLoger](https://scrape.ly/store/roamandroof/seloger-scraper.md) and [Rightmove](https://scrape.ly/store/roamandroof/rightmove-scraper.md); our [real estate data scraping](https://scrape.ly/blog/real-estate-data-scraping.md) 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.

Scrape.ly Store Start with the Madrid rentals preset Run the preset as-is or type your own city or postal code. Price, size, rooms, floor and coordinates at $0.522 per 1,000 listings, platform usage included.

[Try it free](https://scrape.ly/store/roamandroof/idealista-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Roam & Roof](https://scrape.ly/blog/author/roamandroof.md) 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.

- [Website](https://scrape.ly/users/roamandroof.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a red house icon off two houses at night, in front of which a yard sign shows the red Realtor.com house logo, and drops it into a crate](https://scrape.ly/media/scrape-realtor-com.png?w=750)](https://scrape.ly/blog/scrape-realtor-com.md)
  ### [How to Scrape Realtor.com Listings: Prices, History, Taxes and Risk Scores](https://scrape.ly/blog/scrape-realtor-com.md)
  [Scrape Realtor.com listings for sale, for rent or recently sold by city, ZIP code or URL: price, beds, baths, square feet, sale and price history, tax records, schools and flood and wildfire risk. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-realtor-com.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls a listing card with a red house icon off a house at night, beside a yard sign with the red Redfin logo and a green bush, and drops it into a crate](https://scrape.ly/media/scrape-redfin.png?w=750)](https://scrape.ly/blog/scrape-redfin.md)
  ### [How to Scrape Redfin Listings: Prices, Redfin Estimates, History and Schools](https://scrape.ly/blog/scrape-redfin.md)
  [Scrape Redfin listings for sale, sold or for rent from any Redfin search URL, city or ZIP code: price, Redfin Estimate, beds, baths, square feet, price and tax history, schools and coordinates. No-code steps, curl, Python, Node.js and MCP, plus a real run from 27 October 2026 and its exact cost.](https://scrape.ly/blog/scrape-redfin.md)
- [![Pixel-art robot with an orange >\_ on its terminal head pulls an image pin with a red save button off a cork board topped with the red Pinterest logo and covered in photo pins of different heights, and drops it into a crate](https://scrape.ly/media/scrape-pinterest.png?w=750)](https://scrape.ly/blog/scrape-pinterest.md)
  ### [How to Scrape Pinterest: Pins, Boards, Profiles, Search Results and Comments](https://scrape.ly/blog/scrape-pinterest.md)
  [Scrape Pinterest pins, boards, profiles, idea pages and search results without a login: title, description, images, source domain, likes, saves, board, comments and profile stats. No-code presets, curl, Python, Node.js and MCP, plus a real run, exact costs and the limits that matter.](https://scrape.ly/blog/scrape-pinterest.md)

## 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.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:hello@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
