Idealista Scraper — Spain, Italy & Portugal Real Estate
Pricing
from $3.00 / 1,000 scraped properties
Idealista Scraper — Spain, Italy & Portugal Real Estate
Scrape property listings from Idealista.com, Idealista.it, and Idealista.pt. Get prices, GPS, agent contacts, amenities, energy ratings, and 28+ fields. MCP/API-ready.
Pricing
from $3.00 / 1,000 scraped properties
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
146
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
What is Idealista Scraper — Spain, Italy & Portugal Property Listings?
Idealista Scraper is an Apify Actor for property listings on Idealista.com, Idealista.it, and Idealista.pt. It accepts either direct Idealista search URLs or filter-based search input, and it returns one record per scraped property. Each record can include property ID, URL, title, price, price per m2, size, rooms, bathrooms, location fields, GPS coordinates, description, images, amenities, energy rating, agent details, publication date, and the source search URL. The result is structured dataset output that is ready for analysis, enrichment, and downstream automation, including use through Apify MCP.
Best fit and connected workflows
This Actor fits workflows where the source of truth is an Idealista search result page and the goal is a structured property dataset.
Typical routing patterns:
- Price monitoring by city, neighborhood, or search filter
- Sales or rental lead collection from Spain, Italy, or Portugal
- Market comparison using price, size, and price per m2
- Real estate enrichment using GPS, amenities, energy rating, and agent fields
- AI agent workflows that need a single Apify Actor they can call through Apify MCP
focused workflow
Idealista Scraper — Spain, Italy & Portugal Property Listings is designed as a focused workflow.
Practical scenario
Maria, a real estate analyst, starts with a Madrid Idealista search page for homes for sale. She provides the search URL and sets a result cap. The dataset returns records with fields like price, size_sqm, neighborhood, city, country, price_per_sqm, and agent_name. Maria uses those fields to compare listings across neighborhoods and then exports the dataset for her internal pricing review.
Input fields
Use direct search URLs when you already have an Idealista results page. Use the filter fields when you want the Actor to build the search from location and country.
| Field | Type | Purpose |
|---|---|---|
startUrls | array | One or more direct Idealista search result URLs for ES, IT, or PT. |
operation | string | Search mode: sale or rent. |
propertyType | string | Property category such as homes, offices, premises, garages, lands, storageRooms, or buildings. |
location | string | City or area slug such as madrid, barcelona, roma, or lisboa. |
country | string | Domain selector: es, it, or pt. |
maxResults | integer | Maximum number of listings to return. Set 0 for unlimited. |
proxyConfiguration | object | Proxy settings, with residential proxy prefill in the live contract. |
capsolverApiKey | string | A CAPTCHA-solving service key for DataDome solving workflows. |
Focused JSON example
{"operation": "sale","propertyType": "homes","location": "madrid","country": "es","maxResults": 25,"capsolverApiKey": "YOUR_KEY"}
Output fields
Each dataset item represents one scraped property listing.
| Field | Type | Purpose |
|---|---|---|
property_id | string | Idealista property identifier. |
url | string | Direct property detail page URL. |
title | string or null | Listing title. |
property_type | string or null | Property type such as flat, house, or office. |
operation | string or null | sale or rent. |
price | number or null | Listed price in EUR. |
currency | string | Currency code, always EUR. |
price_per_sqm | number or null | Computed price per square meter. |
size_sqm | number or null | Property size in square meters. |
rooms | number or null | Rooms or bedrooms. |
bathrooms | number or null | Bathrooms. |
floor | string or null | Floor level as shown on Idealista. |
address | string or null | Street address, when available. |
neighborhood | string or null | Neighborhood or district. |
city | string or null | City. |
province | string or null | Province or region. |
country | string or null | Country code: es, it, or pt. |
latitude | number or null | GPS latitude. |
longitude | number or null | GPS longitude. |
description | string or null | Listing description text. |
thumbnail_url | string or null | Primary image URL. |
images | array | Gallery image URLs. |
amenities | object or null | Feature flags such as terrace, lift, pool, air_conditioning, garage, garden, and storage_room. |
energy_rating | string or null | Energy rating from A to G. |
agent_name | string or null | Agency or seller name. |
agent_type | string or null | professional or private. |
agent_phone | string or null | Public agent phone number. |
is_new_development | boolean | New development flag. |
publication_date | string or null | ISO 8601 publication timestamp. |
scraped_at | string | ISO 8601 extraction timestamp. |
source_url | string or null | Search page URL used to collect the listing. |
Illustrative output record
{"property_id": "102983741","url": "https://www.idealista.com/inmueble/102983741/","title": "Piso en venta en Malasaña","property_type": "flat","operation": "sale","price": 350000,"currency": "EUR","price_per_sqm": 4375,"size_sqm": 80,"rooms": 3,"bathrooms": 1,"floor": "3rd floor","neighborhood": "Malasaña","city": "Madrid","province": "Madrid","country": "es","latitude": 40.4265,"longitude": -3.7038,"agent_name": "Inmobiliaria Sol","agent_type": "professional","is_new_development": false,"scraped_at": "2026-04-13T10:00:00.000Z","source_url": "https://www.idealista.com/venta-viviendas/madrid/"}
How it works
The Actor supports two input paths:
-
Direct search URLs
- Paste one or more Idealista search result pages into
startUrls. - The URL determines the search scope.
- Paste one or more Idealista search result pages into
-
Filter-based search
- Choose
operation,propertyType,location, andcountry. - The Actor builds the Idealista search from those values.
- Choose
The live contract also defines residential proxy usage in the input configuration and a CAPTCHA-solving service key field for DataDome solving workflows. The output is written to the default dataset, and each record follows the live dataset schema.
Pricing
Idealista Scraper — Spain, Italy & Portugal Property Listings uses Pay per event pricing. The live contract defines a start event plus a primary Scraped Property event for each property collected. Apify platform usage is billed separately according to your account and execution settings.
To review current pricing details for your plan and usage pattern, open the live Pricing tab on the Apify Actor page. A simple example: if a run scrapes fifty properties, the billed property events follow that count, plus the Actor start event defined in the live contract.
Use with AI agents (MCP)
This Actor is usable through Apify MCP as an Apify Actor tool. The precise Actor identity is khadinakbar/idealista-scraper.
Tool behavior:
- Input: Idealista search URLs or structured search filters
- Output: Dataset records, one item per scraped property
- Provenance: Each record includes the source search URL and a scraped timestamp
- Scope: Spain, Italy, and Portugal Idealista property listings
- Pagination: The Actor works through result pages until it reaches the input limit or the search scope is exhausted
- Cost guidance: Property output is event-based, so narrower searches and lower result caps help keep runs focused
Scrape 30 homes for sale in Barcelona from Idealista, return the listings with price, neighborhood, size, and agent name, then summarize the results by price per m2.
For AI workflows, the dataset is the primary output to read. Use property_id and url for deduplication or follow-up detail processing, and use source_url to trace the search input that produced the record.
API example
const { ApifyClient } = require('apify-client');const client = new ApifyClient({token: process.env.APIFY_TOKEN || 'YOUR_APIFY_TOKEN',});const run = await client.actor('khadinakbar/idealista-scraper').call({operation: 'sale',propertyType: 'homes',location: 'madrid',country: 'es',maxResults: 10,capsolverApiKey: 'YOUR_KEY',});const dataset = await client.dataset(run.defaultDatasetId).listItems();console.log(dataset.items);
Best results and outcome guidance
Use a location slug that matches Idealista's URL structure, especially for filter-based searches. If you already have a curated Idealista result page, startUrls keeps the scope aligned with that page's filters. For broader workflows, keep operation, propertyType, and country aligned with the search intent so the dataset stays consistent for analysis.
Continue the workflow
- Then use LoopNet Scraper for Commercial Real Estate Listings to extend Idealista Scraper — Spain, Italy & Portugal Property Listings with a neighboring property research source when the brief calls for Loopnet data.
- Then use Housing.com Scraper - Indian Property Listings to extend Idealista Scraper — Spain, Italy & Portugal Property Listings with a neighboring property research source when the brief calls for Housing data.
Design note
I found that the live dataset contract requires property_id, url, and scraped_at for every record, which makes those fields reliable anchors for deduplication and run tracing.
FAQ
When should I use startUrls instead of location filters?
Use startUrls when you already have a direct Idealista search results page. Use location filters when you want the Actor to build the search from location, country, operation, and propertyType.
Which countries does this Actor cover?
The live contract covers Spain (es), Italy (it), and Portugal (pt).
What output fields are most useful for pricing analysis?
price, size_sqm, price_per_sqm, neighborhood, city, province, and country are the core fields for market comparison.
How does this Actor connect to AI agent workflows?
It can be called as an Apify Actor through Apify MCP, so an agent can trigger the scrape and then read the resulting dataset for structured property records.
How do I control the size of a run?
Use maxResults to cap the number of property listings returned.
Responsible use
Use this Actor for lawful collection of publicly available property listing data and for workflows that respect the source site, relevant laws, and applicable data protection rules. Review Idealista's terms and your own compliance requirements before collecting or reusing listing data.