# RE/MAX Spain Property Listings Scraper (`automation-lab/remax-spain-property-listings-scraper`) Actor

🏠 Extract public RE/MAX Spain sale and rental listings with prices, locations, property facts, descriptions, galleries, offices, and agents.

- **URL**: https://apify.com/automation-lab/remax-spain-property-listings-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## RE/MAX Spain Property Listings Scraper

Extract public property listings from **RE/MAX España (`remax.es`)** into clean, structured data.

Collect sale and rental inventory with listing IDs, reference codes, prices, locations, bedrooms, bathrooms, floor area, descriptions, images, RE/MAX office context, agent names, and canonical property URLs.

Use exact RE/MAX Spain search pages, individual property URLs, or a structured province/city search.

- 🏠 Track active Spanish property inventory
- 💶 Build comparable-property and price datasets
- 🔔 Monitor new or changed opportunities
- 🤝 Route listings to brokers, investors, and lead systems
- 📊 Export to JSON, CSV, Excel, XML, RSS, or your data warehouse

No login, browser automation, or private RE/MAX account is required for the supported public pages.

### What does RE/MAX Spain Property Listings Scraper do?

The Actor visits public RE/MAX Spain search pages, follows pagination, and saves each unique property as one dataset record.

When detail enrichment is enabled, it also opens each public property page to collect:

- the full property description;
- the complete available image gallery;
- normalized numeric price and area values;
- locality and province from structured page data;
- RE/MAX office and agent context.

Search-card data is retained when one optional detail page cannot be enriched, so a temporary detail-page issue does not discard otherwise useful inventory.

### Who is this property scraper for?

#### Real-estate investors

Refresh neighborhoods regularly, compare asking prices, identify new opportunities, and feed acquisition models.

#### Brokers and agencies

Monitor competing public inventory, discover listing patterns, and enrich internal market reports.

#### Proptech teams

Create normalized feeds for search, analytics, valuation, alerting, and Spanish housing-data products.

#### Market researchers

Study property type, price, bedroom, bathroom, and area distributions across locations and time.

#### Lead-generation operators

Route relevant public listing and office context into qualification and outreach workflows.

#### Data engineers

Schedule repeat runs and load stable records into a warehouse without maintaining a custom crawler.

### Why use this RE/MAX España scraper?

- **Spain-specific:** built for public `remax.es` search and property pages.
- **Flexible targeting:** accept exact URLs or generate a search from location fields.
- **Localized normalization:** preserve displayed Spanish values and provide numeric fields.
- **Stable deduplication:** use RE/MAX listing IDs instead of title text.
- **Optional enrichment:** choose fast search-card extraction or richer property details.
- **Pagination support:** follow all available pages until `maxItems` is reached.
- **Fail-closed URL validation:** reject non-RE/MAX hosts and unsupported paths.
- **Integration ready:** use datasets, API calls, webhooks, schedules, and MCP.

### What RE/MAX Spain property data can you extract?

| Field | Type | Description |
| --- | --- | --- |
| `listingId` | string | Stable numeric RE/MAX listing identifier |
| `reference` | string | Public property reference such as `RMA-AVENIDA` |
| `operation` | string | `sale` or `rent` |
| `propertyType` | string | Public property type, for example Piso |
| `title` | string | Listing title shown by RE/MAX Spain |
| `price` | number/null | Normalized numeric asking price |
| `priceRaw` | string/null | Original localized price such as `1.380.000 €` |
| `currency` | string | `EUR` |
| `location` | string | Displayed neighborhood/city location |
| `city` | string/null | City or locality |
| `province` | string/null | Province or region |
| `bedrooms` | number/null | Number of bedrooms |
| `bathrooms` | number/null | Number of bathrooms |
| `areaM2` | number/null | Normalized area in square metres |
| `areaRaw` | string/null | Original displayed area |
| `description` | string/null | Excerpt or full enriched description |
| `imageUrl` | string/null | Primary property image |
| `imageUrls` | array | Available property gallery images |
| `officeName` | string/null | RE/MAX office context |
| `agentName` | string/null | Public agent name when available |
| `url` | string | Canonical property page URL |
| `sourceSearchUrl` | string | Search or detail URL that produced the record |
| `detailsEnriched` | boolean | Whether the property page was parsed |
| `scrapedAt` | string | ISO 8601 extraction timestamp |

### How to scrape RE/MAX Spain listings

1. Open the Actor input page.
2. Keep the prefilled Madrid search URL, paste your own `remax.es` URL, or remove URLs and use structured location fields.
3. Choose sale or rent and a property type when using structured search.
4. Set a low `maxItems` for your first run.
5. Enable detail enrichment when you need full descriptions, galleries, offices, or agents.
6. Click **Start**.
7. Preview results in the dataset table.
8. Export or integrate the dataset in your preferred format.

