← Blog

Real estate

Idealista Scraper: Export Listings from Spain, Italy, Portugal

Scrape Idealista property listings in Spain, Italy, Portugal and France: prices, size, rooms, coordinates, photos. No-code steps, JSON input and API examples.

Epic Scrapers

Idealista is the main property portal in Spain, Italy and Portugal, and it also covers France. If you need asking prices, price per square metre or inventory counts for a city or neighbourhood, the listings are the best public source available. You can’t download them from the site, though.

This tutorial shows how to export Idealista listings into JSON, CSV or Excel with the Idealista Scraper on Apify, either from a search URL you’ve already set up or from a city name, and how to automate it with the API.

What data you get

Each property becomes one record. With includeDetails on, you get:

  • id, propertyCode, url
  • country (es, it, pt, fr), operation (sale or rent), propertyType
  • price, currency, size (m²), rooms, bathrooms
  • address, municipality, province, latitude, longitude
  • description, thumbnail, multimedia.images (when includeMultimedia is on)
  • features such as hasTerrace, hasSwimmingPool, hasAirConditioning, hasGarden
  • sourceUrl, scrapedAt, status

Example record (trimmed):

{
  "id": "35585970",
  "url": "https://www.idealista.it/immobile/35585970/",
  "country": "it",
  "operation": "sale",
  "propertyType": "chalet",
  "price": 37000,
  "currency": "EUR",
  "size": 172,
  "rooms": 6,
  "bathrooms": 2,
  "address": "Detached house in Località Scabbiabella, 24, Torriglia",
  "municipality": "Torriglia",
  "province": "Genova",
  "latitude": 44.5184183,
  "longitude": 9.1172171,
  "features": { "hasTerrace": true, "hasSwimmingPool": false, "hasGarden": false },
  "sourceUrl": "https://www.idealista.it/en/vendita-case/genova-provincia/",
  "scrapedAt": "2026-07-11T14:14:42.211Z",
  "status": "success"
}

Not every listing fills every field. Coordinates and bathroom counts, for example, depend on what the advertiser entered.

Option 1: Scrape an Idealista search URL (easiest)

Set up your search on Idealista first, then copy the URL. All the filters you chose (area, price, rooms, features) carry over.

  1. Go to idealista.com, idealista.it or idealista.pt and run your search with filters.
  2. Copy the URL of the results page. A single property URL also works.
  3. Open the Idealista Scraper and click Try for free.
  4. Paste the URL into Idealista URLs and set a result limit.
  5. Click Start, then export the dataset as CSV, Excel or JSON.
{
  "startUrls": [
    { "url": "https://www.idealista.it/vendita-case/genova-provincia/" }
  ],
  "maxResults": 100,
  "includeDetails": true,
  "includeMultimedia": false
}

The country and language are detected from the URL, so a Spanish and an Italian search can go in the same run. maxResults applies to each URL, and pagination is handled for you.

Option 2: Search by city name

If you don’t have a URL, describe the search instead:

{
  "country": "es",
  "operation": "rent",
  "propertyType": "homes",
  "locationQuery": "Valencia",
  "locationSelectionMode": "best",
  "minPrice": 800,
  "maxPrice": 1500,
  "minRooms": 2,
  "elevator": true,
  "maxResults": 200,
  "includeDetails": true
}

Valid values:

Input Options
country es, it, pt, fr
operation sale, rent
propertyType homes, offices, premises, garages, lands, buildings, rooms, newDevelopments
locationSelectionMode best, all, exact

You can also filter by minSize/maxSize (m²), maxRooms, minBathrooms, and with boolean flags: hasPhotos, hasPlan, exterior, elevator, airConditioning, garage, heating, accessible and security. If a place name matches several Idealista areas, use locationSelectionMode: "all" to cover them all, or exact to keep only the exact name.

Which options to turn on

  • includeDetails: richer records from each property page. Slower, but it’s what you want for analysis.
  • includeMultimedia: the full photo set. Leave it off unless you need images, since search results already include a thumbnail.
  • includeRecommendations: similar properties suggested by Idealista, useful for finding comparables.

You can leave the advanced settings (itemsPerPage, searchConcurrency, maxRetries) at their defaults. The actor uses Apify Residential Proxy matched to the listing country by default.

Run it through the API

cURL, returning the results in a single request:

curl -X POST \
  "https://api.apify.com/v2/acts/epicscrapers~idealista-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN&format=csv" \
  -H "Content-Type: application/json" \
  -d '{"country":"pt","operation":"sale","propertyType":"homes","locationQuery":"Lisboa","maxResults":100,"includeDetails":true}'

Python, computing the median price per m² by municipality:

import os
import pandas as pd
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("epicscrapers/idealista-scraper").call(run_input={
    "startUrls": [{"url": "https://www.idealista.com/venta-viviendas/madrid-madrid/"}],
    "maxResults": 500,
    "includeDetails": True,
})

df = pd.DataFrame(client.dataset(run["defaultDatasetId"]).iterate_items())
df = df[df["status"] == "success"].dropna(subset=["price", "size"])
df["eur_per_m2"] = df["price"] / df["size"]
print(df.groupby("municipality")["eur_per_m2"].median().sort_values())

For larger jobs, start the run asynchronously and read defaultDatasetId when it finishes.

Monitor new listings and price drops

Save a working input as an Apify task and schedule it daily or weekly. Every record has a stable id and a scrapedAt timestamp, so comparing two runs is straightforward:

  • New listings: IDs in today’s run that weren’t in yesterday’s.
  • Price changes: the same id with a different price.
  • Removed listings: IDs that have disappeared, which usually means the property was sold, let or withdrawn.

Send the dataset to Google Sheets, a database or Make/Zapier through Apify integrations, or trigger a webhook when each run finishes.

Who uses Idealista data

  • Investors screen cities for yield by comparing sale price per m² with rents for the same area.
  • Agencies track competitor inventory and new listings in their patch.
  • Relocating renters get alerts the moment a flat matching their criteria appears.
  • Analysts and proptech teams build price indices, heatmaps (using latitude/longitude) and valuation models.

Working across more markets? See the Rightmove scraper guide for the UK and the Subito scraper guide for Italian classifieds.

FAQ

Does Idealista have an API?

Idealista runs a developer API, but access is by application and comes with tight limits. It’s mainly aimed at partners. For most research and monitoring, exporting the public listings is faster.

Collecting publicly listed property data for analysis is common practice. Respect Idealista’s terms, keep request volumes reasonable, and handle any personal data (such as agent or advertiser contact details) according to GDPR. This isn’t legal advice.

Can I scrape Idealista rentals?

Yes. Use a rental search URL, or set operation to rent. For room lets, use propertyType: "rooms".

How many listings can I get?

As many as the search returns, up to the maxResults you set per URL or location. Start with 100 to check cost and output, then increase it. See the Pricing tab on the actor page for current rates.

Can I export to Excel?

Yes. Every run’s dataset can be downloaded as CSV, Excel, JSON or XML.

Start scraping Idealista

Copy a filtered Idealista search URL, paste it in, and you’ll have a spreadsheet of listings in a few minutes. Run the Idealista Scraper on Apify.