# FincaRaíz Scraper (`unfenced-group/fincaraiz-scraper`) Actor

Extract property listings from FincaRaiz.com.co, Colombia's largest real estate platform: price in COP and USD, price per m2, areas, rooms, bathrooms, stratum, amenities, GPS, photos and full descriptions. Filter by price, area, rooms, estrato or map radius. Sale and rent, all cities.

- **URL**: https://apify.com/unfenced-group/fincaraiz-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $0.87 / 1,000 listings

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## FincaRaíz Scraper

![FincaRaíz Scraper](https://api.apify.com/v2/key-value-stores/x7KSfjBUkBc9wEoNX/records/banner.png)

Extract structured real estate listings from FincaRaiz.com.co, Colombia's largest property platform with over 170,000 active listings. Covers Bogotá, Medellín, Cali, Cartagena and every Colombian city and department, for both sale and rent. Filter by price, area, rooms, stratum or a map radius. No API key required.

***

### Why this scraper?

#### 🏙️ Full national coverage

Sale (venta) and rent (arriendo) listings across all Colombian cities, departments and neighbourhoods, and every property type: apartments, houses, studios, country houses, ranches, land, offices, commercial units, warehouses, parking and full buildings.

#### 📊 55+ structured fields per listing

Price in COP and USD, price per m², five separate area measurements, rooms, bathrooms, garages, stratum, floor, construction state, amenities, GPS coordinates, full location hierarchy down to neighbourhood, photos and complete descriptions — every field parsed and typed.

#### 🎯 Precise search filters

Narrow results by minimum and maximum price, area range, minimum bedrooms and bathrooms, and socioeconomic stratum (estrato 1–6). All filters combine.

#### 📍 Map-radius search

Provide a latitude, longitude and radius to return only listings within a set distance of any point, each tagged with its distance in kilometres.

#### 🔎 Search any location by name

Type a city, neighbourhood, zone or department exactly as you would in the site's own search box — `medellin`, `el poblado`, `chapinero` — and the scraper resolves it for you. Or paste FincaRaíz search URLs directly.

#### 🔄 Change monitoring (delta mode)

Run the same search on a schedule and get only what changed: new listings, price updates (with the previous price) and removals — each record tagged `NEW`, `UPDATED` or `REMOVED`. Unchanged listings are never returned and never charged.

#### 🔔 Built-in notifications

Push each run's results to Telegram, Discord, Slack, WhatsApp or any webhook — turn a scheduled run into a live property feed.

***

### Input parameters

All parameters are optional. Filters combine — set only the ones you need.

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `operationType` | string | `sale` | `sale` (venta) or `rent` (arriendo). |
| `propertyType` | string | `apartment` | `apartment`, `house`, `studio_apartment`, `country_house`, `ranch`, `cabin`, `house_lot`, `room`, `land`, `warehouse`, `commercial`, `office`, `medical_office`, `parking`, `building` or `any`. |
| `location` | string | `bogota` | City, neighbourhood, zone or department as free text, e.g. `bogota`, `medellin`, `el poblado`. Empty = all of Colombia. |
| `maxItems` | integer | `100` | Maximum number of listings to return (source caps pagination at 10,000 per search). |
| `sortBy` | string | `popularity` | `popularity`, `newest`, `price_asc` or `price_desc`. |
| `keyword` | string | — | Free-text keyword matched in titles, descriptions and amenities, e.g. `piscina`, `conjunto cerrado`. |
| `minPrice` | integer | — | Minimum price in Colombian pesos (COP). |
| `maxPrice` | integer | — | Maximum price in Colombian pesos (COP). |
| `minAreaM2` | integer | — | Minimum total area in square metres. |
| `maxAreaM2` | integer | — | Maximum total area in square metres. |
| `minRooms` | integer | — | Minimum number of bedrooms. |
| `minBathrooms` | integer | — | Minimum number of bathrooms. |
| `stratum` | integer | — | Colombian socioeconomic stratum (1–6), exact match. |
| `constructionState` | string | `any` | `new`, `off_plan`, `under_construction`, `renovated`, `excellent`, `good` or `needs_maintenance`. |
| `publishedWithinDays` | integer | — | Only listings first published within this many days. |
| `centerLat` | number | — | Latitude of the map-radius center. |
| `centerLng` | number | — | Longitude of the map-radius center. |
| `radiusKm` | number | — | Radius in kilometres. Requires `centerLat` and `centerLng`. |
| `startUrls` | array | — | FincaRaíz search URLs and/or individual property URLs, auto-classified. Search URLs override `operationType`, `propertyType` and `location`; property URLs are always returned in full. |
| `monitorMode` | boolean | `false` | Compare against the previous run of the same search and tag every listing `NEW`, `UPDATED`, `UNCHANGED` or `REMOVED`. |
| `deltaEmit` | string | `changes` | In monitor mode: `changes` returns only NEW/UPDATED/REMOVED, `all` returns everything tagged. |
| `deltaStoreId` | string | — | Optional snapshot name for monitor mode; leave empty to derive one from the search settings. |
| `telegramToken` / `telegramChatId` | string | — | Send run results to a Telegram chat. |
| `discordWebhookUrl` | string | — | Send run results to a Discord channel. |
| `slackWebhookUrl` | string | — | Send run results to a Slack channel. |
| `whatsappPhoneNumberId` / `whatsappAccessToken` / `whatsappTo` | string | — | Send run results via the WhatsApp Business API. |
| `webhookUrl` / `webhookHeaders` | string / object | — | POST run results as JSON to any HTTPS endpoint. |
| `notificationLimit` | integer | `10` | Maximum listings per notification message. |
| `notifyOnlyChanges` | boolean | `true` | Only notify when the run saved at least one listing. |

***

### Output schema

Every field below is present on every record. Fields the source does not publish for a given listing are returned as `null` rather than omitted.

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique FincaRaíz listing ID. |
| `url` | string | Canonical listing detail URL. |
| `title` | string | Listing title. |
| `operationType` | string | `venta` (sale) or `arriendo` (rent). |
| `propertyType` | string | Property type in Spanish, e.g. `apartamento`, `casa`. |
| `isProject` | boolean | Whether the listing belongs to a new-construction project. |
| `projectName` | string|null | Name of the development project (null for resale listings). |
| `constructionState` | string|null | Construction state, e.g. `En construcción`, `En Pozo` (null when not published). |
| `priceText` | string|null | Price as displayed, e.g. `COP 513.833.611`. |
| `priceAmount` | number|null | Numeric price in COP. |
| `priceCurrency` | string|null | Price currency, `COP`. |
| `priceUsd` | number|null | Price converted to USD by the source. |
| `pricePerM2` | number|null | Price per square metre in COP (null when area is unknown). |
| `adminFee` | number|null | Monthly administration fee in COP (null if not published). |
| `adminIncludedAmount` | number|null | Price including administration, as published by the source. |
| `hidePrice` | boolean | Whether the seller hides the exact price on the site. |
| `address` | string|null | Street address (null when the seller hides the exact location). |
| `neighborhood` | string|null | Neighbourhood (barrio). |
| `locality` | string|null | Locality / comuna, e.g. `Kennedy`, `Suba`. |
| `zone` | string|null | City zone, e.g. `Zona norte`. |
| `city` | string|null | City name. |
| `state` | string|null | Department, e.g. `Antioquia`, `Bogotá, d.c.`. |
| `country` | string | Always `CO`. |
| `bedrooms` | number|null | Number of bedrooms. |
| `bathrooms` | number|null | Number of bathrooms. |
| `garages` | number|null | Number of garages/parking spaces. |
| `floorNumber` | number|null | Floor the unit is on (null if not published). |
| `floorsCount` | number|null | Number of floors in the property/building. |
| `stratum` | number|null | Colombian socioeconomic stratum (estrato), 1–6. |
| `buildingAge` | string|null | Age band as published (null on most new projects). |
| `surfaceTotal` | number|null | Total area in m². |
| `surfaceBuilt` | number|null | Built area in m² (null if not published). |
| `surfacePrivate` | number|null | Private area in m² (mostly on new-construction listings). |
| `surfaceTerrain` | number|null | Terrain/lot area in m² (mostly houses and land). |
| `surfaceUnit` | string | Always `m²`. |
| `features` | array | Amenity list, e.g. `["Balcón", "Cocina Integral", "Piscina"]` (may be empty). |
| `coordinates` | object|null | `{ lat, lon }` GPS coordinates. |
| `distanceKm` | number|null | Distance from the map-radius center in km (only set when radius search is used). |
| `locationApproximate` | boolean|null | `true` when the seller hides the exact address. |
| `thumbnail` | string|null | Primary photo URL. |
| `imageCount` | number | Number of photos. |
| `images` | array | Full-size photo URLs (may be empty). |
| `hasVideo` | boolean|null | Whether the listing has a video. |
| `hasTour3d` | boolean|null | Whether the listing has a 3D tour. |
| `agencyName` | string|null | Real estate agency or builder name. |
| `publishDate` | string|null | Date the listing was created, `YYYY-MM-DD`. |
| `publishDateISO` | string|null | Same as `publishDate` (kept for portfolio consistency). |
| `updatedDate` | string|null | Date the listing was last updated, `YYYY-MM-DD`. |
| `descriptionHtml` | string|null | Raw HTML description (null — FincaRaíz publishes plain text). |
| `descriptionText` | string|null | Full plain-text description. |
| `descriptionMarkdown` | string|null | Description as Markdown. |
| `changeStatus` | string|null | Monitor mode only: `NEW`, `UPDATED`, `UNCHANGED` or `REMOVED` (null when monitor mode is off). |
| `previousPrice` | number|null | Monitor mode only: the price recorded in the previous run, set on `UPDATED` and `REMOVED` records. |
| `source` | string | Always `fincaraiz.com.co`. |
| `scrapedAt` | string | ISO timestamp of when the record was scraped. |
| `contentHash` | string | 16-char fingerprint of id + price + bedrooms, for change detection. |

#### Example record

```json
{
  "id": "192411457",
  "url": "https://www.fincaraiz.com.co/viena-apartamento-en-venta-en-marsella-bogota/192411457",
  "title": "VIENA, Apartamento en Venta en Marsella, Bogotá",
  "operationType": "venta",
  "propertyType": "apartamento",
  "isProject": true,
  "projectName": "VIENA, Apartamentos en Venta en Marsella, Bogotá",
  "constructionState": "En construcción",
  "priceText": "COP 513.833.611",
  "priceAmount": 513833611,
  "priceCurrency": "COP",
  "priceUsd": 165689,
  "pricePerM2": 7785358,
  "adminFee": null,
  "adminIncludedAmount": 513833611,
  "hidePrice": false,
  "address": "Viena Apartamentos, Carrera 68d, Bogotá, Colombia",
  "neighborhood": "Marsella",
  "locality": "Kennedy",
  "zone": "Zona occidental",
  "city": "Bogotá",
  "state": "Bogotá, d.c.",
  "country": "CO",
  "bedrooms": 2,
  "bathrooms": 2,
  "garages": 0,
  "floorNumber": null,
  "floorsCount": null,
  "stratum": 4,
  "buildingAge": null,
  "surfaceTotal": 66,
  "surfaceBuilt": null,
  "surfacePrivate": 61.5,
  "surfaceTerrain": null,
  "surfaceUnit": "m²",
  "features": ["Balcón", "Cocina Integral", "Parques cercanos", "Piscina", "Salón Comunal"],
  "coordinates": { "lat": 4.6320659, "lon": -74.1247295 },
  "distanceKm": null,
  "locationApproximate": null,
  "thumbnail": "https://cdn2.infocasas.com.uy/repo/img/682ba6b0b6da1_infocdn__ryyrntsxh.jpg",
  "imageCount": 13,
  "images": ["https://cdn2.infocasas.com.uy/repo/img/682ba6b0b6da1_infocdn__ryyrntsxh.jpg"],
  "hasVideo": false,
  "hasTour3d": false,
  "agencyName": "ARQUITECTURA Y CONCRETO",
  "publishDate": "2025-05-19",
  "publishDateISO": "2025-05-19",
  "updatedDate": "2026-07-08",
  "descriptionHtml": null,
  "descriptionText": "Se destaca por ser un proyecto exclusivo de 2 torres ubicado en Las Américas...",
  "descriptionMarkdown": "Se destaca por ser un proyecto exclusivo de 2 torres ubicado en Las Américas...",
  "changeStatus": "NEW",
  "previousPrice": null,
  "source": "fincaraiz.com.co",
  "scrapedAt": "2026-08-18T12:00:00.000Z",
  "contentHash": "a1b2c3d4e5f60718"
}
```

***

### Examples

**Apartments for sale in Bogotá:**

```json
{
  "operationType": "sale",
  "propertyType": "apartment",
  "location": "bogota",
  "maxItems": 200
}
```

**3+ bedroom rentals in El Poblado, Medellín, stratum 5–6 budget filter:**

```json
{
  "operationType": "rent",
  "propertyType": "apartment",
  "location": "el poblado",
  "minRooms": 3,
  "stratum": 6,
  "maxPrice": 8000000,
  "maxItems": 100
}
```

**Everything within 2 km of Zona T, Bogotá:**

```json
{
  "operationType": "sale",
  "propertyType": "any",
  "location": "bogota",
  "centerLat": 4.6669,
  "centerLng": -74.0537,
  "radiusKm": 2,
  "maxItems": 500
}
```

**Scrape a FincaRaíz search URL directly:**

```json
{
  "startUrls": [{ "url": "https://www.fincaraiz.com.co/venta/casas/medellin" }],
  "maxItems": 150
}
```

**Daily change monitor with Telegram alerts — only new, updated and removed listings:**

```json
{
  "operationType": "sale",
  "propertyType": "apartment",
  "location": "chapinero",
  "monitorMode": true,
  "maxItems": 1000,
  "telegramToken": "YOUR_BOT_TOKEN",
  "telegramChatId": "YOUR_CHAT_ID"
}
```

**Keyword search for recently published listings with a pool:**

```json
{
  "operationType": "sale",
  "propertyType": "apartment",
  "location": "medellin",
  "keyword": "piscina",
  "publishedWithinDays": 14,
  "maxItems": 100
}
```

***

### 💰 Pricing

**$0.89 per 1,000 results** — you only pay for successfully retrieved listings.
Failed retries are never charged, and in monitor mode unchanged listings are never charged.

| Results | Cost |
|---------|------|
| 100 | ~$0.09 |
| 1,000 | ~$0.89 |
| 10,000 | ~$8.90 |
| 100,000 | ~$89.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.

Use the **Max results** cap in the input to control your spend exactly.

***

### Performance

- Typical run of 100 listings completes in under a minute.
- A single search returns up to 10,000 listings; use multiple runs with different filters or locations for larger extractions.
- Listings arrive fully structured from the first request — no separate detail-page pass is needed, so every field is present at full speed.

***

### Known limitations

- The source caps any single search at 10,000 results; split large extractions by city, property type or price band.
- `adminFee`, `floorNumber` and the extended area fields are only populated when the seller publishes them.
- Contact details of individual agents are never included, by design.
- When a seller hides the exact location, `address` is null and `locationApproximate` is `true`; GPS coordinates then point to the area, not the exact building.
- In monitor mode, `REMOVED` detection requires the run to cover the full search; when `maxItems` truncates a run, removals are skipped that run and detected on the next full pass.

***

### Technical details

- **Source:** fincaraiz.com.co — Colombia's largest real estate platform, 170,000+ active listings
- **Memory:** 256 MB
- **Monitor snapshots:** named storage `fincaraiz-delta-*`, one per distinct search
- **Retry:** Automatic retry on network errors, exponential backoff, 4 attempts per request

***

### Rate this actor

If this scraper does its job, a short review on the **Reviews** tab helps other users find it. Something not working? Open an issue on the **Issues** tab instead — issues get fixed.

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

## `operationType` (type: `string`):

Whether to search for properties for sale (venta) or for rent (arriendo). Example: 'sale'.

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

Type of property to search for. Use 'any' to include all types. Example: 'apartment'.

## `location` (type: `string`):

City, neighbourhood, zone or department to search in, as free text. The scraper resolves it the same way the site's own search box does. Leave empty to search all of Colombia. Examples: 'bogota', 'medellin', 'el poblado', 'chapinero', 'cartagena'.

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

Maximum number of property listings to return. The source caps deep pagination at 10,000 entries per search. Example: 100.

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

Order in which listings are returned. Example: 'newest'.

## `keyword` (type: `string`):

Free-text keyword searched in listing titles, descriptions and amenities, server-side. Examples: 'piscina', 'conjunto cerrado', 'penthouse'.

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

Only return listings priced at or above this amount, in Colombian pesos. Leave empty for no lower bound. Example: 200000000.

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

Only return listings priced at or below this amount, in Colombian pesos. Leave empty for no upper bound. Example: 800000000.

## `minAreaM2` (type: `integer`):

Only return listings with a total area at or above this many square metres. Example: 60.

## `maxAreaM2` (type: `integer`):

Only return listings with a total area at or below this many square metres. Example: 200.

## `minRooms` (type: `integer`):

Only return listings with at least this many bedrooms. Example: 3.

## `minBathrooms` (type: `integer`):

Only return listings with at least this many bathrooms. Example: 2.

## `stratum` (type: `integer`):

Colombian socioeconomic stratum, 1 (lowest) to 6 (highest). Only return listings in exactly this stratum. Leave empty for all strata. Example: 4.

## `constructionState` (type: `string`):

Condition or construction stage of the property. Example: 'new'.

## `publishedWithinDays` (type: `integer`):

Only return listings first published within this many days. The scraper sorts newest-first and stops as soon as older listings are reached. Example: 7.

## `centerLat` (type: `number`):

Latitude of the map-radius search center. Requires centerLng and radiusKm. Example: 4.6669 (Zona T, Bogotá).

## `centerLng` (type: `number`):

Longitude of the map-radius search center. Requires centerLat and radiusKm. Example: -74.0537 (Zona T, Bogotá).

## `radiusKm` (type: `number`):

Radius in kilometres around the center point. Only listings with GPS coordinates inside this circle are returned, each tagged with its distance in km. Example: 2.

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

Optional FincaRaíz URLs to scrape directly: search URLs (e.g. 'https://www.fincaraiz.com.co/venta/apartamentos/bogota-dc') or individual property URLs (e.g. 'https://www.fincaraiz.com.co/apartamento-en-venta-en-chapinero-bogota/193084937'). Auto-classified. Search URLs override operationType, propertyType and location; property URLs are always returned in full, ignoring filters.

## `monitorMode` (type: `boolean`):

Compare this run against the previous run of the same search and tag every listing NEW, UPDATED, UNCHANGED or REMOVED. Ideal for scheduled runs that track new inventory and price changes.

## `deltaEmit` (type: `string`):

In monitor mode, return only changed listings (NEW, UPDATED, REMOVED) or the full snapshot with every listing tagged. Example: 'changes'.

## `deltaStoreId` (type: `string`):

Optional name of the storage that holds the snapshot between runs. Leave empty and the scraper derives one from your search settings. Set it explicitly to share one snapshot across differently-configured runs. Example: 'my-bogota-watch'.

## `telegramToken` (type: `string`):

Optional. Telegram bot token for run-result notifications. Create a bot via @BotFather to get one. Example: '110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw'.

## `telegramChatId` (type: `string`):

Optional. Chat ID the Telegram notification is sent to. Example: '123456789'.

## `discordWebhookUrl` (type: `string`):

Optional. Discord webhook URL for run-result notifications. Example: 'https://discord.com/api/webhooks/...'.

## `slackWebhookUrl` (type: `string`):

Optional. Slack incoming-webhook URL for run-result notifications. Example: 'https://hooks.slack.com/services/...'.

## `whatsappPhoneNumberId` (type: `string`):

Optional. WhatsApp Business API phone number ID used to send notifications. Example: '106540352242922'.

## `whatsappAccessToken` (type: `string`):

Optional. WhatsApp Business API access token. Example: 'EAAGm0PX4ZCps...'.

## `whatsappTo` (type: `string`):

Optional. Recipient phone number for WhatsApp notifications, in international format. Example: '31612345678'.

## `webhookUrl` (type: `string`):

Optional. Any HTTPS endpoint to POST the run results to as JSON. Example: 'https://example.com/hooks/fincaraiz'.

## `webhookHeaders` (type: `object`):

Optional. Extra HTTP headers sent with the generic webhook, as a JSON object. Example: {"Authorization": "Bearer abc123"}.

## `notificationLimit` (type: `integer`):

Maximum number of listings included in each notification message. Example: 10.

## `notifyOnlyChanges` (type: `boolean`):

When true, notifications are only sent if the run saved at least one listing.

## Actor input object example

```json
{
  "operationType": "sale",
  "propertyType": "apartment",
  "location": "bogota",
  "maxItems": 100,
  "sortBy": "popularity",
  "constructionState": "any",
  "startUrls": [],
  "monitorMode": false,
  "deltaEmit": "changes",
  "notificationLimit": 10,
  "notifyOnlyChanges": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "operationType": "sale",
    "propertyType": "apartment",
    "location": "bogota",
    "maxItems": 100,
    "sortBy": "popularity",
    "constructionState": "any",
    "deltaEmit": "changes"
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/fincaraiz-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 = {
    "operationType": "sale",
    "propertyType": "apartment",
    "location": "bogota",
    "maxItems": 100,
    "sortBy": "popularity",
    "constructionState": "any",
    "deltaEmit": "changes",
}

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/fincaraiz-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 '{
  "operationType": "sale",
  "propertyType": "apartment",
  "location": "bogota",
  "maxItems": 100,
  "sortBy": "popularity",
  "constructionState": "any",
  "deltaEmit": "changes"
}' |
apify call unfenced-group/fincaraiz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unfenced-group/fincaraiz-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/HzEUlmuaJAJEu6I3J/builds/cugfLSRtkyynf9NeD/openapi.json