A small run usually completes quickly because it uses direct HTTP rather than a browser.

### Input parameters

| Parameter | Required | Default | Purpose |
| --- | --- | --- | --- |
| `startUrls` | No | Madrid/Chamartín sample | RE/MAX Spain search or property URLs |
| `operation` | No | `sale` | Sale or rent for generated searches |
| `propertyType` | No | `all` | All, apartment, house, commercial, or land |
| `province` | No | `Madrid` | Province for a generated search |
| `city` | No | `Madrid` | City or municipality for a generated search |
| `district` | No | empty | Optional district or neighborhood |
| `maxItems` | No | `20` | Maximum unique listings to save |
| `includeDetails` | No | `true` | Open property pages for richer fields |

When `startUrls` contains values, those exact URLs take priority over structured location fields.

### Example input: exact RE/MAX search URL

```json
{
  "startUrls": [
    {
      "url": "https://www.remax.es/buscador-de-inmuebles/venta/todos/madrid/madrid/chamartin/"
    }
  ],
  "maxItems": 10,
  "includeDetails": true
}
````

Use exact URLs when you already configured filters on the RE/MAX Spain website or need reproducible monitoring.

### Example input: structured location search

```json
{
  "operation": "sale",
  "propertyType": "apartment",
  "province": "Madrid",
  "city": "Madrid",
  "district": "Chamartín",
  "maxItems": 50,
  "includeDetails": false
}
```

Remove `startUrls` when you want the Actor to generate the search URL from these fields.

### Example output

```json
{
  "listingId": "887680",
  "reference": "RMA-AVENIDA",
  "operation": "sale",
  "propertyType": "Piso",
  "title": "Piso en venta, Chamartín - Prosperidad, Madrid",
  "price": 1380000,
  "priceRaw": "1.380.000 €",
  "currency": "EUR",
  "location": "Chamartín - Prosperidad, Madrid",
  "city": "Madrid",
  "province": "Madrid",
  "bedrooms": 3,
  "bathrooms": 3,
  "areaM2": 161,
  "areaRaw": "161 m2",
  "description": "ESPECTACULAR PISO EN PLANTA 14...",
  "imageUrl": "https://anaconda-guru.s3.eu-west-1.amazonaws.com/.../4-1.jpg",
  "imageUrls": ["https://anaconda-guru.s3.eu-west-1.amazonaws.com/.../4-1.jpg"],
  "officeName": "RE/MAX Action",
  "agentName": "Luis Diéguez Villarejo",
  "url": "https://www.remax.es/buscador-de-inmuebles/venta/piso/madrid/madrid/chamartin-prosperidad/RMA-AVENIDA/",
  "detailsEnriched": true,
  "scrapedAt": "2026-07-19T00:00:00.000Z"
}
```

Actual listings change continuously; the example illustrates the output shape rather than guaranteed availability.

### How much does it cost to scrape RE/MAX Spain property listings?

This Actor uses pay-per-event pricing:

- **Start:** $0.005 per run
- **Property listing:** tiered by Apify plan

| Apify tier | Price per saved listing |
| --- | ---: |
| FREE | $0.00018534 |
| BRONZE | $0.00016116 |
| SILVER | $0.00012571 |
| GOLD | $0.000096697 |
| PLATINUM | $0.000064465 |
| DIAMOND | $0.000045125 |

A 100-listing BRONZE run is approximately $0.0211: one start event plus 100 property events.

Tier discounts apply automatically for eligible Apify plans. Check the Actor pricing tab for the live rates before a large run.

Use `includeDetails: false` when search-card fields are sufficient. Charges are based on saved listings, not on raw HTTP requests.

### Tips for reliable property extraction

- 🧪 Start with 5–20 listings before scheduling a large job.
- 🔗 Prefer a copied RE/MAX search URL for uncommon site filters.
- 📍 Use Spanish province, city, and district names for structured searches.
- 🖼️ Enable details only when full descriptions or galleries are required.
- 🆔 Join snapshots by `listingId` or `reference`, not by title.
- 🕒 Compare `scrapedAt` timestamps across scheduled datasets.
- 📦 Export raw JSON when you need the full `imageUrls` array.

### Monitoring new and changed RE/MAX listings

Create an Apify schedule that runs the same search daily or hourly.

For each new snapshot:

1. join records on `listingId`;
2. detect IDs absent from the previous snapshot as new listings;
3. compare `price`, `description`, and `detailsEnriched` for changes;
4. route matches to email, Slack, a CRM, or a webhook;
5. retain historical rows in your warehouse for trend analysis.

For many neighborhoods, submit multiple search URLs and use `sourceSearchUrl` to preserve provenance.

### Integrations and automation workflows

#### Google Sheets inventory feed

Connect the dataset to Google Sheets and refresh a table of price, area, location, and property URL for an investment team.

#### Webhook alerts

Use a run-finished webhook, compare the output with yesterday's dataset, and notify a broker when a new matching reference appears.

#### CRM lead routing

Send enriched office and agent context with the property URL into HubSpot, Salesforce, or your internal qualification queue.

#### Data warehouse analysis

Load JSON records into BigQuery, Snowflake, PostgreSQL, or object storage. Partition by `scrapedAt` and join on `listingId`.

#### Valuation models

Use `price`, `areaM2`, bedrooms, bathrooms, location, and property type as comparable-property features. Treat asking price as a public listing value, not a completed transaction price.

### JavaScript API example

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/remax-spain-property-listings-scraper').call({
  startUrls: [{
    url: 'https://www.remax.es/buscador-de-inmuebles/venta/todos/madrid/madrid/chamartin/'
  }],
  maxItems: 20,
  includeDetails: true
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Python API example

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/remax-spain-property-listings-scraper').call(run_input={
    'operation': 'sale',
    'propertyType': 'apartment',
    'province': 'Madrid',
    'city': 'Madrid',
    'maxItems': 20,
    'includeDetails': True,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### cURL API example

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~remax-spain-property-listings-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "rent",
    "propertyType": "all",
    "province": "Madrid",
    "city": "Madrid",
    "maxItems": 10,
    "includeDetails": false
  }'
```

