# Idealista Listings Scraper (`piotrv1001/idealista-listings-scraper`) Actor

The Idealista Listings Scraper extracts real estate listings from Idealista across Spain, Italy, and Portugal, capturing property titles, prices, bedrooms, sizes, floors, locations, descriptions, and full property features— ideal for real estate market research, price tracking, and lead generation.

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

## Pricing

from $0.70 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 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 Listings Scraper

Extract **real estate listings from Idealista** — the leading property marketplace in **Spain, Italy, and Portugal** — into clean, structured data. The **Idealista Listings Scraper** turns any Idealista search into a downloadable dataset of properties with prices, sizes, rooms, locations, and full property details. No login, no manual copy-paste.

Paste a search URL from [idealista.com](https://www.idealista.com), [idealista.it](https://www.idealista.it), or [idealista.pt](https://www.idealista.pt), pick how many properties you want, and run. Because it runs on the Apify platform, you also get **scheduling, a full API, integrations** (Google Sheets, Make, Zapier, n8n), automatic **proxy rotation**, and **run monitoring** out of the box.

### ✨ Features

-   🌍 **Spain, Italy & Portugal** — works across all three Idealista marketplaces from a single tool, with the right region matched automatically.
-   🏷️ **Rich property data** — title, price, number of bedrooms, size in m², floor, lift/parking info, description, and listing tags.
-   🔍 **Search-based extraction** — paste any Idealista search or filter URL (location, price range, rooms, sale or rent) and scrape every matching property.
-   🔬 **Optional full details** — flip on **Scrape full property details** to open each property page and pull the complete feature list, exact location, and full description.
-   ⚡ **Reliable at scale** — built-in retries and rotating proxies keep results flowing on a site that is notoriously hard to scrape.
-   📤 **Export anywhere** — download as JSON, CSV, Excel, or HTML, or pull results straight from the API.

### 🛠️ How to use the Idealista Listings Scraper

1. **Add a search URL** — On Idealista, apply any filters you like (city, sale/rent, price, rooms), then copy the URL from your browser and paste it into **Start URLs**.
2. **Set how many properties** — Choose a **Max items** value (default 50). Use 0 for no limit.
3. **(Optional) Turn on full details** — Enable **Scrape full property details** if you need the complete feature list and description for each property.
4. **Run it** — Click **Start**. Watch results appear live in the **Output** tab.
5. **Download your data** — Export as JSON, CSV, Excel, or HTML, or grab it via the API.

### 📥 Input

| Field | Description |
| --- | --- |
| **Start URLs** | One or more Idealista search result pages or individual property pages. Paste the URL straight from your browser after applying filters. |
| **Max items** | Maximum number of properties to scrape. `0` means no limit (a single search returns up to ~1,800 results). |
| **Scrape full property details** | When enabled, opens each property page for the full feature list, exact location, and complete description. Slower and more thorough. |
| **Proxy configuration** | Residential proxies are used automatically and matched to the target country — no setup required. |

#### Example input

```json
{
    "startUrls": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/" }],
    "maxItems": 50,
    "scrapeDetails": false
}
````

### 📊 Output

The scraper returns one structured record per property. You can download the dataset in various formats such as **JSON, CSV, Excel, or HTML**, or access it through the Apify API.

#### Example output (search listing)

```json
{
    "id": "106387165",
    "url": "https://www.idealista.com/en/inmueble/106387165/",
    "title": "Duplex in Calle de Alcalá, Goya, Madrid",
    "price": "3,490,000€",
    "priceValue": 3490000,
    "details": ["4 bed.", "263 m²", "5th floor exterior with lift"],
    "description": "We present to you EXCLUSIVELY a unique property on the top floor...",
    "tags": ["Luxury"],
    "scrapedAt": "2026-06-11T15:20:17.852Z"
}
```

#### Example output (with full details enabled)

```json
{
    "id": "109887767",
    "url": "https://www.idealista.com/en/inmueble/109887767/",
    "title": "Flat / apartment for sale in Vereda de la Cebolla",
    "price": "514,900 €",
    "priceValue": 514900,
    "location": "El Cañaveral, Madrid",
    "details": ["3 bed.", "97 m²", "1st floor exterior with lift"],
    "features": [
        "97 m² built",
        "3 bedrooms",
        "2 bathrooms",
        "Terrace",
        "New housing development",
        "Storage room",
        "With lift",
        "Swimming pool"
    ],
    "description": "Your new home with delivery scheduled for 2027...",
    "scrapedAt": "2026-06-11T15:20:42.135Z"
}
```

#### Data fields

| Field | Description |
| --- | --- |
| `id` | Idealista property ID |
| `url` | Direct link to the property page |
| `title` | Listing title (property type + street/area) |
| `price` | Price as shown on the site |
| `priceValue` | Price as a plain number for easy filtering and sorting |
| `details` | Quick facts shown on the search card (bedrooms, m², floor) |
| `location` | Neighborhood / area (full-details mode) |
| `features` | Complete property feature list (full-details mode) |
| `description` | Property description text |
| `tags` | Listing badges such as "Luxury" or highlighted info |
| `scrapedAt` | Timestamp of extraction |

### 💰 How much does it cost to scrape Idealista?

This Actor uses a **pay-per-result** model — there is **no per-run fee**, so you only pay for the data you actually extract:

| What you get | Price |
| --- | --- |
| Search listing (one property from a results page) | **$0.0007** (~$0.70 per 1,000) |
| Full property details (complete features + description) | **$0.007** ($7 per 1,000) |

For example, scraping **1,000 properties** from search results costs about **$0.70**, or about **$7** with full property details enabled. New Apify accounts include **free monthly usage credits**, so you can try it at no cost.

### 💡 Tips

- **Narrow your search to get full coverage.** Idealista caps each search at ~1,800 results. To collect a whole city's inventory, split it by neighborhood, price band, or property type and add several **Start URLs**.
- **Start with details off.** Keep **Scrape full property details** disabled for fast, cheap market overviews, and enable it only when you need the complete feature list.
- **Schedule recurring runs** to track price changes and new listings over time.
- **Combine multiple URLs** (e.g. sale + rent, or several cities) in a single run.

### ❓ FAQ

**Which Idealista sites are supported?**
Spain (idealista.com), Italy (idealista.it), and Portugal (idealista.pt). The correct region is detected automatically from your URL.

**Can I scrape both for-sale and rental listings?**
Yes. Use the matching Idealista search URL for sale or rent — both work the same way.

**Do I need to configure proxies?**
No. Residential proxies are enabled and geo-matched automatically.

**Is scraping Idealista legal?**
This Actor collects only publicly available information. You are responsible for using the data in compliance with Idealista's Terms of Service and applicable laws (including GDPR). Do not use scraped personal data unlawfully.

**Something isn't working or I need a custom field.**
Open an issue on the Actor's **Issues** tab — feedback and custom-extraction requests are welcome.

Start pulling clean Idealista property data today with the **Idealista Listings Scraper**! 🚀

# Actor input Schema

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

Idealista search result pages or individual property pages to scrape. Paste the URL from your browser after applying any filters (location, price, rooms, sale/rent). Works with idealista.com (Spain), idealista.it (Italy) and idealista.pt (Portugal).

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

Maximum number of properties to scrape. Use 0 for no limit (a single search returns up to ~1,800 results).

## `scrapeDetails` (type: `boolean`):

When enabled, the Actor opens each property page to extract the full feature list, exact location and complete description. Slower and more thorough. When disabled, only the data shown on the search results page is returned.

## `proxyConfiguration` (type: `object`):

Proxy settings. Residential proxies are required and used automatically; the country is matched to the target site.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/"
    }
  ],
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": [
        {
            "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/idealista-listings-scraper").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": [{ "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/" }] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/idealista-listings-scraper").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": [
    {
      "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/"
    }
  ]
}' |
apify call piotrv1001/idealista-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Idealista Listings Scraper",
        "description": "The Idealista Listings Scraper extracts real estate listings from Idealista across Spain, Italy, and Portugal, capturing property titles, prices, bedrooms, sizes, floors, locations, descriptions, and full property features— ideal for real estate market research, price tracking, and lead generation.",
        "version": "0.0",
        "x-build-id": "QGFv5tOGhjoL9d5XQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/piotrv1001~idealista-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-piotrv1001-idealista-listings-scraper",
                "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/piotrv1001~idealista-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-piotrv1001-idealista-listings-scraper",
                "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/piotrv1001~idealista-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-piotrv1001-idealista-listings-scraper",
                "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": "Idealista search result pages or individual property pages to scrape. Paste the URL from your browser after applying any filters (location, price, rooms, sale/rent). Works with idealista.com (Spain), idealista.it (Italy) and idealista.pt (Portugal).",
                        "default": [
                            {
                                "url": "https://www.idealista.com/en/venta-viviendas/madrid-madrid/"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of properties to scrape. Use 0 for no limit (a single search returns up to ~1,800 results).",
                        "default": 50
                    },
                    "scrapeDetails": {
                        "title": "Scrape full property details",
                        "type": "boolean",
                        "description": "When enabled, the Actor opens each property page to extract the full feature list, exact location and complete description. Slower and more thorough. When disabled, only the data shown on the search results page is returned.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Residential proxies are required and used automatically; the country is matched to the target site.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
