# Properati Scraper | Colombia Property Listings (`lentic_clockss/properati-scraper`) Actor

Extract Properati sale and rental listings from Colombian city searches and listing links in Colombia, Argentina, Peru and Ecuador. Get prices, property features and available contact details. Pay per delivered row plus a start fee.

- **URL**: https://apify.com/lentic_clockss/properati-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Real estate
- **Features:** Limited permissions, Single-tenant, Server interface
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 listings

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

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Extract Properati property listings from Colombian city searches and listing links in Colombia, Argentina, Peru and Ecuador as exportable rows.**

- Sale and rental prices, bedrooms, bathrooms and property size.
- Listing IDs, source links, location labels and market currencies.
- Optional listing details with available phone numbers, addresses, agency names and photos.
- JSON, CSV and Excel exports for property comparisons and reporting.
- Pay for delivered rows: $3 per 1,000 rows on the Free plan, plus a start fee.

### What does Properati Scraper do?

Properati Scraper collects publicly available property listings. Use a Colombian city search to discover properties, or supply specific listing links from `properati.com.co`, `properati.com.ar`, `properati.com.pe` or `properati.com.ec`. Each row represents one property listing, not one agency or search page.

- **City search:** fill `geo` and choose sale or rent, property type and optional bedroom count.
- **Listing details:** fill `detailUrls` with existing listing links. Several links can share a run.
- **Detail enrichment:** set `enrichDetails` to `true` to add available contact and property details to search rows. It is off by default and updates the same row, with no separately billed row.

The input form offers Colombian cities. Use direct listing links for the other three markets; their fields can differ.

### What data can you extract from Properati?

Search and detail results share one listing format. Optional fields depend on what each listing shows. Examples are illustrative, not a live property or contact.

| Field | Description | Example |
| --- | --- | --- |
| `listingId` | Listing identifier from its link | `REPLACE_WITH_LISTING_ID` |
| `url` | Link to the individual listing | `https://www.properati.com.co/detalle/REPLACE_WITH_LISTING_ID` |
| `title` | Listing title | `Apartment for sale in Bogotá` |
| `name` | Display name; may fall back to the listing ID | `Apartment for sale in Bogotá` |
| `type` | Property type used in the dataset preview | `apartamento` |
| `status` | Listing record status, not a transaction confirmation | `listed` |
| `country` | Country code for the listing's market | `CO` |
| `authority` | Source domain without the subdomain prefix | `properati.com.co` |
| `priceText` | Price as displayed | `$ 450.000.000` |
| `priceAmount` | Numeric asking price when readable | `450000000` |
| `currency` | Currency of the displayed price | `COP` |
| `localityLabel` | Location label on a search result | `Bogotá` |
| `bedrooms` | Bedroom count | `2` |
| `bathrooms` | Bathroom count | `2` |
| `areaText` | Property size with source units | `70 m²` |
| `operation` | Sale or rent label; wording can vary by market | `venta` |
| `propertyType` | Source property category | `apartamento` |
| `phones` | Available detail-page contacts with type labels | `[{"value":"+1 555 0100","type":"mobile"}]` |
| `address` | Available address components | `{"street":"Example Street 123","country":"CO"}` |
| `geo` | City slug in search rows; coordinates in detail rows when available | `{"lat":4.6,"lng":-74.1}` |
| `org` | Agency information, not the name of an individual | `{"name":"Example Agency"}` |
| `web.socials` | Available social contact entries, including WhatsApp | `[{"type":"whatsapp","value":"+1 555 0100"}]` |
| `images` | Listing photo URLs | `["https://example.com/property.jpg"]` |
| `stratum` | Property stratum when present on a detail page | `4` |
| `constructionYear` | Construction year when shown | `2018` |
| `floor` | Floor number when shown | `3` |
| `leadAbsences` | Reasons when `phones`, `emails`, `web.socials` or the street address is empty | `{"emails": "not_verified (…)"}` |
| `scrapedAt` | Collection timestamp | `2026-10-24T00:00:00Z` |

Search-only rows do not supply phone numbers. Detail contacts may include `phones` entries with `type` set to `whatsapp`. Agency names belong in `org`, while `person` remains empty. The Actor does not provide email addresses. An empty field does not show the property lacks that feature.

### How to scrape Properati