Poll the returned run or use a synchronous Actor API endpoint when your client needs to wait for completion.

### Use RE/MAX Spain Scraper with MCP and AI agents

Apify MCP lets Claude Code, Claude Desktop, Cursor, and VS Code run the Actor as a tool.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/remax-spain-property-listings-scraper"
```

#### Claude Desktop, Cursor, or VS Code

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/remax-spain-property-listings-scraper"
    }
  }
}
```

Example prompts:

- “Scrape the first 20 RE/MAX Spain sale listings in Madrid and rank them by price per square metre.”
- “Extract this RE/MAX property URL and summarize the description, office, agent, and image count.”
- “Run my Chamartín listing monitor and identify references not present in yesterday’s dataset.”

### Performance and limits

The Actor uses direct HTTP with conservative sequential detail enrichment.

- Search-only mode is faster and makes one request per result page.
- Detail mode adds approximately one public page request per saved property.
- `maxItems` supports 1 to 5,000 records.
- Memory is set to 256 MB for an HTTP workload.
- The default timeout is five minutes; keep first runs small.

Site inventory and pagination determine how many records are available. Duplicate listing IDs are emitted only once per run.

### Data quality notes

Public real-estate pages may omit bedrooms, bathrooms, prices, agents, or exact addresses for some listings. Missing source values are represented as `null` rather than invented.

`price` and `areaM2` are parsed numbers. `priceRaw` and `areaRaw` preserve the visible localized text for auditing.

Search cards can contain abbreviated descriptions. Set `includeDetails` to `true` for the full public description where available.

Image URLs point to RE/MAX Spain’s public content delivery host and may change after the source removes a listing.

### Is it legal to scrape RE/MAX Spain?

This Actor extracts publicly accessible information. Whether a particular use is lawful depends on your jurisdiction, purpose, volume, contracts, and handling of personal information.

You are responsible for:

- complying with applicable laws and RE/MAX terms;
- respecting intellectual-property and database rights;
- avoiding excessive request volume;
- establishing a lawful basis for any personal-data processing;
- honoring deletion, retention, and access requirements;
- not using the data for discrimination, harassment, or unlawful outreach.

Consult qualified legal counsel for production use cases. This documentation is not legal advice.

### Frequently asked questions

#### Does this scraper require a RE/MAX login?

No. The supported search and property pages are public and were designed for anonymous extraction.

#### Can I scrape rentals as well as properties for sale?

Yes. Paste a rental search URL or set `operation` to `rent` when using structured search.

#### Can I scrape one property URL?

Yes. Add an individual `remax.es/buscador-de-inmuebles/.../<reference>/` URL to `startUrls`. The Actor emits one enriched record.

#### Why is a field null?

The public source may not expose that value for the listing, or detail enrichment may have been disabled. The Actor does not fabricate missing facts.

#### Why did my structured search return no records?

Check the spelling and hierarchy of province, city, and district. Copying the exact working RE/MAX Spain search URL is the best troubleshooting step for uncommon locations or filters.

#### Why did the Actor reject my URL?

Only HTTPS `remax.es` search and property paths are accepted. External URLs and unrelated RE/MAX country domains fail closed to prevent accidental out-of-scope crawling.

#### How do I make runs faster?

Disable `includeDetails` when card-level price, location, bedrooms, bathrooms, area, image, and URL are sufficient.

#### Will the Actor return historical sold prices?

