# Idealista Extractor (`kawsar/idealista-extractor`) Actor

Idealista property scraper that collects prices, bedrooms, sizes, photos, and agency details from any search URL, so you can track asking prices and dig into the market without clicking through pages one by one.

- **URL**: https://apify.com/kawsar/idealista-extractor.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Idealista Property Listings Scraper

![Idealista Property Listings Scraper](https://i.imgur.com/cnZouQm.png)

### Extract Real Estate Listings from Idealista at Scale

The Idealista Property Listings Scraper is a powerful real estate data extraction tool designed for investors, real estate agencies, property marketplaces, lead generation teams, analysts, developers, and data researchers who need structured property data from Idealista.

This scraper automatically collects property listings from Idealista search result pages across Spain, Portugal, and Italy. Whether you are tracking apartment prices in Madrid, rental yields in Barcelona, villas in the Algarve, or commercial properties in Milan, this tool helps you collect high quality real estate datasets in minutes without coding.

Perfect for:

* Real estate market analysis
* Property investment research
* Housing price monitoring
* Real estate lead generation
* CRM enrichment
* Rental market intelligence
* Property listing aggregation
* Agency competitor monitoring
* AI and machine learning datasets
* Real estate startup products
* Data journalism projects
* PropTech applications



---

## What Is Idealista?

Idealista is one of the largest and most trusted real estate platforms in Europe, especially popular in:

* Spain
* Portugal
* Italy

Millions of buyers, renters, investors, landlords, and agencies use Idealista every month to publish and browse:

* Apartments
* Houses
* Villas
* Commercial properties
* Offices
* Land plots
* Garages
* New developments
* Rental properties
* Luxury real estate

This scraper helps you automatically extract public listing data from these marketplaces into structured formats like JSON, CSV, Excel, or XML.

---

## Why Use This Idealista Scraper?

Most real estate professionals waste hours manually copying listings, prices, photos, and agency details from Idealista.

This scraper automates the entire workflow.

Instead of manually browsing pages, you can:

* Extract hundreds or thousands of listings automatically
* Monitor property prices daily or weekly
* Build property databases
* Create real estate dashboards
* Track agency activity
* Analyze investment opportunities
* Generate seller or agency leads
* Compare market trends across cities
* Feed property data into CRMs and BI tools

The tool is designed to be beginner friendly while still powerful enough for advanced real estate data operations.

---

## What Data Can You Extract?

For every property listing, the scraper collects rich structured data including pricing, property details, photos, and agency information.

### Extracted Fields

| Field                 | Description                                        |
| --------------------- | -------------------------------------------------- |
| `propertyId`          | Unique Idealista property listing ID               |
| `propertyTitle`       | Full property title shown on Idealista             |
| `url`                 | Direct URL to the property detail page             |
| `price`               | Property asking price                              |
| `currency`            | Currency used in the listing                       |
| `pricePerSqm`         | Price per square meter                             |
| `bedrooms`            | Number of bedrooms                                 |
| `sizeSqm`             | Property size in square meters                     |
| `features`            | Listing features such as garage, terrace, elevator |
| `propertyDescription` | Property summary or short description              |
| `tags`                | Property tags and highlights                       |
| `imageUrls`           | Full list of property image URLs                   |
| `thumbnailUrl`        | Main listing image                                 |
| `agencyName`          | Real estate agency name                            |
| `agencyUrl`           | Agency profile URL                                 |
| `isFeatured`          | Whether the listing is featured/promoted           |
| `sourceUrl`           | Original Idealista search page URL                 |
| `pageNumber`          | Search result page number                          |
| `scrapedAt`           | Timestamp when the listing was collected           |



---

## Supported Property Types

This scraper supports nearly every major property category available on Idealista, including:

* Residential apartments
* Houses and villas
* Rental apartments
* Luxury real estate
* Commercial properties
* Office spaces
* Warehouses
* Garages
* Parking spaces
* Land and plots
* New construction projects
* Student housing
* Vacation rentals
* Multi-family properties

It also works with:

* Sale listings
* Rental listings
* New developments
* Agency listings
* Filtered searches
* Regional searches
* City searches
* Province searches



---

## Supported Countries

The scraper works with all major Idealista regional domains:

| Country  | Domain          |
| -------- | --------------- |
| Spain    | `idealista.com` |
| Portugal | `idealista.pt`  |
| Italy    | `idealista.it`  |

You can scrape listings from cities such as:

* Madrid
* Barcelona
* Valencia
* Malaga
* Seville
* Lisbon
* Porto
* Milan
* Rome
* Turin
* Naples

and many more.

---

## Common Real Estate SEO Use Cases

### Real Estate Lead Generation

Collect agency names and listing URLs to build:

* Realtor databases
* Broker outreach lists
* CRM contact enrichment
* B2B sales pipelines

Great for:

* Marketing agencies
* SaaS companies
* Real estate startups
* Lead generation businesses

---

### Property Investment Analysis

Analyze:

* Price per square meter
* Rental opportunities
* High growth neighborhoods
* Property trends
* Undervalued listings

Ideal for:

* Real estate investors
* Hedge funds
* Investment analysts
* Airbnb operators

---

### Rental Market Monitoring

Track:

* Rent prices
* Apartment availability
* Regional demand
* Short-term rental trends

Useful for:

* Landlords
* Property managers
* Rental agencies
* Housing researchers

---

### Real Estate Market Research

Build large datasets for:

* Housing market analysis
* Real estate forecasting
* AI property valuation
* Machine learning models
* Economic reports
* Price trend dashboards

---

### Competitor Intelligence

Monitor:

* Agency activity
* Newly published listings
* Competitor pricing
* Featured properties
* Regional inventory

---

### Real Estate Data Aggregation

Use the scraper to power:

* Property listing websites
* Mobile apps
* Internal dashboards
* Market intelligence tools
* Property search engines
* Automated reports

---

## How to Use the Idealista Scraper

### Step 1: Open the Actor

Go to the actor dashboard and open the Input section.

---

### Step 2: Add Idealista Search URLs

Paste one or more Idealista search result URLs.

Examples:

#### Property Sales

```text
https://www.idealista.com/venta-viviendas/madrid/
````

#### Rental Listings

```text
https://www.idealista.com/alquiler-viviendas/barcelona/
```

#### New Developments

```text
https://www.idealista.com/venta-obranueva/sevilla/
```

#### Portugal Listings

```text
https://www.idealista.pt/
```

#### Italy Listings

```text
https://www.idealista.it/
```

You can also use filtered URLs directly from Idealista after applying:

- Price filters
- Bedroom filters
- Property types
- Area selections
- Agency filters
- Luxury filters

***

### Step 3: Configure Collection Limits

#### Max Pages Per URL

Controls how many result pages the scraper follows.

Default:

```text
5 pages
```

Each page may contain up to:

```text
30 listings
```

***

#### Max Items

Sets a hard limit on total collected listings.

Recommended for:

- Fast exports
- Testing runs
- Large-scale scraping control

***

### Step 4: Run the Scraper

Click:

```text
Start
```

The scraper will begin collecting property listings automatically.

***

### Step 5: Export Your Data

Export formats include:

- JSON
- CSV
- Excel
- XML

Perfect for:

- Google Sheets
- Excel analysis
- BI dashboards
- APIs
- Databases
- CRM imports

***

## Example Input

```json
{
  "startUrls": [
    "https://www.idealista.com/venta-viviendas/malaga-malaga/",
    "https://www.idealista.com/venta-viviendas/costa-del-sol-malaga/"
  ],
  "maxPages": 3,
  "maxItems": 200
}
```

***

## Example Output

```json
{
  "propertyId": "110143516",
  "propertyTitle": "Casa o chalet independiente en Santa Maria De Guillan",
  "price": 315000,
  "currency": "EUR",
  "bedrooms": 2,
  "sizeSqm": 132,
  "agencyName": "VipKel Consulting Services",
  "isFeatured": false
}
```

***

## Pagination Support

The scraper automatically follows pagination across Idealista search results.

Benefits:

- Collect larger datasets
- Scrape multiple pages automatically
- Scale research workflows
- Monitor large cities efficiently

With:

- 5 pages
- 30 listings per page

you can collect approximately:

```text
150 listings per URL
```

***

## Performance and Scaling

| Setting           | Default | Maximum |
| ----------------- | ------- | ------- |
| Max pages per URL | 5       | 50      |
| Max items per run | 100     | 1,000   |
| Request timeout   | 30s     | 120s    |

For enterprise-scale real estate data collection:

- Run multiple jobs
- Split URLs by region
- Schedule recurring scraping tasks
- Automate exports into databases

***

## SEO Keywords Naturally Covered

This scraper is optimized around high-intent real estate and scraping related search terms, including:

- Idealista scraper
- Idealista API alternative
- Property listings scraper
- Spain property data scraper
- Portugal real estate scraper
- Italy property listings
- Rental listings scraper
- Housing market data
- Real estate data extraction
- Property investment data
- Apartment listings scraper
- Real estate lead generation
- Property price monitoring
- Real estate intelligence
- Property dataset collection
- Real estate analytics
- Property market research
- PropTech data collection

***

## Troubleshooting

### No Results Found

Possible causes:

- Invalid search URL
- Empty search results
- Over-filtered searches

Solution:

- Open the URL manually in your browser first
- Verify listings appear on the page

***

### Fewer Listings Than Expected

Remember:

- Idealista limits listings per page
- Some searches naturally contain fewer results

Increase:

```text
Max pages
```

to collect more data.

***

# Actor input Schema

## `startUrls` (type: `array`):

One or more Idealista listing or search page URLs to scrape. Supports any country version of the site (Spain, Italy, Portugal) and any search type (buy, rent, new developments).

## `maxItems` (type: `integer`):

Maximum number of property listings to collect per start URL. The limit resets for each URL.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds. Increase this if you see timeout errors on slow connections.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.idealista.com/venta-viviendas/madrid/",
    "https://www.idealista.com/venta-viviendas/malaga-malaga/"
  ],
  "maxItems": 30,
  "requestTimeoutSecs": 300
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.idealista.com/venta-viviendas/vilagarcia-de-arousa-pontevedra/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/idealista-extractor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": ["https://www.idealista.com/venta-viviendas/vilagarcia-de-arousa-pontevedra/"] }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/idealista-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.idealista.com/venta-viviendas/vilagarcia-de-arousa-pontevedra/"
  ]
}' |
apify call kawsar/idealista-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kawsar/idealista-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Idealista Extractor",
        "description": "Idealista property scraper that collects prices, bedrooms, sizes, photos, and agency details from any search URL, so you can track asking prices and dig into the market without clicking through pages one by one.",
        "version": "0.0",
        "x-build-id": "inedPC3p8Tz5riVr6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~idealista-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-idealista-extractor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kawsar~idealista-extractor/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-idealista-extractor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kawsar~idealista-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-idealista-extractor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "One or more Idealista listing or search page URLs to scrape. Supports any country version of the site (Spain, Italy, Portugal) and any search type (buy, rent, new developments).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Max items per URL",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of property listings to collect per start URL. The limit resets for each URL.",
                        "default": 30
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 50,
                        "maximum": 1200,
                        "type": "integer",
                        "description": "Per-request timeout in seconds. Increase this if you see timeout errors on slow connections.",
                        "default": 300
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
