# Mubawab Morocco Property Scraper (`solidcode/mubawab-ma-scraper`) Actor

\[💰 $0.95 / 1K] Extract property listings from Mubawab Morocco (mubawab.ma) — homes and commercial property for sale and rent with prices, surface, rooms, location, photos, descriptions, and the advertiser/agency name. Search by city, type, price, and surface, or paste Mubawab URLs.

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

## Pricing

from $0.95 / 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

## Mubawab Morocco Property Scraper

Pull real-estate listings from Mubawab.ma at scale — asking prices in dirhams, price per square meter, surface area, room counts, GPS coordinates, full photo galleries, amenities, and advertiser names for homes and commercial property across Morocco. Covers both for-sale and for-rent listings in eleven major cities, from Casablanca apartments to Marrakech riads. Built for Moroccan real-estate agencies, property investors, proptech teams, and market researchers who need clean, structured Mubawab listing data without copy-pasting from the site page by page.

### Why This Scraper?

- **Eleven Moroccan cities, or all of Morocco in one run** — Casablanca, Marrakech, Rabat, Tanger, Agadir, Fès, Meknès, Oujda, Tétouan, Kénitra, and Mohammedia, or set "All Morocco" to sweep the whole country.
- **Seven property categories** — apartments, villas & luxury homes, houses, riads, land/plots, offices, and commercial/shops, each as a one-click filter.
- **For sale and for rent in a single pass** — choose one transaction type or "Both" to capture sale and rental listings together; rental rows carry the monthly rent in the same price field.
- **Dirham pricing with derived price-per-m²** — every listing reports its MAD price plus a `pricePerM2` value, ready for valuation models and neighborhood comparisons.
- **GPS coordinates on every listing** — `latitude` and `longitude` for map plotting, radius search, and geo-clustering, not just a city label.
- **Full photo galleries, not a thumbnail** — the complete `photos` array of image URLs plus a `coverPhoto`, for visual portfolios and image pipelines.
- **Price, surface, and room band filters** — narrow by minimum/maximum price (MAD), minimum/maximum surface (m²), and minimum rooms — three filter dimensions the alternatives skip.
- **Structured amenities and listing reference** — an `amenities` array of feature tags plus the Mubawab `referenceId`, the advertiser's `agencyName`, and a clean `description` on every detail row.
- **Paste any Mubawab URL** — drop in a search-result link you already filtered on the site, or individual property links, and the scraper mirrors them exactly.

### Use Cases

**Real-Estate Market Research**
- Map active inventory by city, neighborhood, and property type across Morocco
- Compare apartment vs. villa supply between Casablanca, Marrakech, and Rabat
- Track asking-price spreads and price-per-m² across neighborhoods
- Benchmark sale versus rental availability in a single market

**Investment & Lead Generation**
- Build target lists of high-standing villas and riads by city and budget band
- Surface advertiser/agency names to map who is listing in each market
- Spot price-reduced or below-market listings against your own valuation model
- Filter for offices and commercial premises in growth districts

**Proptech & Aggregators**
- Feed a Morocco-focused property portal or comparison tool with fresh listings
- Enrich an existing CRM with geo coordinates, photos, and amenities
- Sync Mubawab inventory into internal dashboards on a schedule

**Price & Surface Analytics**
- Model price-per-m² by city, neighborhood, and property category
- Analyze how surface area and room count drive asking price
- Build rental-yield estimates by pairing sale and rent data from one run

### Getting Started

#### Simple City Search

Browse for-sale apartments in Casablanca — just pick a city and type:

```json
{
    "city": "casablanca",
    "propertyType": "apartments",
    "transactionType": "for-sale",
    "maxResults": 50
}
````

#### Filtered Band Search

Marrakech villas to buy, in a price and surface band, with at least 4 rooms, priced low to high:

```json
{
    "city": "marrakech",
    "propertyType": "villas",
    "transactionType": "for-sale",
    "priceMin": 2000000,
    "priceMax": 6000000,
    "surfaceMin": 200,
    "roomsMin": 4,
    "sortBy": "price-asc",
    "maxResults": 200
}
```

#### Paste Mubawab URLs

Mirror a search you already set up on the site, or target single listings:

```json
{
    "startUrls": [
        "https://www.mubawab.ma/en/sc/apartments-for-rent",
        "https://www.mubawab.ma/en/a/1234567/apartment-for-rent-in-rabat"
    ],
    "maxResults": 100
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | `[]` | Paste Mubawab search-result page URLs or individual property URLs directly. When provided, these override the search fields below — the fastest way to mirror a search you already set up on the site. |

#### Build a Search

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `transactionType` | select | `For sale` | Search properties **For sale**, **For rent**, or **Both**. Ignored when Start URLs are provided. |
| `city` | select | `All Morocco` | City to search: **All Morocco**, Casablanca, Marrakech, Rabat, Tanger, Agadir, Fès, Meknès, Oujda, Tétouan, Kénitra, or Mohammedia. |
| `propertyType` | select | `Any` | Property category: **Any**, Apartments, Villas, Houses, Riads, Land / Plots, Offices, or Commercial / Shops. |
| `searchQuery` | string | `""` | Optional keyword — a neighborhood, project name, or feature (e.g. "Maarif", "Gueliz", "sea view"). Leave empty for no keyword. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `priceMin` | integer | — | Only include listings at or above this price in MAD. For rentals this is the monthly rent. |
| `priceMax` | integer | — | Only include listings at or below this price in MAD. For rentals this is the monthly rent. |
| `surfaceMin` | integer | — | Only include properties with at least this living surface (m²). |
| `surfaceMax` | integer | — | Only include properties with at most this living surface (m²). |
| `roomsMin` | integer | — | Only include properties with at least this many rooms (pièces). |
| `sortBy` | select | `Most relevant` | Order results: **Most relevant**, **Newest first**, **Price: low to high**, or **Price: high to low**. |

#### Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxResults` | integer | `100` | Total number of listings to collect across all searches and URLs. Set to `0` to collect as many as available. Results come in full pages, so the final page may overshoot the cap by a few records. |

### Output

Each property listing is one flat row in your dataset. Here's a representative result:

```json
{
    "url": "https://www.mubawab.ma/en/a/1234567/apartment-for-sale-in-casablanca",
    "title": "Bright 3-room apartment in Maarif",
    "transactionType": "for-sale",
    "propertyType": "apartment",
    "price": 1850000,
    "priceCurrency": "MAD",
    "pricePerM2": 16519.64,
    "surfaceArea": 112,
    "rooms": 3,
    "bedrooms": 2,
    "bathrooms": 2,
    "floor": 4,
    "condition": "good condition",
    "standing": "high standing",
    "city": "Casablanca",
    "neighborhood": "Maarif",
    "latitude": 33.5883,
    "longitude": -7.6321,
    "description": "Spacious apartment in the heart of Maarif, close to shops and transport...",
    "amenities": ["Elevator", "Parking", "Balcony", "Security"],
    "photos": [
        "https://content.mubawab.ma/photo1.jpg",
        "https://content.mubawab.ma/photo2.jpg"
    ],
    "coverPhoto": "https://content.mubawab.ma/photo1.jpg",
    "agencyName": "Casa Premium Immobilier",
    "referenceId": "A-1234567",
    "scrapedAt": "2026-06-12T14:30:00Z"
}
```

#### Core Fields

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | Direct Mubawab listing link |
| `title` | string | Listing title |
| `transactionType` | string | `for-sale` or `for-rent` |
| `propertyType` | string | apartment, villa, house, riad, land, office, or commercial |
| `price` | number | Asking price in MAD (monthly rent for rentals) |
| `priceCurrency` | string | Always `MAD` |
| `pricePerM2` | number | Derived price per square meter (price ÷ surface) |

#### Property Details

| Field | Type | Description |
|-------|------|-------------|
| `surfaceArea` | number | Living surface in square meters |
| `rooms` | number | Room (pièce) count |
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Bathroom count |
| `floor` | number | Floor level, when the listing states it |
| `condition` | string | Listing condition (e.g. new, good condition, to renovate), when available |
| `standing` | string | Standing tier (e.g. economy, mid, high standing), when available |
| `amenities` | string\[] | Feature and equipment tags |

#### Location

| Field | Type | Description |
|-------|------|-------------|
| `city` | string | City name |
| `neighborhood` | string | Sub-area within the city |
| `latitude` | number | Geographic latitude |
| `longitude` | number | Geographic longitude |

#### Media & Description

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full listing description text |
| `photos` | string\[] | All listing image URLs |
| `coverPhoto` | string | Primary image URL |

#### Listing Meta

| Field | Type | Description |
|-------|------|-------------|
| `agencyName` | string | Advertiser / listing agency name |
| `referenceId` | string | Mubawab listing reference |
| `scrapedAt` | string | ISO-8601 timestamp of data collection |

### Tips for Best Results

- **Start small to verify** — set `maxResults` to 25–50 on your first run to confirm the data matches your needs, then scale up.
- **Use "Both" to capture sale and rent in one run** — set `transactionType` to **Both** and the scraper collects for-sale and for-rent listings together, with each row tagged by its `transactionType`.
- **Filters apply across the whole fetched set** — `priceMin`/`priceMax`, `surfaceMin`/`surfaceMax`, and `roomsMin` narrow every listing collected, so you only keep rows that match your band. Combine them to zero in on, say, mid-budget 3-room apartments.
- **Sort orders the collected results** — `sortBy` arranges the rows you pull (for example **Price: low to high**), making it easy to skim the cheapest or newest matches first.
- **Paste a Mubawab search URL to mirror an on-site filter exactly** — set up the search in your browser, copy the page URL into `startUrls`, and the run reproduces those exact filters — handy for filter combinations the guided fields don't cover.
- **Mix searches and URLs in one run** — combine a guided city search with pasted single-listing URLs to collect a market sweep plus specific properties of interest together.
- **Use `pricePerM2` for cross-neighborhood comparisons** — it normalizes asking price by surface, which is the cleanest lens for spotting under- or over-priced listings between districts.

### Pricing

**From $0.95 per 1,000 results** — competitive flat per-result pricing for full Morocco-wide property coverage. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows the total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.11 | $0.105 | $0.10 | $0.095 |
| 1,000 | $1.10 | $1.05 | $1.00 | $0.95 |
| 10,000 | $11.00 | $10.50 | $10.00 | $9.50 |
| 100,000 | $110.00 | $105.00 | $100.00 | $95.00 |

A "result" is any property listing row in your output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee. Platform fees depend on your Apify plan.

### 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 Mubawab's Terms of Service. Do not use collected data for spam, harassment, or any unlawful purpose, and handle any personal data in line with applicable privacy regulations. </content> </invoke>

# Actor input Schema

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

Paste Mubawab search-result page URLs (e.g. https://www.mubawab.ma/fr/sc/appartements-a-vendre) or individual property URLs directly. When provided, these override the search fields below. The fastest way to mirror a search you already set up on the site.

## `transactionType` (type: `string`):

Search properties for sale, for rent, or both. Ignored when Start URLs are provided.

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

City to search across Morocco. Choose 'All Morocco' to cover the whole country.

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

Filter by property category. Choose 'Any' to include all types.

## `searchQuery` (type: `string`):

Optional keyword — neighbourhood name, project name, or feature, e.g. 'Maarif', 'Gueliz', 'sea view'. Leave empty for no keyword filter.

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

Only include listings at or above this price in Moroccan Dirhams. For rentals this is the monthly rent. Leave empty for no minimum.

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

Only include listings at or below this price in Moroccan Dirhams. For rentals this is the monthly rent. Leave empty for no maximum.

## `surfaceMin` (type: `integer`):

Only include properties with at least this living surface in square meters. Leave empty for no minimum.

## `surfaceMax` (type: `integer`):

Only include properties with at most this living surface in square meters. Leave empty for no maximum.

## `roomsMin` (type: `integer`):

Only include properties with at least this many rooms (pièces). Leave empty for no minimum.

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

Orders the listings this run collects (applied to the set we gather, not a server-side search). 'Newest first' approximates recency by listing reference number.

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

Total number of listings to collect across all searches and URLs. Set to 0 to collect as many as available, up to roughly several thousand per search. Results are collected in full pages, so the final page may overshoot this cap by a few records.

## Actor input object example

```json
{
  "startUrls": [],
  "transactionType": "for-sale",
  "city": "all",
  "propertyType": "any",
  "sortBy": "relevance",
  "maxResults": 30
}
```

# Actor output Schema

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

Table of scraped property listings with key fields — price, surface, rooms, property type, city, and URL.

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

Full per-listing fields including description, photos, amenities, advertiser/agency name, geo coordinates, reference id, and timestamps.

# 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": [],
    "transactionType": "for-sale",
    "city": "all",
    "propertyType": "any",
    "searchQuery": "",
    "sortBy": "relevance",
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/mubawab-ma-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": [],
    "transactionType": "for-sale",
    "city": "all",
    "propertyType": "any",
    "searchQuery": "",
    "sortBy": "relevance",
    "maxResults": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/mubawab-ma-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": [],
  "transactionType": "for-sale",
  "city": "all",
  "propertyType": "any",
  "searchQuery": "",
  "sortBy": "relevance",
  "maxResults": 30
}' |
apify call solidcode/mubawab-ma-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Mubawab Morocco Property Scraper",
        "description": "[💰 $0.95 / 1K] Extract property listings from Mubawab Morocco (mubawab.ma) — homes and commercial property for sale and rent with prices, surface, rooms, location, photos, descriptions, and the advertiser/agency name. Search by city, type, price, and surface, or paste Mubawab URLs.",
        "version": "1.0",
        "x-build-id": "TMUPbRvrXNOiBI3Y1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~mubawab-ma-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-mubawab-ma-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~mubawab-ma-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-mubawab-ma-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~mubawab-ma-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-mubawab-ma-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": "Start URLs",
                        "type": "array",
                        "description": "Paste Mubawab search-result page URLs (e.g. https://www.mubawab.ma/fr/sc/appartements-a-vendre) or individual property URLs directly. When provided, these override the search fields below. The fastest way to mirror a search you already set up on the site.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "transactionType": {
                        "title": "Transaction Type",
                        "enum": [
                            "for-sale",
                            "for-rent",
                            "both"
                        ],
                        "type": "string",
                        "description": "Search properties for sale, for rent, or both. Ignored when Start URLs are provided.",
                        "default": "for-sale"
                    },
                    "city": {
                        "title": "City",
                        "enum": [
                            "all",
                            "casablanca",
                            "marrakech",
                            "rabat",
                            "tanger",
                            "agadir",
                            "fes",
                            "meknes",
                            "oujda",
                            "tetouan",
                            "kenitra",
                            "mohammedia"
                        ],
                        "type": "string",
                        "description": "City to search across Morocco. Choose 'All Morocco' to cover the whole country.",
                        "default": "all"
                    },
                    "propertyType": {
                        "title": "Property Type",
                        "enum": [
                            "any",
                            "apartments",
                            "villas",
                            "houses",
                            "riads",
                            "land",
                            "offices",
                            "commercial"
                        ],
                        "type": "string",
                        "description": "Filter by property category. Choose 'Any' to include all types.",
                        "default": "any"
                    },
                    "searchQuery": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Optional keyword — neighbourhood name, project name, or feature, e.g. 'Maarif', 'Gueliz', 'sea view'. Leave empty for no keyword filter."
                    },
                    "priceMin": {
                        "title": "Minimum Price (MAD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings at or above this price in Moroccan Dirhams. For rentals this is the monthly rent. Leave empty for no minimum."
                    },
                    "priceMax": {
                        "title": "Maximum Price (MAD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include listings at or below this price in Moroccan Dirhams. For rentals this is the monthly rent. Leave empty for no maximum."
                    },
                    "surfaceMin": {
                        "title": "Minimum Surface (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties with at least this living surface in square meters. Leave empty for no minimum."
                    },
                    "surfaceMax": {
                        "title": "Maximum Surface (m²)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only include properties with at most this living surface in square meters. Leave empty for no maximum."
                    },
                    "roomsMin": {
                        "title": "Minimum Rooms",
                        "minimum": 0,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Only include properties with at least this many rooms (pièces). Leave empty for no minimum."
                    },
                    "sortBy": {
                        "title": "Sort Order",
                        "enum": [
                            "relevance",
                            "newest",
                            "price-asc",
                            "price-desc"
                        ],
                        "type": "string",
                        "description": "Orders the listings this run collects (applied to the set we gather, not a server-side search). 'Newest first' approximates recency by listing reference number.",
                        "default": "relevance"
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Total number of listings to collect across all searches and URLs. Set to 0 to collect as many as available, up to roughly several thousand per search. Results are collected in full pages, so the final page may overshoot this cap by a few records.",
                        "default": 30
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
