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 onidealista.com,idealista.pt, oridealista.it.maxItems: global maximum number of unique records saved (1–10,000; default 10).fetchDetails: enrich search results from their public detail endpoint (defaulttrue). 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.