No. It extracts current public listing data, not official transaction or registry records.

### Related real-estate scrapers

- [RE/MAX Portugal Scraper](https://apify.com/automation-lab/remax-portugal-scraper) — RE/MAX inventory in Portugal
- [Zillow Scraper](https://apify.com/automation-lab/zillow-scraper) — US residential property data
- [Rightmove Scraper](https://apify.com/automation-lab/rightmove-scraper) — UK property listings
- [Realtor.com Scraper](https://apify.com/automation-lab/realtor-scraper) — US Realtor.com listings
- [PropertyFinder Scraper](https://apify.com/automation-lab/propertyfinder-scraper) — Middle East property inventory

Choose this Actor when your source is specifically public RE/MAX Spain inventory on `remax.es`.

### Support

If a source page works in your browser but produces an extraction error, share:

- the public RE/MAX Spain URL;
- a redacted input example;
- the run ID;
- the approximate time of the run;
- the fields or records you expected.

Do not share private account credentials or personal API tokens. The run log includes page and extraction context needed for troubleshooting.

# Actor input Schema

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

Add remax.es search pages or individual property detail URLs. Leave empty to build a search from the location fields below.

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

Choose sale or long-term rental when building a search URL.

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

Restrict generated searches to a RE/MAX Spain property category.

## `province` (type: `string`):

Province for generated searches, for example Madrid, Barcelona, or Málaga.

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

City or municipality for generated searches.

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

Optional district such as Chamartín. Leave blank for all districts in the city.

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

Stop after saving this many unique property listings.

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

Open each property page to collect the full description, complete gallery, office, and agent context.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.remax.es/buscador-de-inmuebles/venta/todos/madrid/madrid/chamartin/"
    }
  ],
  "operation": "sale",
  "propertyType": "all",
  "province": "Madrid",
  "city": "Madrid",
  "district": "",
  "maxItems": 5,
  "includeDetails": true
}
```

# Actor output Schema

## `properties` (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.remax.es/buscador-de-inmuebles/venta/todos/madrid/madrid/chamartin/"
        }
    ],
    "operation": "sale",
    "propertyType": "all",
    "province": "Madrid",
    "city": "Madrid",
    "maxItems": 5,
    "includeDetails": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/remax-spain-property-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.remax.es/buscador-de-inmuebles/venta/todos/madrid/madrid/chamartin/" }],
    "operation": "sale",
    "propertyType": "all",
    "province": "Madrid",
    "city": "Madrid",
    "maxItems": 5,
    "includeDetails": True,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/remax-spain-property-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.remax.es/buscador-de-inmuebles/venta/todos/madrid/madrid/chamartin/"
    }
  ],
  "operation": "sale",
  "propertyType": "all",
  "province": "Madrid",
  "city": "Madrid",
  "maxItems": 5,
  "includeDetails": true
}' |
apify call automation-lab/remax-spain-property-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RE/MAX Spain Property Listings Scraper",
        "description": "🏠 Extract public RE/MAX Spain sale and rental listings with prices, locations, property facts, descriptions, galleries, offices, and agents.",
        "version": "0.1",
        "x-build-id": "FSMaf4D4gdadohnZX"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~remax-spain-property-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-remax-spain-property-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/automation-lab~remax-spain-property-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-remax-spain-property-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/automation-lab~remax-spain-property-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-remax-spain-property-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",
                "properties": {
                    "startUrls": {
                        "title": "🏠 RE/MAX Spain search or property URLs",
                        "type": "array",
                        "description": "Add remax.es search pages or individual property detail URLs. Leave empty to build a search from the location fields below.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "operation": {
                        "title": "Operation",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Choose sale or long-term rental when building a search URL.",
                        "default": "sale"
                    },
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "all",
                            "apartment",
                            "house",
                            "commercial",
                            "land"
                        ],
                        "type": "string",
                        "description": "Restrict generated searches to a RE/MAX Spain property category.",
                        "default": "all"
                    },
                    "province": {
                        "title": "Province",
                        "type": "string",
                        "description": "Province for generated searches, for example Madrid, Barcelona, or Málaga.",
                        "default": "Madrid"
                    },
                    "city": {
                        "title": "City",
                        "type": "string",
                        "description": "City or municipality for generated searches.",
                        "default": "Madrid"
                    },
                    "district": {
                        "title": "District or neighborhood",
                        "type": "string",
                        "description": "Optional district such as Chamartín. Leave blank for all districts in the city.",
                        "default": ""
                    },
                    "maxItems": {
                        "title": "Maximum listings",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Stop after saving this many unique property listings.",
                        "default": 20
                    },
                    "includeDetails": {
                        "title": "Enrich property details",
                        "type": "boolean",
                        "description": "Open each property page to collect the full description, complete gallery, office, and agent context.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
