Idealista Scraper — Spain, Italy & Portugal Real Estate avatar

Idealista Scraper — Spain, Italy & Portugal Real Estate

Pricing

from $3.00 / 1,000 scraped properties

Go to Apify Store
Idealista Scraper — Spain, Italy & Portugal Real Estate

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

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

146

Total users

2

Monthly active users

5 days ago

Last modified

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.

FieldTypePurpose
startUrlsarrayOne or more direct Idealista search result URLs for ES, IT, or PT.
operationstringSearch mode: sale or rent.
propertyTypestringProperty category such as homes, offices, premises, garages, lands, storageRooms, or buildings.
locationstringCity or area slug such as madrid, barcelona, roma, or lisboa.
countrystringDomain selector: es, it, or pt.
maxResultsintegerMaximum number of listings to return. Set 0 for unlimited.
proxyConfigurationobjectProxy settings, with residential proxy prefill in the live contract.
capsolverApiKeystringA 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.

FieldTypePurpose
property_idstringIdealista property identifier.
urlstringDirect property detail page URL.
titlestring or nullListing title.
property_typestring or nullProperty type such as flat, house, or office.
operationstring or nullsale or rent.
pricenumber or nullListed price in EUR.
currencystringCurrency code, always EUR.
price_per_sqmnumber or nullComputed price per square meter.
size_sqmnumber or nullProperty size in square meters.
roomsnumber or nullRooms or bedrooms.
bathroomsnumber or nullBathrooms.
floorstring or nullFloor level as shown on Idealista.
addressstring or nullStreet address, when available.
neighborhoodstring or nullNeighborhood or district.
citystring or nullCity.
provincestring or nullProvince or region.
countrystring or nullCountry code: es, it, or pt.
latitudenumber or nullGPS latitude.
longitudenumber or nullGPS longitude.
descriptionstring or nullListing description text.
thumbnail_urlstring or nullPrimary image URL.
imagesarrayGallery image URLs.
amenitiesobject or nullFeature flags such as terrace, lift, pool, air_conditioning, garage, garden, and storage_room.
energy_ratingstring or nullEnergy rating from A to G.
agent_namestring or nullAgency or seller name.
agent_typestring or nullprofessional or private.
agent_phonestring or nullPublic agent phone number.
is_new_developmentbooleanNew development flag.
publication_datestring or nullISO 8601 publication timestamp.
scraped_atstringISO 8601 extraction timestamp.
source_urlstring or nullSearch 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:

  1. Direct search URLs

    • Paste one or more Idealista search result pages into startUrls.
    • The URL determines the search scope.
  2. Filter-based search

    • Choose operation, propertyType, location, and country.
    • The Actor builds the Idealista search from those values.

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

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.