# Idealista Scraper (`brilliant_gum/idealista-scraper`) Actor

Scrape Idealista real estate listings across Spain, Portugal & Italy. Get 70+ fields per property: price, photos, contacts, energy rating, and price/m² analytics. Filter by location, price, size, features, and more. No account needed.

- **URL**: https://apify.com/brilliant\_gum/idealista-scraper.md
- **Developed by:** [Yuliia Kulakova](https://apify.com/brilliant_gum) (community)
- **Categories:** Real estate, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 property scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Real Estate Scraper — Spain, Portugal & Italy

![Idealista Real Estate Scraper](https://i.imgur.com/GsHY4Xb.jpg)

Extract structured property data from [Idealista.com](https://www.idealista.com) — the #1 real estate platform in Spain, Portugal, and Italy. Get prices, photos, contacts, energy ratings, floor plans, and analytics — ready to use in spreadsheets, dashboards, or your own app.

> **No coding required.** Just enter a location or paste a URL and click Run.

---

### What You Get

Every scraped property includes **70+ data fields**, including:

| Category | Fields |
|----------|--------|
| **Listing** | Title, URL, price, currency, operation (sale/rent), property type |
| **Property** | Rooms, bathrooms, built area (m²), usable area, floor, year built |
| **Features** | Elevator, parking, terrace, garden, pool, AC, furnished, storage |
| **Location** | Address, city, district, region, neighborhood, postal code |
| **Photos** | Full image URLs with captions and room tags, thumbnail, photo count |
| **Contact** | Agent name, phone number, agency name and logo |
| **Energy** | Energy rating (A–G), consumption value |
| **Analytics** | Price per m², compatibility fields for data analysis |
| **Meta** | Scraped timestamp, processing time, source URL, status |

---

### Key Features

#### 🌍 3 Countries, One Tool
Search across **Spain** (idealista.com), **Portugal** (idealista.pt), and **Italy** (idealista.it) — country is auto-detected from your URL or set manually.

#### 🔍 Powerful Search Options
- Search by **location** — enter any Idealista location slug (e.g. `madrid-madrid`, `barcelona-barcelona`, `lisboa`, `roma`)
- Filter by **operation**: sale, rent, or room share
- Filter by **property type**: homes, offices, premises, garages, rooms
- Paste **direct property URLs** for targeted scraping

#### 💰 Rich Filters
Narrow results before scraping:
- Min/max price
- Min/max area (m²)
- Minimum bedrooms and bathrooms
- Required features: elevator, parking, terrace, pool, AC, furnished, new build
- Property condition: new, good condition, to renovate
- Publication date: last 24h, 48h, week, or month

#### 📐 GPS Polygon & Radius Search
Draw a custom geographic boundary and scrape only properties inside it — perfect for hyperlocal market research. Or search within a radius from any GPS point.

#### 📊 Price/m² Analytics
Every property automatically gets a `pricePerM2` field calculated from price and area. Compare listings on equal terms instantly.

#### ♻️ Deduplication
Running the same search repeatedly? The scraper remembers which properties it already collected and skips them automatically — so you only pay for new listings.

---

### Sample Output

```json
{
  "propertyId": 111464259,
  "title": "Ático en Calle de los Mancebos",
  "url": "https://www.idealista.com/inmueble/111464259/",
  "price": 2300,
  "currency": "EUR",
  "currencySuffix": "€/month",
  "operation": "rent",
  "rooms": 2,
  "bathrooms": 2,
  "constructedArea": 79,
  "floor": "Planta 5ª exterior",
  "hasElevator": true,
  "hasTerrace": true,
  "hasAC": true,
  "condition": "good",
  "energyRating": "C",
  "address": "Palacio, Madrid",
  "city": "Madrid",
  "district": "Palacio",
  "contactName": "Engel & Völkers Madrid",
  "userType": "professional",
  "pricePerM2": 29.11,
  "imageCount": 25,
  "thumbnailUrl": "https://img4.idealista.com/...",
  "status": "success",
  "scrapedAt": "2026-05-14T09:29:08.182Z"
}
````

***

### How to Use

#### Option 1 — Search by Location

1. Open the actor and click **Try for free**
2. Enter a location in the **Search Location** field (e.g. `madrid-madrid`)
3. Choose operation type: **sale** or **rent**
4. Set your filters (price, size, features)
5. Set **Max Results** (e.g. 100)
6. Click **Start** and wait for results

#### Option 2 — Scrape Specific URLs

Paste any Idealista property or search page URL into the **URLs** field. The scraper automatically detects the country and handles both listing pages and individual property pages.

#### Option 3 — GPS Polygon Search

Pass an array of `{lat, lng}` points in the **GPS Polygon** field to scrape only properties within a custom geographic area — ideal for investment zone analysis.

***

### Input Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `urls` | array | List of Idealista URLs to scrape |
| `searchLocation` | string | Location slug (e.g. `madrid-madrid`, `lisboa`) |
| `operation` | string | `sale`, `rent`, or `share` |
| `propertyType` | string | `homes`, `offices`, `premises`, `garages`, `bedrooms` |
| `country` | string | `es`, `pt`, `it`, or `auto` (default) |
| `minPrice` / `maxPrice` | integer | Price range filter |
| `minSize` / `maxSize` | integer | Area filter in m² |
| `bedrooms` / `bathrooms` | integer | Minimum rooms filter |
| `features` | array | Required features: `elevator`, `parking`, `terrace`, `pool`, `ac`, `furnished`, `newBuild` |
| `condition` | string | `new`, `good`, `toRenovate`, or `any` |
| `sinceDate` | string | `24h`, `48h`, `week`, `month`, or `any` |
| `maxResults` | integer | Maximum properties to return (1–10,000) |
| `includeDetails` | boolean | Fetch full property details (default: true) |
| `includePhotos` | boolean | Include photo URLs (default: true) |
| `includeContact` | boolean | Include agent contact info (default: true) |
| `includeEnergy` | boolean | Include energy rating (default: true) |
| `deduplication` | boolean | Skip already-scraped properties (default: true) |
| `calculatePricePerM2` | boolean | Auto-calculate price per m² (default: true) |
| `gpsPolygon` | array | Custom geographic boundary as `[{lat, lng}]` |
| `radiusSearch` | object | `{center: {lat, lng}, radiusKm: number}` |

***

### Pricing

This actor uses **pay-per-result** pricing — you only pay for what you actually scrape.

| Event | Price |
|-------|-------|
| Actor start | $0.01 per run |
| Property scraped | $0.015 per property |

**Examples:**

- 100 properties → ~$1.51
- 1,000 properties → ~$15.01
- 5,000 properties → ~$75.01

> $15 per 1,000 properties — one of the most complete Idealista datasets available.

No monthly fees. No minimums. Pay only when you run.

***

### Use Cases

- **Real estate investors** — monitor price trends and find undervalued properties across Spain, Portugal, and Italy
- **Property portals** — build or enrich your own listings database with fresh Idealista data
- **Market researchers** — analyze price-per-m² by neighborhood, city, or region
- **Relocation services** — compile curated property options for clients moving to Southern Europe
- **Rental arbitrage** — identify high-yield rental opportunities with GPS polygon precision
- **Data journalists** — research housing affordability and market dynamics in Mediterranean markets

***

### Frequently Asked Questions

**Which countries does it support?**
Spain (idealista.com), Portugal (idealista.pt), and Italy (idealista.it). Country is auto-detected from the URL — no manual setup needed.

**Does it include phone numbers?**
Yes — agent phone numbers are included when available via the `contactPhone` field. Idealista sometimes restricts numbers to logged-in users, in which case the agent name and agency are still returned.

**Does it include GPS coordinates?**
Latitude and longitude are returned when Idealista makes them publicly available. For many listings, Idealista shows only the neighborhood rather than exact coordinates — this is a platform limitation, not a scraper limitation.

**How many results can I get?**
Up to 10,000 per run. For very large datasets, split your search using price range or location filters and run multiple times with deduplication enabled.

**What happens if a listing is unavailable?**
The property is returned with `"status": "failed"` so you always know which URLs didn't work. This is normal — listings get sold or removed frequently on active markets.

**Can I run it on a schedule?**
Yes. Use Apify Scheduler to run automatically (daily, weekly, etc.) with deduplication enabled — you'll only collect new listings each time, keeping costs low.

**Can I scrape multiple cities at once?**
Run the actor multiple times in parallel, or pass multiple search URLs in the `urls` field. Each URL can point to a different city or search filter.

***

### Support

Having issues or need a custom feature? Open a ticket via the **Issues** tab on this actor's page. We typically respond within 24 hours.

# Actor input Schema

## `urls` (type: `array`):

List of Idealista property or search/listing URLs to scrape

## `searchLocation` (type: `string`):

Idealista location name (e.g., 'madrid-madrid', 'barcelona/eixample')

## `operation` (type: `string`):

Type of listing operation

## `propertyType` (type: `string`):

Type of property to search for

## `country` (type: `string`):

Country to search in (auto-detected from URLs)

## `minPrice` (type: `integer`):

Minimum price filter

## `maxPrice` (type: `integer`):

Maximum price filter

## `minSize` (type: `integer`):

Minimum area in square meters

## `maxSize` (type: `integer`):

Maximum area in square meters

## `bedrooms` (type: `integer`):

Minimum number of bedrooms

## `bathrooms` (type: `integer`):

Minimum number of bathrooms

## `features` (type: `array`):

Required property features

## `condition` (type: `string`):

Property condition filter

## `sinceDate` (type: `string`):

Only show listings published within this timeframe

## `maxResults` (type: `integer`):

Maximum number of properties to scrape

## `includeDetails` (type: `boolean`):

Fetch full property details (slower but more data)

## `includePhotos` (type: `boolean`):

Include photo URLs in results

## `includeContact` (type: `boolean`):

Include phone numbers and agent information

## `includeEnergy` (type: `boolean`):

Include energy efficiency data

## `deduplication` (type: `boolean`):

Skip properties already scraped in previous runs

## `calculatePricePerM2` (type: `boolean`):

Automatically calculate price per square meter

## `marketStats` (type: `boolean`):

Calculate zone averages and medians for comparison

## `gpsPolygon` (type: `array`):

Custom geographic boundary (array of {lat, lng} points)

## `radiusSearch` (type: `object`):

Search within radius from a center point

## `proxyConfig` (type: `object`):

Proxy settings. Default: home residential proxy. Alternative: Apify proxy.

## `maxConcurrency` (type: `integer`):

Maximum parallel requests

## `requestDelay` (type: `integer`):

Delay between requests in milliseconds

## `maxRetries` (type: `integer`):

Maximum retry attempts for failed requests

## `apiKey` (type: `string`):

Idealista API key (optional, enables API mode)

## `apiSecret` (type: `string`):

Idealista API secret (optional)

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

Alternative proxy config field name (same as proxyConfig). Uses Apify Residential ES by default.

## Actor input object example

```json
{
  "searchLocation": "madrid-madrid",
  "operation": "sale",
  "propertyType": "homes",
  "country": "auto",
  "condition": "any",
  "sinceDate": "any",
  "maxResults": 3,
  "includeDetails": true,
  "includePhotos": true,
  "includeContact": true,
  "includeEnergy": true,
  "deduplication": true,
  "calculatePricePerM2": true,
  "marketStats": false,
  "maxConcurrency": 3,
  "requestDelay": 3000,
  "maxRetries": 3
}
```

# Actor output Schema

## `propertyId` (type: `string`):

Unique Idealista property identifier.

## `url` (type: `string`):

Full Idealista property page URL.

## `title` (type: `string`):

Property listing title.

## `price` (type: `string`):

Listing price in euros.

## `pricePerM2` (type: `string`):

Calculated price per square meter.

## `propertyType` (type: `string`):

Type of property (homes, offices, premises, garages, bedrooms).

## `operation` (type: `string`):

Listing operation: sale, rent, or share.

## `rooms` (type: `string`):

Number of rooms.

## `bathrooms` (type: `string`):

Number of bathrooms.

## `constructedArea` (type: `string`):

Constructed area in square meters.

## `usableArea` (type: `string`):

Usable area in square meters.

## `floor` (type: `string`):

Floor number or description.

## `address` (type: `string`):

Property address.

## `city` (type: `string`):

City where the property is located.

## `region` (type: `string`):

Region or province.

## `district` (type: `string`):

City district.

## `neighborhood` (type: `string`):

Neighborhood name.

## `postalCode` (type: `string`):

Postal/ZIP code.

## `latitude` (type: `string`):

GPS latitude coordinate.

## `longitude` (type: `string`):

GPS longitude coordinate.

## `hasElevator` (type: `string`):

Whether the building has an elevator.

## `hasParking` (type: `string`):

Whether parking is included.

## `hasTerrace` (type: `string`):

Whether the property has a terrace.

## `hasGarden` (type: `string`):

Whether the property has a garden.

## `hasPool` (type: `string`):

Whether the property has a pool.

## `hasAC` (type: `string`):

Whether the property has air conditioning.

## `condition` (type: `string`):

Property condition (new, good, toRenovate).

## `energyRating` (type: `string`):

Energy efficiency certificate rating (A-G).

## `description` (type: `string`):

Full property description text.

## `thumbnailUrl` (type: `string`):

Main property photo URL.

## `photos` (type: `string`):

List of all property photo URLs.

## `contactName` (type: `string`):

Name of the listing agent or owner.

## `contactPhone` (type: `string`):

Phone number of the contact.

## `userType` (type: `string`):

Whether listing is from a private owner or professional agency.

## `agencyName` (type: `string`):

Name of the real estate agency (if applicable).

## `zoneAveragePrice` (type: `string`):

Average listing price in the same zone.

## `zonePricePerM2` (type: `string`):

Average price per m2 in the same zone.

## `priceVsZoneAverage` (type: `string`):

How much above/below zone average this property is priced (%).

## `estimatedRentalYield` (type: `string`):

Estimated gross annual rental yield based on zone rental prices.

## `_scrapedAt` (type: `string`):

ISO 8601 timestamp of when this record was collected.

# 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 = {
    "searchLocation": "madrid-madrid"
};

// Run the Actor and wait for it to finish
const run = await client.actor("brilliant_gum/idealista-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 = { "searchLocation": "madrid-madrid" }

# Run the Actor and wait for it to finish
run = client.actor("brilliant_gum/idealista-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 '{
  "searchLocation": "madrid-madrid"
}' |
apify call brilliant_gum/idealista-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Idealista Scraper",
        "description": "Scrape Idealista real estate listings across Spain, Portugal & Italy. Get 70+ fields per property: price, photos, contacts, energy rating, and price/m² analytics. Filter by location, price, size, features, and more. No account needed.",
        "version": "1.0",
        "x-build-id": "ser7pYELVbmBFaQYD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/brilliant_gum~idealista-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-brilliant_gum-idealista-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/brilliant_gum~idealista-scraper/runs": {
            "post": {
                "operationId": "runs-sync-brilliant_gum-idealista-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/brilliant_gum~idealista-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-brilliant_gum-idealista-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",
                "properties": {
                    "urls": {
                        "title": "URLs to scrape",
                        "type": "array",
                        "description": "List of Idealista property or search/listing URLs to scrape",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "searchLocation": {
                        "title": "Search Location",
                        "type": "string",
                        "description": "Idealista location name (e.g., 'madrid-madrid', 'barcelona/eixample')"
                    },
                    "operation": {
                        "title": "Operation Type",
                        "enum": [
                            "sale",
                            "rent",
                            "share"
                        ],
                        "type": "string",
                        "description": "Type of listing operation",
                        "default": "sale"
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "homes",
                            "offices",
                            "premises",
                            "garages",
                            "bedrooms"
                        ],
                        "type": "string",
                        "description": "Type of property to search for",
                        "default": "homes"
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "es",
                            "pt",
                            "it",
                            "auto"
                        ],
                        "type": "string",
                        "description": "Country to search in (auto-detected from URLs)",
                        "default": "auto"
                    },
                    "minPrice": {
                        "title": "Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum price filter"
                    },
                    "maxPrice": {
                        "title": "Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum price filter"
                    },
                    "minSize": {
                        "title": "Minimum Size (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum area in square meters"
                    },
                    "maxSize": {
                        "title": "Maximum Size (m2)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum area in square meters"
                    },
                    "bedrooms": {
                        "title": "Bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of bedrooms"
                    },
                    "bathrooms": {
                        "title": "Bathrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum number of bathrooms"
                    },
                    "features": {
                        "title": "Features",
                        "type": "array",
                        "description": "Required property features",
                        "items": {
                            "type": "string",
                            "enum": [
                                "elevator",
                                "parking",
                                "terrace",
                                "garden",
                                "pool",
                                "ac",
                                "furnished",
                                "newBuild"
                            ]
                        }
                    },
                    "condition": {
                        "title": "Condition",
                        "enum": [
                            "new",
                            "good",
                            "toRenovate",
                            "any"
                        ],
                        "type": "string",
                        "description": "Property condition filter",
                        "default": "any"
                    },
                    "sinceDate": {
                        "title": "Published Since",
                        "enum": [
                            "24h",
                            "48h",
                            "week",
                            "month",
                            "any"
                        ],
                        "type": "string",
                        "description": "Only show listings published within this timeframe",
                        "default": "any"
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of properties to scrape",
                        "default": 3
                    },
                    "includeDetails": {
                        "title": "Include Full Details",
                        "type": "boolean",
                        "description": "Fetch full property details (slower but more data)",
                        "default": true
                    },
                    "includePhotos": {
                        "title": "Include Photos",
                        "type": "boolean",
                        "description": "Include photo URLs in results",
                        "default": true
                    },
                    "includeContact": {
                        "title": "Include Contact Info",
                        "type": "boolean",
                        "description": "Include phone numbers and agent information",
                        "default": true
                    },
                    "includeEnergy": {
                        "title": "Include Energy Rating",
                        "type": "boolean",
                        "description": "Include energy efficiency data",
                        "default": true
                    },
                    "deduplication": {
                        "title": "Deduplication",
                        "type": "boolean",
                        "description": "Skip properties already scraped in previous runs",
                        "default": true
                    },
                    "calculatePricePerM2": {
                        "title": "Calculate Price per m2",
                        "type": "boolean",
                        "description": "Automatically calculate price per square meter",
                        "default": true
                    },
                    "marketStats": {
                        "title": "Market Statistics",
                        "type": "boolean",
                        "description": "Calculate zone averages and medians for comparison",
                        "default": false
                    },
                    "gpsPolygon": {
                        "title": "GPS Polygon",
                        "type": "array",
                        "description": "Custom geographic boundary (array of {lat, lng} points)"
                    },
                    "radiusSearch": {
                        "title": "Radius Search",
                        "type": "object",
                        "description": "Search within radius from a center point"
                    },
                    "proxyConfig": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Default: home residential proxy. Alternative: Apify proxy."
                    },
                    "maxConcurrency": {
                        "title": "Max Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum parallel requests",
                        "default": 3
                    },
                    "requestDelay": {
                        "title": "Request Delay (ms)",
                        "minimum": 1000,
                        "maximum": 30000,
                        "type": "integer",
                        "description": "Delay between requests in milliseconds",
                        "default": 3000
                    },
                    "maxRetries": {
                        "title": "Max Retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum retry attempts for failed requests",
                        "default": 3
                    },
                    "apiKey": {
                        "title": "API Key",
                        "type": "string",
                        "description": "Idealista API key (optional, enables API mode)"
                    },
                    "apiSecret": {
                        "title": "API Secret",
                        "type": "string",
                        "description": "Idealista API secret (optional)"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration (alias)",
                        "type": "object",
                        "description": "Alternative proxy config field name (same as proxyConfig). Uses Apify Residential ES by default."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
