# RE/MAX Portugal Scraper (`solidcode/remax-scraper`) Actor

Extract property listings from RE/MAX Portugal (remax.pt) — homes and commercial real estate to buy or rent. 60+ fields per property: descriptions in 6 languages, all photos, GPS, energy ratings, price history, and agent contacts. Search by location with price, bedroom, area, and type filters.

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

## Pricing

from $1.70 / 1,000 results

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.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

## RE/MAX Portugal Scraper

Pull live property listings from RE/MAX Portugal (remax.pt) at scale — asking prices, price-drop history, full photo galleries, GPS coordinates, energy ratings, and direct agent contacts for homes and commercial real estate across the entire country, to buy or to rent. Built for property investors, buyer's agents, relocation and expat services, and portal aggregators who need fresh Portuguese real-estate data without copy-pasting listings one page at a time.

### Why This Scraper?

- **~50 structured fields per listing** — every record carries price, price-per-m², usable and gross area, bedrooms, bathrooms, construction year, energy rating, full photo gallery, GPS, the complete address hierarchy, and agent plus office contacts.
- **Descriptions in 6 languages** — choose Portuguese, English, French, German, Spanish, or Italian, and every property's description comes back in that language.
- **Price-drop tracking on every listing** — `previousPrice` and `priceReductionPct` flag exactly how much a seller has cut, and "Biggest price drop first" sorting surfaces the freshest motivated sellers.
- **WhatsApp links to listing agents** — alongside name, phone, and email, each record includes a ready-to-tap `agentWhatsApp` link plus the RE/MAX office name, phone, and address.
- **Full Portuguese address hierarchy** — region (distrito), municipality (concelho), parish (freguesia), zone, and postal code as separate fields, so you can roll listings up to any administrative level.
- **Up to ~50 photos per property** — the entire `images[]` gallery and an `imageCount`, not just a single thumbnail, ready for valuation models and listing portals.
- **Residential and commercial, buy and rent** — apartments, villas, land, garages, and farms alongside stores, offices, warehouses, hotels, and buildings, with 11 property-type filters.
- **Two ways to search** — type a location (Portuguese or English, accents optional) with filters, or paste any remax.pt search URL straight from your browser.
- **Nationwide coverage** — thousands of live listings across Lisboa, Porto, the Algarve, Cascais, and every district in mainland Portugal and the islands.

### Use Cases

**Investment Analysis**
- Track price reductions across a target municipality to find motivated sellers
- Compare price-per-m² between parishes and zones before bidding
- Monitor new listings sorted newest-first for fast-moving markets
- Benchmark asking prices by property type, area band, and energy rating

**Lead Generation for Agents**
- Build listing-agent contact lists with name, phone, email, and WhatsApp
- Identify competing offices and their active inventory by area
- Target sellers who have already cut their price and may negotiate
- Compile office-level contact directories for partnership outreach

**Relocation & Expat Services**
- Pull rental and buy listings with descriptions in your client's language
- Map properties by GPS to commute zones and schools
- Filter by bedrooms, bathrooms, and usable area for family requirements
- Shortlist by energy rating for running-cost-conscious movers

**Market Research**
- Measure inventory by district, municipality, and property class
- Analyze rent vs. buy supply across Lisboa, Porto, and the Algarve
- Track construction-year distribution and energy-rating mix per zone
- Quantify how fast prices drop in slow-moving segments

**Portal & Listing Aggregation**
- Feed normalized listings into a comparison or search portal
- Sync full photo galleries and virtual-tour links into your CMS
- Refresh pricing and availability on a schedule
- Deduplicate and enrich an existing Portuguese property database

### Getting Started

#### Simple — a single location

Search homes for sale in Lisbon with default settings:

```json
{
    "searchTerm": "Lisboa",
    "maxResults": 50
}
````

#### Filtered — rentals with criteria

Three-bedroom-plus apartments to rent in Porto, priced up to €2,000, biggest price drops first:

```json
{
    "searchTerm": "Porto",
    "businessType": "rent",
    "propertyTypes": ["apartment"],
    "priceMax": 2000,
    "bedroomsMin": 3,
    "sortBy": "price-reduction",
    "maxResults": 200
}
```

#### Advanced — full filter set, English descriptions

Commercial real estate to buy in the Algarve, with area and price bands, descriptions returned in English:

```json
{
    "searchTerm": "Algarve",
    "businessType": "buy",
    "listingClass": "commercial",
    "propertyTypes": ["store", "office", "warehouse"],
    "priceMin": 100000,
    "priceMax": 1500000,
    "areaMin": 80,
    "areaMax": 500,
    "sortBy": "price-asc",
    "descriptionLanguage": "en",
    "includeDescriptions": true,
    "maxResults": 500
}
```

#### Power user — paste a search URL

Skip the guided fields and paste a filtered remax.pt search straight from your browser:

```json
{
    "startUrls": [
        "https://www.remax.pt/comprar/imoveis/habitacao/r/r/r/t?s=%7B%22rg%22%3A%22Cascais%22%7D"
    ],
    "maxResults": 300
}
```

### Input Reference

#### Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchTerm` | string | `"Lisboa"` | Location to search. Accepts Portuguese (`Lisboa`, `Porto`) or English (`Lisbon`, `Algarve`); accents optional. Ignored when Start URLs are provided. |
| `businessType` | select | `For Sale (Buy)` | Whether to search properties to buy or to rent. Options: For Sale (Buy), For Rent. |
| `listingClass` | select | `All Listings` | Limit to residential homes, commercial real estate, or include everything. Options: All Listings, Residential, Commercial. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `propertyTypes` | select\[] | `[]` | One or more property types; leave empty for all. Options: Apartment, House / Villa, Land / Plot, Store / Retail Space, Office, Warehouse, Building, Garage / Parking, Farm / Rural Estate, Hotel / Hospitality, Other. |
| `priceMin` | integer | — | Only include properties at or above this price in euros. |
| `priceMax` | integer | — | Only include properties at or below this price in euros. |
| `bedroomsMin` | integer | — | Minimum number of bedrooms. |
| `bedroomsMax` | integer | — | Maximum number of bedrooms. |
| `bathroomsMin` | integer | — | Minimum number of bathrooms. |
| `areaMin` | integer | — | Minimum area in square metres. |
| `areaMax` | integer | — | Maximum area in square metres. |
| `sortBy` | select | `Newest first` | Result order. Options: Newest first, Lowest price first, Highest price first, Largest area first, Biggest price drop first. |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `descriptionLanguage` | select | `Portuguese` | Language for property descriptions. Options: Portuguese, English, French, German, Spanish, Italian. |
| `includeDescriptions` | boolean | `true` | Include the full property description text. Turn off for lighter, faster results. |

#### Advanced & Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Paste remax.pt search-result URLs (or individual property URLs) directly. Overrides the Location and Filters settings above. |
| `maxResults` | integer | `100` | Maximum number of listings to collect across all searches and URLs. Set to 0 for unlimited. The final page may overshoot this cap by a few records. |

### Output

Each property is one row in the dataset. Here is a representative record:

```json
{
    "id": "120521508-391",
    "url": "https://www.remax.pt/pt/imoveis/arrendamento-apartamento-t3-lisboa/120521508-391",
    "title": "T3 Apartment with River View, Lisboa",
    "businessType": "buy",
    "listingClass": "residential",
    "propertyType": "Apartment",
    "price": 485000,
    "priceOnRequest": false,
    "previousPrice": 510000,
    "priceReductionPct": 4.9,
    "pricePerSqm": 4040.0,
    "currency": "EUR",
    "description": "Bright three-bedroom apartment with a south-facing balcony...",
    "mainImage": "https://i.maxwork.pt/l-feat/abc123.jpg",
    "images": ["https://i.maxwork.pt/l-feat/abc123.jpg", "https://i.maxwork.pt/l-feat/abc124.jpg"],
    "imageCount": 32,
    "virtualTourUrl": "https://my.matterport.com/show/?m=example",
    "totalArea": 145,
    "livingArea": 120,
    "lotSize": null,
    "builtArea": 145,
    "bedrooms": 3,
    "bathrooms": 2,
    "constructionYear": 2008,
    "energyRating": "B",
    "energyEfficiencyLevelId": 3,
    "conservationStatusId": 1,
    "floorLevel": "4",
    "hasElevator": true,
    "hasParking": true,
    "hasGarage": true,
    "hasEvCharging": false,
    "publishedDate": "2026-03-12T00:00:00Z",
    "modifiedDate": "2026-05-20T00:00:00Z",
    "latitude": 38.7223,
    "longitude": -9.1393,
    "address": "Avenida da Liberdade, Lisboa",
    "region": "Lisboa",
    "municipality": "Lisboa",
    "parish": "Santo António",
    "zone": "Avenidas Novas",
    "postalCode": "1250-096",
    "agentName": "Maria Santos",
    "agentPhone": "+351 912 345 678",
    "agentEmail": "maria.santos@remax.pt",
    "agentWhatsApp": "https://wa.me/351912345678",
    "teamName": "RE/MAX Prime Team",
    "officeName": "RE/MAX Prime",
    "officePhone": "+351 213 456 789",
    "officeAddress": "Rua Castilho 50, Lisboa",
    "scrapedAt": "2026-06-01T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | RE/MAX listing reference |
| `url` | string | Canonical listing URL on remax.pt |
| `title` | string | Listing title |
| `businessType` | string | `buy` or `rent` |
| `listingClass` | string | `residential` or `commercial` |
| `propertyType` | string | Property type (Apartment, House, etc.) |
| `description` | string | Full description in the chosen language |
| `scrapedAt` | string | ISO timestamp of extraction |

#### Pricing

| Field | Type | Description |
|-------|------|-------------|
| `price` | number | Current asking price in euros (`null` when the listing is price-on-request) |
| `priceOnRequest` | boolean | `true` when the seller hides the price ("price on request"); `price` is `null` in that case |
| `previousPrice` | number | Prior price before the most recent reduction |
| `priceReductionPct` | number | Percentage cut from the previous price |
| `pricePerSqm` | number | Price per square metre |
| `currency` | string | Always `EUR` |

#### Property Details

| Field | Type | Description |
|-------|------|-------------|
| `totalArea` | number | Gross / total area (m²) |
| `livingArea` | number | Usable living area (m²) |
| `lotSize` | number | Plot size (m²) |
| `builtArea` | number | Built area (m²) |
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Bathroom count |
| `constructionYear` | number | Year built |
| `energyRating` | string | Energy efficiency certificate label |
| `energyEfficiencyLevelId` | number | Raw energy-efficiency level identifier |
| `conservationStatusId` | number | Raw condition identifier |
| `floorLevel` | string | Floor of the unit |
| `hasElevator` | boolean | Elevator present |
| `hasParking` | boolean | Parking present |
| `hasGarage` | boolean | Garage present |
| `hasEvCharging` | boolean | EV charging available |
| `publishedDate` | string | First published date |
| `modifiedDate` | string | Last modified date |

#### Media

| Field | Type | Description |
|-------|------|-------------|
| `mainImage` | string | Primary photo URL |
| `images` | string\[] | All gallery photo URLs |
| `imageCount` | number | Number of photos |
| `virtualTourUrl` | string | 360° / virtual-tour link, if any |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `latitude` | number | GPS latitude |
| `longitude` | number | GPS longitude |
| `address` | string | Full address (when the seller makes it public) |
| `region` | string | Region / district (distrito) |
| `municipality` | string | Municipality (concelho) |
| `parish` | string | Parish (freguesia) |
| `zone` | string | Zone / neighbourhood |
| `postalCode` | string | Postal code |

#### Agent & Office Contacts

| Field | Type | Description |
|-------|------|-------------|
| `agentName` | string | Listing agent name |
| `agentPhone` | string | Agent phone |
| `agentEmail` | string | Agent email |
| `agentWhatsApp` | string | Direct WhatsApp chat link for the agent |
| `teamName` | string | Agent team |
| `officeName` | string | RE/MAX office name |
| `officePhone` | string | Office phone |
| `officeAddress` | string | Office address |

### Tips for Best Results

- **Start small to verify** — run with `maxResults` of 25–50 first to confirm the location and filters return what you expect, then scale up.
- **Paste a fully-filtered remax.pt URL for tricky searches** — set up the exact filters you want in your browser, copy the address bar, and drop it into `startUrls`. It overrides the guided fields and reproduces your search precisely, including the property-type slug.
- **Use "Biggest price drop first" to find motivated sellers** — combine `sortBy: "price-reduction"` with a target location to put the freshest reductions at the top of your dataset.
- **Pick your description language up front** — set `descriptionLanguage` to your audience's language so descriptions arrive ready to use, with no separate translation step.
- **Some listings show "price on request"** — when a seller hides the figure, `price` is `null` and `priceOnRequest` is `true` even though the rest of the record is complete; filter on `priceOnRequest` downstream if you only want priced listings.
- **Addresses are seller-controlled** — `address` is only populated when the seller publishes it; GPS, parish, and zone are still available for mapping when the street address is withheld.
- **Turn off descriptions for lean lead lists** — set `includeDescriptions` to false when you only need pricing, location, and agent contacts for faster, lighter runs.

### Pricing

**From $1.70 per 1,000 results** — flat, transparent pay-per-result pricing that undercuts other RE/MAX Portugal scrapers with no surprise run-start fee. No compute charges — you only pay per result returned. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.20 | $0.19 | $0.18 | $0.17 |
| 1,000 | $2.00 | $1.90 | $1.80 | $1.70 |
| 10,000 | $20.00 | $19.00 | $18.00 | $17.00 |
| 100,000 | $200.00 | $190.00 | $180.00 | $170.00 |

A "result" is any property row in the output dataset. Platform usage fees depend on your Apify plan and are additional.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate real estate research, market analysis, and lead generation. You are responsible for complying with applicable laws and RE/MAX Portugal's Terms of Service. Do not use extracted data for spam, harassment, or any unlawful purpose, and handle any personal data (such as agent contacts) in line with GDPR and other applicable privacy regulations.

# Actor input Schema

## `searchTerm` (type: `string`):

Location to search. Accepts Portuguese ('Lisboa', 'Porto') or English ('Lisbon', 'Algarve') — accents are optional. Ignored when Start URLs are provided below.

## `businessType` (type: `string`):

Search for properties to buy or to rent.

## `listingClass` (type: `string`):

Limit to residential homes, commercial real estate, or include all listings.

## `propertyTypes` (type: `array`):

Filter by one or more property types. Leave empty to include every type.

## `priceMin` (type: `integer`):

Only include properties at or above this price in euros. Leave empty for no minimum.

## `priceMax` (type: `integer`):

Only include properties at or below this price in euros. Leave empty for no maximum.

## `bedroomsMin` (type: `integer`):

Only include properties with at least this many bedrooms.

## `bedroomsMax` (type: `integer`):

Only include properties with at most this many bedrooms. Leave empty for no upper limit.

## `bathroomsMin` (type: `integer`):

Only include properties with at least this many bathrooms.

## `areaMin` (type: `integer`):

Only include properties at or above this area in square metres. Leave empty for no minimum.

## `areaMax` (type: `integer`):

Only include properties at or below this area in square metres. Leave empty for no maximum.

## `sortBy` (type: `string`):

How RE/MAX orders results before they are collected.

## `descriptionLanguage` (type: `string`):

Language used for the property descriptions in the output.

## `includeDescriptions` (type: `boolean`):

Include the full property description text in the output. Turn off for lighter, faster results.

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

Power-user input. Paste RE/MAX Portugal search-result URLs (e.g. https://www.remax.pt/comprar/...) or individual property URLs directly. When provided, these override the Location and Filters settings above.

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

Maximum number of property listings to collect across all searches and URLs. Set to 0 for unlimited (up to a safety cap of 100,000 results per run). Results are collected in full pages, so the final page may overshoot this cap by a few records.

## Actor input object example

```json
{
  "searchTerm": "Lisboa",
  "businessType": "buy",
  "listingClass": "all",
  "propertyTypes": [],
  "sortBy": "newest",
  "descriptionLanguage": "pt",
  "includeDescriptions": true,
  "startUrls": [],
  "maxResults": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Table of property listings with key fields.

## `details` (type: `string`):

Full property records with all fields.

# 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 = {
    "searchTerm": "Lisboa",
    "businessType": "buy",
    "listingClass": "all",
    "propertyTypes": [],
    "sortBy": "newest",
    "descriptionLanguage": "pt",
    "includeDescriptions": true,
    "startUrls": [],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/remax-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 = {
    "searchTerm": "Lisboa",
    "businessType": "buy",
    "listingClass": "all",
    "propertyTypes": [],
    "sortBy": "newest",
    "descriptionLanguage": "pt",
    "includeDescriptions": True,
    "startUrls": [],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/remax-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 '{
  "searchTerm": "Lisboa",
  "businessType": "buy",
  "listingClass": "all",
  "propertyTypes": [],
  "sortBy": "newest",
  "descriptionLanguage": "pt",
  "includeDescriptions": true,
  "startUrls": [],
  "maxResults": 100
}' |
apify call solidcode/remax-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RE/MAX Portugal Scraper",
        "description": "Extract property listings from RE/MAX Portugal (remax.pt) — homes and commercial real estate to buy or rent. 60+ fields per property: descriptions in 6 languages, all photos, GPS, energy ratings, price history, and agent contacts. Search by location with price, bedroom, area, and type filters.",
        "version": "1.0",
        "x-build-id": "Ic5cJw5f81PtVaR0G"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~remax-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-remax-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/solidcode~remax-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-remax-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/solidcode~remax-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-remax-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": {
                    "searchTerm": {
                        "title": "Location",
                        "type": "string",
                        "description": "Location to search. Accepts Portuguese ('Lisboa', 'Porto') or English ('Lisbon', 'Algarve') — accents are optional. Ignored when Start URLs are provided below.",
                        "default": "Lisboa"
                    },
                    "businessType": {
                        "title": "Buy or Rent",
                        "enum": [
                            "buy",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Search for properties to buy or to rent.",
                        "default": "buy"
                    },
                    "listingClass": {
                        "title": "Property Class",
                        "enum": [
                            "all",
                            "residential",
                            "commercial"
                        ],
                        "type": "string",
                        "description": "Limit to residential homes, commercial real estate, or include all listings.",
                        "default": "all"
                    },
                    "propertyTypes": {
                        "title": "Property Types",
                        "type": "array",
                        "description": "Filter by one or more property types. Leave empty to include every type.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "apartment",
                                "house",
                                "land",
                                "store",
                                "office",
                                "warehouse",
                                "building",
                                "garage",
                                "farm",
                                "hotel",
                                "other"
                            ],
                            "enumTitles": [
                                "Apartment",
                                "House / Villa",
                                "Land / Plot",
                                "Store / Retail Space",
                                "Office",
                                "Warehouse",
                                "Building",
                                "Garage / Parking",
                                "Farm / Rural Estate",
                                "Hotel / Hospitality",
                                "Other"
                            ]
                        },
                        "default": []
                    },
                    "priceMin": {
                        "title": "Minimum Price (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or above this price in euros. Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum Price (€)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or below this price in euros. Leave empty for no maximum."
                    },
                    "bedroomsMin": {
                        "title": "Minimum Bedrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at least this many bedrooms."
                    },
                    "bedroomsMax": {
                        "title": "Maximum Bedrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at most this many bedrooms. Leave empty for no upper limit."
                    },
                    "bathroomsMin": {
                        "title": "Minimum Bathrooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at least this many bathrooms."
                    },
                    "areaMin": {
                        "title": "Minimum Area (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or above this area in square metres. Leave empty for no minimum."
                    },
                    "areaMax": {
                        "title": "Maximum Area (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties at or below this area in square metres. Leave empty for no maximum."
                    },
                    "sortBy": {
                        "title": "Sort Order",
                        "enum": [
                            "newest",
                            "price-asc",
                            "price-desc",
                            "area-desc",
                            "price-reduction"
                        ],
                        "type": "string",
                        "description": "How RE/MAX orders results before they are collected.",
                        "default": "newest"
                    },
                    "descriptionLanguage": {
                        "title": "Description Language",
                        "enum": [
                            "pt",
                            "en",
                            "fr",
                            "de",
                            "es",
                            "it"
                        ],
                        "type": "string",
                        "description": "Language used for the property descriptions in the output.",
                        "default": "pt"
                    },
                    "includeDescriptions": {
                        "title": "Include Full Descriptions",
                        "type": "boolean",
                        "description": "Include the full property description text in the output. Turn off for lighter, faster results.",
                        "default": true
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Power-user input. Paste RE/MAX Portugal search-result URLs (e.g. https://www.remax.pt/comprar/...) or individual property URLs directly. When provided, these override the Location and Filters settings above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of property listings to collect across all searches and URLs. Set to 0 for unlimited (up to a safety cap of 100,000 results per run). Results are collected in full pages, so the final page may overshoot this cap by a few records.",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