1. Open [Properati Scraper](https://apify.com/lentic_clockss/properati-scraper) in Apify Console.
2. Fill `geo` for a city search, or paste existing listing links into `detailUrls`.
3. Set `maxResults` to `3` for a first sample. Leave `searchType` on `auto`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and download the rows, or retrieve them through the API.

Empty input `{}` starts an example search for Bogotá apartments for sale, capped at 3 rows using the form's sample values. It is a normal billed run, not a free preview. Filling one target field selects its mode. With `auto`, listing links take priority over `geo` when both are supplied.

#### City search

Choose a `geo` slug from the form, such as `bogota-d-c-colombia`. Use `operation` values `venta` for sale or `arriendo` for rent. `bedrooms` adds a bedroom filter. `page` and `maxPages` request a starting page and page count; inventory or the row limit can end collection earlier. Bogotá apartment sale and rental searches are starting examples.

#### Listing details

Copy current `/detalle/` links from Properati search results into `detailUrls`. Replace the example placeholder first. Links from the four supported country domains are accepted; subdomains are normalized and query strings are removed. Duplicate links create no extra rows. Set `enrichDetails` for search enrichment, not to activate direct detail mode.

### What to fill in

| Field | What to enter | Default |
| --- | --- | --- |
| `searchType` | `auto`, `search` or `detail` | `auto` |
| `geo` | One Colombian city slug from the form | Sample: `bogota-d-c-colombia` |
| `detailUrls` | List of existing Properati `/detalle/` URLs | Empty |
| `maxResults` | Maximum rows per city search or detail URL, from 1 to 200 | `70`; form sample `3` |
| `propertyType` | Property category, such as `apartamento` or `casa` | `apartamento` |
| `operation` | `venta` or `arriendo` | `venta` |
| `bedrooms` | Bedroom filter from 1 to 20; omit for no filter | Not set |
| `maxPages` | Requested number of search pages, from 1 to 20 | `1` |
| `page` | Starting search page, from 1 to 20 | `1` |
| `enrichDetails` | Add available details to search rows | `false` |

City search with optional enrichment:

```json
{
  "geo": "bogota-d-c-colombia",
  "operation": "venta",
  "propertyType": "apartamento",
  "bedrooms": 2,
  "enrichDetails": true,
  "maxResults": 3
}
```

Direct details; replace the placeholder with a current listing link:

```json
{
  "detailUrls": ["https://www.properati.com.co/detalle/REPLACE_WITH_LISTING_ID"],
  "maxResults": 1
}
```

`maxItems` and `limit` are aliases of `maxResults`. Other accepted aliases include `city` for `geo`, `urls` for `detailUrls`, and `pdp` for detail mode. `sale` and `rent` become `venta` and `arriendo`.

Unknown fields do not fail the run: close misspellings can be corrected and other unknown fields are ignored with a note. Numeric values may be normalized or clamped, so inspect the `INPUT_REPORT` record in the default key-value store to see what was filled, corrected or ignored. The Actor writes this report before input validation completes.

Invalid listing links and unsupported modes stop before collection with a message such as `INVALID_INPUT: detailUrls — use full Properati listing links`. No listing rows are charged for that failure; the start fee can still apply.

### Output example

This illustrative search row uses a placeholder listing ID; it is not a live listing, and fields may be absent.

```json
{
  "name": "Apartment for sale in Bogotá",
  "type": "apartamento",
  "status": "listed",
  "country": "CO",
  "authority": "properati.com.co",
  "listingId": "REPLACE_WITH_LISTING_ID",
  "url": "https://www.properati.com.co/detalle/REPLACE_WITH_LISTING_ID",
  "title": "Apartment for sale in Bogotá",
  "priceText": "$ 450.000.000",
  "priceAmount": 450000000,
  "currency": "COP",
  "localityLabel": "Bogotá",
  "bedrooms": 2,
  "bathrooms": 2,
  "areaText": "70 m²",
  "operation": "venta",
  "propertyType": "apartamento",
  "geo": "bogota-d-c-colombia",
  "phones": [],
  "leadAbsences": {
    "phones": "not_verified (phone is not read from the search card)",
    "emails": "not_verified (agent and agency email is not read from Properati pages)",
    "web.socials": "not_on_list_page (search card has no WhatsApp link; it is read on the detail page)"
  },
  "images": [],
  "scrapedAt": "2026-10-24T00:00:00Z"
}
```

You can export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table. JSON preserves nested fields such as `phones` and `address`; pick needed columns for spreadsheets.

### Why use this Properati scraper?

- **Row-based billing.** Listing charges apply to rows written to the dataset, not unsuccessful page attempts. The separate start fee still applies.
- **Partial delivery.** Returned partial results are delivered and marked in `RUN_SUMMARY`. Rows already written remain in the dataset; an interrupted run does not save undelivered rows.
- **Readable input errors.** Validation errors name the affected field and suggest a correction.
- **Source-based values.** Missing contact details stay empty; a missing title falls back to the listing ID.
- **Several listing inputs.** Supply multiple detail links in one run.
- **No proxy configuration.** You do not need to set up proxies.

### How much does it cost to scrape Properati?

The Actor uses pay-per-event pricing. One start event costs $0.005 per GB of run memory, with at least one event. The default 512 MB configuration therefore costs $0.005 to start. Platform usage is included in these prices.

| Apify plan | Start fee at 512 MB | Price per row | Price per 1,000 rows |
| --- | --- | --- | --- |
| Free | $0.005 | $0.003 | $3.00 |
| Starter | $0.005 | $0.003 | $3.00 |
| Scale | $0.005 | $0.0026 | $2.60 |
| Business | $0.005 | $0.0022 | $2.20 |
| Platinum | $0.005 | $0.0022 | $2.20 |
| Diamond | $0.005 | $0.0022 | $2.20 |

- `maxResults` applies to each input: a city search or detail URL. Its default is 70 and its maximum is 200; larger-than-default requests are collected in parts of up to 70 rows.
- A detail URL identifies one listing, so a higher row limit does not multiply it.
- Free Apify plan runs are capped at 200 rows, and this Actor allows 10 runs for free-plan users.
- Set **Maximum cost per run** in the run options (`maxTotalChargeUsd` in the API) to cap the whole run's charge. It is not a field in the Actor's input JSON.
- The Apify Free plan includes **$5.00** in monthly usage credit (about **1,666 rows** at `$0.003` per row across Free-plan runs capped at 200 rows per run).

Example: a default-memory run delivering 3 rows on the Free plan costs `3 × $0.003 + $0.005 = $0.014`. A successful run with no matching listings has no row charge, but the start fee still applies.

### Use with AI agents and the API

#### Apify MCP server

Claude, ChatGPT, Cursor and VS Code clients with remote MCP support can use:

```text
https://mcp.apify.com?tools=lentic_clockss/properati-scraper
```

Sign in with Apify when prompted through OAuth, or send `Authorization: Bearer <YOUR_APIFY_TOKEN>`. The Actor tool starts a run and returns run and dataset IDs. Use `get-dataset-items` to read the rows; add that tool to the client's configuration if needed.

For clients without remote support, run `npx @apify/actors-mcp-server --tools lentic_clockss/properati-scraper` with your `APIFY_TOKEN` configured privately.

Example prompt: “Find 3 Bogotá apartments for sale using `geo=bogota-d-c-colombia`, `operation=venta` and `maxResults=3`. Return the price, bedroom count and listing link.”

- **Agent execution note:** Set `maxResults` between `5` and `20` on exploratory tool calls to keep responses compact, and read `RUN_SUMMARY` and `INPUT_REPORT` from the default key-value store to inspect normalized inputs and delivered row counts.

#### Apify API

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/properati-scraper").call(
    run_input={"geo": "bogota-d-c-colombia", "maxResults": 3}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

JavaScript:

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/properati-scraper').call({
    geo: 'bogota-d-c-colombia', maxResults: 3
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Or send the input JSON to `POST https://api.apify.com/v2/acts/lentic_clockss~properati-scraper/runs` with an `Authorization: Bearer` header. After the run finishes, read `GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json`.

#### Standby HTTP endpoint

The endpoint `https://lentic-clockss--properati-scraper.apify.actor` offers read-only information:

| Route | Returns |
| --- | --- |
| `GET /` | Service information |
| `GET /health` | Service health response |
| `GET /input-example` | A small example input |
| `GET /openapi.json` | The endpoint specification |

These routes do not collect listings. There is no `POST /v1/collect` route for this Actor; start a normal Actor run through Console, MCP or the Apify API to obtain rows.

#### Integrations

Use the Actor's **Integrations** tab to connect results to Google Sheets, Make, Zapier, n8n, Slack, Airtable or your own webhook. Apify Schedules can start repeat runs for periodic property comparisons.

### En español

Obtén anuncios de Properati para comparar precios, superficies y características de inmuebles. Para buscar en Colombia, elige la ciudad en `geo`, indica `venta` o `arriendo` en `operation` y empieza con `maxResults` en 3. Si ya tienes enlaces de anuncios, pégalos en `detailUrls`; también se aceptan enlaces de Argentina, Perú y Ecuador. Activa `enrichDetails` para añadir a los resultados de búsqueda los datos de contacto y las fotos que estén disponibles. No todos los anuncios incluyen teléfono o dirección. El cobro se realiza por fila entregada, además del cargo de inicio. Puedes descargar los resultados en CSV, Excel o JSON.

### FAQ

#### Is it legal to scrape Properati?

This Actor collects public data. You are responsible for checking the site's terms and applicable data protection law. Public availability does not remove privacy obligations; processing personal contact data requires a lawful basis.

#### Why did my run end as ABORTED?

A run can be aborted manually or by an API request. Check its status message and log for the actual reason. This Actor does not automatically resume an aborted run. Inspect the dataset before deciding whether to start another run.

#### How many results can I get?

Set `maxResults` between 1 and 200 per input. Free-plan runs have a 200-row total cap and a 10-run allowance. Fewer rows can be returned when inventory is exhausted, links are unavailable or the cost limit is reached.

#### Why are some fields empty?

A listing may omit the price, size, address or contact information. Search-only rows have no phone numbers; use detail links or enrichment when those fields matter. Emails are not provided. Missing values are not estimates or zero values. `leadAbsences` gives the reason when `phones`, `emails`, `web.socials` or the street address is empty: `not_verified (<note>)` when the Actor did not read or find it, `not_on_list_page (<note>)` when it is read only on the detail page, and `gated (<note>)` when the WhatsApp button asks for an email or phone first.

#### Why do `leadAbsences` reasons differ from earlier runs?

Rows written before 2026-11-13 08:49 UTC used Chinese labels, shown JSON-escaped, and a `quality` block that marked `emails` and `web.socials` as `not_present`; the Actor no longer writes `quality`.

| Before | Since |
| --- | --- |
| `"\u672a\u9a8c\u8bc1"` (`phones`, `address`) | `not_verified (<note>)` |
| `"\u672c\u7ad9\u65e0\uff1a<evidence>"` (`emails`, `web.socials`) | `not_verified (<note>)`, or `not_on_list_page (<note>)` for `web.socials` on search rows |
| `"\u95f8\u95e8\u9501"` (`web.socials` on detail rows) | `gated (<note>)` |

#### Why did my run stop with a proxy message?

"No proxy is available for this run." and "New runs are paused until the live proxy configuration is confirmed." mean the Actor could not start collecting, so no rows are delivered. Start the run again later. Before 2026-11-13 08:49 UTC the first message ended with `is required for curl provider.` and the second was in Chinese, beginning `"\u5b9e\u65f6\u4ee3\u7406\u914d\u7f6e"` (JSON-escaped).

#### Can I scrape markets outside Colombia?

Use `detailUrls` from Properati Argentina, Peru or Ecuador. The city dropdown is Colombian. Do not use `searchType=other-tld`: it is rejected, as are `map` and `projects`.

#### Does enrichment cost an extra row?

No. `enrichDetails` adds available fields to the existing row. It can take longer and does not guarantee a phone number, address or photo.

#### What if no properties match my search?

A confirmed no-match search can succeed with zero rows. Check `RUN_SUMMARY` for the explanation. An unavailable page or collection error is not automatically treated as an empty market; failures may also write `ERROR_SUMMARY`.

#### Can I supply several cities in one run?

`geo` accepts one city slug, not an array. Start separate city searches. `detailUrls` accepts multiple listing links in one run, with duplicate listings removed.

### Limitations

- No independent map results, development-project mode or contact-form submission.
- Only the four named Properati country domains are accepted for detail links; other property portals are outside scope.
- City and property-type options do not guarantee current inventory; start with a small sample.
- Search rows and detail rows can use different shapes for `geo`; handle a city string, a coordinate object or an empty value.
- Addresses, phone numbers and agency details are conditional. Image lists are limited to 40 URLs per listing.
- Listing prices are asking prices, not completed-sale values. A removed or changed listing can reduce rows delivered.

### Related scrapers

More real estate and property data scrapers from the same publisher:

- [Zumper Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper)
- [Booli Scraper](https://apify.com/lentic_clockss/booli-scraper)
- [Craigslist Scraper](https://apify.com/lentic_clockss/craigslist-housing-scraper)
- [PropertyGuru Scraper](https://apify.com/lentic_clockss/propertyguru-sg-scraper)
- [OpenSooq Scraper](https://apify.com/lentic_clockss/opensooq-real-estate-scraper)
- [Apartments.com Scraper](https://apify.com/lentic_clockss/apartments-com-rental-scraper)
- [Email Validator](https://apify.com/lentic_clockss/email-risk-validator)
- [Phone Number Validator](https://apify.com/lentic_clockss/phone-number-intelligence)

Browse all of our scrapers at [apify.com/lentic_clockss](https://apify.com/lentic_clockss).

### Support

Found a problem or need another field? Open an issue in the **Issues** tab of this Actor's page and include the run ID and the input you used.

# Actor input Schema

## `searchType` (type: `string`):

Use Auto to select listing details when links are supplied, or a city search otherwise. For Argentina, Peru and Ecuador, provide existing listing links in Detail URLs.

## `geo` (type: `string`):

Select one Colombian city for a search. With Auto, listing links take priority over the city; leaving both targets empty starts the 3-row Bogotá example.

## `detailUrls` (type: `array`):

Paste existing Properati /detalle/ listing links from Colombia, Argentina, Peru or Ecuador. These links are collected instead of a city search; use current links copied from search results.

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

Maximum billed listing rows per city search or detail URL, default 70; larger requests are collected in parts of up to 70 within the run cost limit. Free Apify plan: up to 200 rows per run and 10 runs.

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

Choose the property category to search, such as apartments or houses. Available listings depend on the selected city and operation.

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

Select sale (venta) or rent (arriendo) for Colombian city searches.

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

Filter the city search by bedroom count, from 1 to 20. Leave empty to search without this filter.

## `maxPages` (type: `integer`):

Requested number of search pages, from 1 to 20. Collection may end sooner when the row limit is reached or no more listings are available.

## `page` (type: `integer`):

First search page to request, from 1 to 20. Use 1 to begin at the first page.

## `enrichDetails` (type: `boolean`):

Add available phone numbers, addresses, agency information and photos to search rows. Off by default; enrichment updates the same listing row rather than adding a separately billed row.

## `workerBaseUrl` (type: `string`):

Leave empty. Used only by the developer for testing.

## Actor input object example

```json
{
  "searchType": "auto",
  "geo": "bogota-d-c-colombia",
  "detailUrls": [],
  "maxResults": 3,
  "propertyType": "apartamento",
  "operation": "venta",
  "maxPages": 1,
  "page": 1,
  "enrichDetails": false,
  "workerBaseUrl": ""
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset of Properati property listing rows, including available prices, property features and contact details.

# 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 = {
    "searchType": "auto",
    "geo": "bogota-d-c-colombia",
    "detailUrls": [],
    "maxResults": 3,
    "propertyType": "apartamento",
    "operation": "venta",
    "maxPages": 1,
    "page": 1,
    "enrichDetails": false,
    "workerBaseUrl": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/properati-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 = {
    "searchType": "auto",
    "geo": "bogota-d-c-colombia",
    "detailUrls": [],
    "maxResults": 3,
    "propertyType": "apartamento",
    "operation": "venta",
    "maxPages": 1,
    "page": 1,
    "enrichDetails": False,
    "workerBaseUrl": "",
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/properati-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchType": "auto",
  "geo": "bogota-d-c-colombia",
  "detailUrls": [],
  "maxResults": 3,
  "propertyType": "apartamento",
  "operation": "venta",
  "maxPages": 1,
  "page": 1,
  "enrichDetails": false,
  "workerBaseUrl": ""
}' |
apify call lentic_clockss/properati-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lentic_clockss/properati-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/XwCfb0GlWBvEhETya/builds/zWgA7EcENMeTjAZGy/openapi.json
