Idealista Market Intel Scraper

Extract public Idealista property listings and normalized market intelligence for Spain, Portugal, and Italy.

Data fields

FieldTypeDescription
idstringValue exported as id.
urlstringValue exported as url.
countrystringValue exported as country.
operationstringValue exported as operation.
propertyTypestringValue exported as propertyType.
titlestringValue exported as title.
descriptionstringValue exported as description.
pricenumberValue exported as price.

Input preview

startUrlsIdealista search or property URLs *
maxItemsMaximum listings
fetchDetailsFetch full property details

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

This Idealista scraper turns public search and property pages into analysis-ready Idealista data for Spain, Portugal, and Italy. Use it to monitor asking prices, compare price per square metre, build listing inventories, or access structured results as an Idealista API workflow.

What it extracts

Each unique property record includes its stable Idealista ID, canonical URL, country, operation, property type, title, price and currency. When publicly available, records also include:

  • price per square metre, size, rooms, bathrooms, floor, and condition
  • address, municipality, province, latitude, and longitude
  • lift, parking, terrace, and swimming-pool flags
  • description, images, video, virtual tour, and energy ratings
  • agency/contact details and publication timestamps
  • source input URL, extraction mode, and fetch timestamp

Missing upstream values remain absent; the Actor does not invent market estimates or unavailable attributes.

Output fields

Group Dataset fields
Identity id, url, country, operation, propertyType, title
Pricing and layout price, currency, pricePerSquareMeter, size, rooms, bathrooms, floor, condition
Location address, locationName, municipality, province, latitude, longitude
Features hasLift, hasParking, hasTerrace, hasSwimmingPool
Content and media description, images, videoUrl, virtualTourUrl, energyConsumption, energyEmissions
Contact and timing contactName, agencyName, phone, publishedAt, updatedAt
Provenance source (platform, input URL, fetch time, and search/detail mode)

Input

{
  "startUrls": [{ "url": "https://www.idealista.com/venta-viviendas/madrid-madrid/" }],
  "maxItems": 25,
  "fetchDetails": true
}
  • startUrls (required): public HTTPS Idealista search or property URLs on idealista.com, idealista.pt, or idealista.it.
  • maxItems: global maximum number of unique records saved (1–10,000; default 10).
  • fetchDetails: enrich search results from their public detail endpoint (default true). Disable it for a faster search-inventory pass.

Multiple inputs are deduplicated by stable property ID. Only successfully persisted dataset items are charged as item events.

Output example

{
  "id": "82100417",
  "url": "https://www.idealista.com/inmueble/82100417/",
  "country": "ES",
  "operation": "rent",
  "propertyType": "flat",
  "title": "Flat in Calle Everluz",
  "price": 500,
  "currency": "EUR",
  "size": 60,
  "rooms": 1,
  "bathrooms": 1,
  "municipality": "Punta Umbria",
  "province": "Huelva",
  "source": {
    "inputUrl": "https://www.idealista.com/venta-viviendas/madrid-madrid/",
    "mode": "search",
    "fetchedAt": "2026-08-30T00:00:00.000Z"
  }
}

Results are available in the default dataset as JSON, CSV, Excel, XML, or RSS.

API usage, SDK, and MCP

Run the Actor from Apify Console, schedule it as a Task, invoke it through the Apify API, or call it with apify-client from JavaScript or Python.

import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/idealista-scraper').call({
  startUrls: [{ url: 'https://www.idealista.com/venta-viviendas/madrid-madrid/' }],
  maxItems: 25,
  fetchDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/idealista-scraper').call(run_input={
    'startUrls': [{'url': 'https://www.idealista.com/venta-viviendas/madrid-madrid/'}],
    'maxItems': 25,
    'fetchDetails': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~idealista-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"startUrls":[{"url":"https://www.idealista.com/venta-viviendas/madrid-madrid/"}],"maxItems":25,"fetchDetails":true}'

For MCP-compatible assistants, connect to https://mcp.apify.com/?tools=fetch_cat/idealista-scraper and pass the same input object. Webhooks can send completed-run data into databases, spreadsheets, n8n, Make, or custom services.

Who is it for?

This Actor is designed for property analysts, real-estate teams, investors, researchers, and automation builders who need repeatable public listing exports without manual copying.

Practical use cases

  • Track fresh sale or rental inventory in a target market.
  • Compare asking price per square metre across municipalities.
  • Monitor individual properties by their detail URLs.
  • Feed public listing data into BI, valuation, or lead-qualification workflows.
  • Detect listing changes by scheduling repeat runs and joining on id.

Support

For questions, reproducible failures, or field requests, open an issue from the Actor's Apify Store page. Include the public input URL, run ID, expected behavior, and a short description; do not post passwords, cookies, or personal login data.

Common questions

Questions and answers reused from the canonical actor README.

Does it require an Idealista login?

No. It accepts only supported public, no-login URLs.

Is this an official Idealista API?

No. This independent Actor extracts publicly observable listing data and may need maintenance when Idealista changes its public interfaces.

Does maxItems apply per URL?

No. It is a global cap across all inputs after deduplication.

Why are some fields missing?

Availability varies by listing and country. Unsupported or hidden claims are omitted rather than guessed.

Can I use an Idealista scraper through an API or MCP?

Yes. The Actor input and dataset output work through Apify API clients and Apify's MCP integration.