# Corotos Property Scraper (`sian.agency/corotos-com-property-scraper`) Actor

Dominican Republic property adverts from Corotos: asking price in pesos or dollars, bedrooms, bathrooms, built area, province and town, photos and the advertiser behind each advert. Search 30 provinces and 72 towns across houses, apartments, penthouses, land, holiday homes, offices and shared rooms,

- **URL**: https://apify.com/sian.agency/corotos-com-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Business, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.31 / 1,000 property 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?

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

## Corotos Scraper - Dominican Republic Property Listings & Prices 🏝️

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Encuentra24 Scraper](https://img.shields.io/badge/Store-Encuentra24%20Scraper-3F69A5)](https://apify.com/sian.agency/encuentra24-property-scraper?fpr=sian) [![Fincaraiz Scraper](https://img.shields.io/badge/Store-Fincaraiz%20Scraper-FFC300)](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian) [![Inmuebles24 Scraper](https://img.shields.io/badge/Store-Inmuebles24%20Scraper-006847)](https://apify.com/sian.agency/inmuebles24-property-scraper?fpr=sian)

#### 🎉 All 32,090 live Dominican property adverts — 30 provinces, 72 towns, one run

##### For investors, agencies and analysts who need the Dominican market as rows, not browser tabs

### 🔎 What is the Corotos Dominican Republic Property Scraper — and when should you use it?

The **Corotos Dominican Republic Property Scraper** turns public Corotos property adverts from anywhere in the Dominican Republic into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Dominican sale and rental adverts as rows. Each carries the asking price in the currency the advertiser quoted — pesos or US dollars, both common on one board. A peso-normalised price rides alongside it, so the two compare on one scale. Bedrooms, bathrooms, built area, price per square metre, the province and town, the lead photo and the advertiser's name come through as well. Switch to Property Detail and a row gains the advertiser's own Spanish description, the complete photo set, and the approximate map point with a flag saying how precise it is. It also gains the published date, the sector, half-bathrooms, parking spaces, the furnished and condition values, and the advertiser's shop, account age and verification badge. Coverage is 32,090 live adverts across 30 provinces and 72 towns, every place verified by fetching it.

**Use something else when:** the property is not in the Dominican Republic. Use [Encuentra24 Scraper](https://apify.com/sian.agency/encuentra24-property-scraper?fpr=sian) for the rest of Central America and the Caribbean — Panama, Costa Rica, Nicaragua, Guatemala, Honduras, El Salvador, Puerto Rico and Colombia. Use [Fincaraiz Scraper](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian) for Colombia, from the country's leading portal, with estrato and the agency behind each advert. Use [Inmuebles24 Scraper](https://apify.com/sian.agency/inmuebles24-property-scraper?fpr=sian) for Mexico, sale and rental, across every state. This actor covers the property surfaces Corotos publishes: apartments, houses, penthouses, land and plots, holiday homes, commercial offices and premises, shared rooms and the portal's other-property board, each for sale or to rent. It reads what the portal serves to a visitor. Corotos' other verticals — cars, electronics, jobs and household goods — are not part of it. The portal publishes asking prices only, so there is no sold-price history to return, and advertiser phone and WhatsApp numbers are deliberately not extracted because they belong to private individuals.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/corotos-com-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want property listings and asking prices from corotos.com.do across the Dominican Republic using the Apify Actor `sian.agency/corotos-com-property-scraper`.

Use it when I need: Dominican sale and rental adverts as rows. Each carries the asking price in the currency the advertiser quoted — pesos or US dollars, both common on one board. A peso-normalised price rides alongside it, so the two compare on one scale. Bedrooms, bathrooms, built area, price per square metre, the province and town, the lead photo and the advertiser's name come through as well. Switch to Property Detail and a row gains the advertiser's own Spanish description, the complete photo set, and the approximate map point with a flag saying how precise it is. It also gains the published date, the sector, half-bathrooms, parking spaces, the furnished and condition values, and the advertiser's shop, account age and verification badge. Coverage is 32,090 live adverts across 30 provinces and 72 towns, every place verified by fetching it.

Don't use it when: the property is not in the Dominican Republic — use encuentra24-property-scraper or fincaraiz-property-scraper or inmuebles24-property-scraper instead.

How to call it: set `dealType` to `sale`, `rent` or `any`, and `propertyType` to apartamentos, casas, penthouses, solares-terrenos, casas-vacacionales, oficinas-comerciales, habitaciones-compartidas, otros-inmuebles or `all`. Narrow the place with `location`, which lists 30 provinces and 72 towns exactly as the portal writes them. `santo-domingo/distrito-nacional` is the deep market at 18,615 adverts, then `santo-domingo/santo-domingo-este`, `santiago` and `la-altagracia/bavaropunta-cana`. A place the portal does not recognise stops the run before anything is fetched, rather than quietly widening to the whole country. `minPrice` and `maxPrice` are in Dominican pesos, and the portal applies them to dollar-priced adverts too, on its own conversion. `minAreaSqm`, `maxAreaSqm`, `minBedrooms`, `minBathrooms` and `condition` narrow further, and `searchText` matches words inside the advert. `advertiser` keeps only registered shops or only verified accounts. `sortBy` decides which adverts a capped run keeps. `maxItems` sets the depth — adverts arrive 24 to a request and the deepest board runs to 1,338 pages. To reach a board the pickers do not cover, paste its Corotos address into `searchUrls` and it is used exactly as written. Switch `operation` to `detail` with `listingUrls` only to open adverts you already hold. That returns the description, photo set, coordinates and advertiser block a search row cannot carry.

Start with this input:
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "apartamentos",
  "location": "santo-domingo/distrito-nacional",
  "maxItems": 100
}

Ask me which part of the Dominican Republic to cover, whether they want adverts for sale or to rent, and whether the full advert text, photo set and map point are worth opening each advert separately, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull apartments for sale in Distrito Nacional between 5 and 10 million pesos and rank sectors by median price per square metre.*
- *Find holiday homes and villas for sale in Bávaro, Punta Cana and Las Terrenas, priced in dollars, with the photo set for each.*
- *Give me every off-plan apartment listed nationally, grouped by the developer or agent selling it.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/corotos-com-property-scraper.md](https://apify.com/sian.agency/corotos-com-property-scraper.md).

### 📋 Overview

**Corotos is where Dominicans actually list property.** This actor turns that whole section into a dataset, for investors, agencies, valuers and analysts who need the market as rows.

**What you get:**

- ✅ **Complete coverage**: 32,090 live property adverts on 2026-09-13, split 20,833 for sale and 11,257 to rent
- ⚡ **Reads to the end**: a full drain of the apartments-for-sale board returned 11,842 unique adverts against a declared 11,844, with no paging ceiling
- 🎯 **Real geography**: 30 provinces and 72 towns, every one of them verified to return its own results
- 💰 **Pay per advert**: only adverts actually returned are charged, never errors
- 💎 **Honest filters**: the two narrowing controls the portal shows but its server ignores are not offered here, so nothing you pick quietly returns the whole market
- ✨ **Both currencies, kept straight**: each advert keeps the currency its advertiser quoted, and a peso-normalised price rides alongside it

### ✨ Features

- 🏠 **Eight property boards**: apartments, houses, penthouses, land and plots, holiday homes, offices and commercial premises, shared rooms, other property
- 📍 **102 places**: 30 provinces plus 72 towns, each one checked against the national board
- 💱 **Dual currency**: prices in Dominican pesos or US dollars exactly as advertised, plus a peso figure for sorting and comparison
- 📐 **Full specs**: bedrooms, bathrooms, half-bathrooms, built area, parking, price per square metre
- 🗺️ **Coordinates**: latitude and longitude where the advert publishes them, with a flag saying whether the point is exact
- 📸 **Every photo**: advert pages carry the whole gallery, ten images on average
- 👤 **Advertiser block**: name, type, shop address, account age and verification badge
- 🏗️ **Condition filter**: first-owner, resale, new, under construction, off-plan or other
- 🔎 **Free-text search**: match words inside the advert, the way the portal's own search box does
- 📅 **Published dates**: returned as ISO dates, so they sort and join without guesswork

### 🎬 Quick Start

Pick a place, pick what you are looking for, press Start. Results land in a dataset you can export as JSON, CSV or Excel. A bare run with no settings reads the newest adverts from the whole country.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~corotos-com-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"operation": "search", "dealType": "sale", "propertyType": "apartamentos", "location": "santo-domingo/distrito-nacional", "maxItems": 100}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose where

Pick a province or a town from the place list. Leave it on "All of the Dominican Republic" to read the whole market.

#### Step 2: Choose what

Set the market to for sale, to rent or both, and pick a property type. Add price, area, bedroom, bathroom, condition or advertiser filters if you want a narrower slice.

#### Step 3: Set the depth and run

Raise the maximum adverts to read a whole market, or leave it low to sample one. Press Start.

**That's it! In a couple of minutes, you'll have:**

- A row per advert with price, rooms, area, place and advertiser
- A dataset you can export to JSON, CSV or Excel
- A run report summarising what was collected and what it cost

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` to walk a board, `detail` to open adverts you already have |
| `dealType` | string | No | `any`, `sale` or `rent` |
| `propertyType` | string | No | `all`, `apartamentos`, `casas`, `penthouses`, `solares-terrenos`, `casas-vacacionales`, `oficinas-comerciales`, `habitaciones-compartidas`, `otros-inmuebles` |
| `location` | string | No | `any`, a province such as `santiago`, or a town written province-then-town such as `santo-domingo/distrito-nacional` |
| `searchText` | string | No | Words to match inside the advert |
| `minPrice` | integer | No | Lowest asking price in Dominican pesos, 0 for no bound |
| `maxPrice` | integer | No | Highest asking price in Dominican pesos, 0 for no bound |
| `minAreaSqm` | integer | No | Smallest built area in square metres |
| `maxAreaSqm` | integer | No | Largest built area in square metres |
| `minBedrooms` | integer | No | Fewest bedrooms |
| `minBathrooms` | integer | No | Fewest full bathrooms |
| `condition` | string | No | `any`, `Primer Uso`, `Segundo Uso`, `Nuevo`, `En construcción`, `En planos`, `Otros` |
| `advertiser` | string | No | `anyone`, `shops` or `verified` |
| `sortBy` | string | No | `recent`, `relevance`, `price-asc` or `price-desc` |
| `searchUrls` | array | No | Corotos result-page addresses, used exactly as written |
| `listingUrls` | array | No | Corotos advert addresses to open, for `detail` |
| `maxItems` | integer | No | How many adverts to return before the run stops |

**Example — apartments for sale in the capital:**

```json
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "apartamentos",
  "location": "santo-domingo/distrito-nacional",
  "maxItems": 500
}
```

**Example — beachfront holiday homes, dollar range, newest first:**

```json
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "casas-vacacionales",
  "location": "la-altagracia/bavaropunta-cana",
  "minPrice": 6000000,
  "minBedrooms": 2,
  "sortBy": "recent",
  "maxItems": 300
}
```

**Example — open specific adverts in full:**

```json
{
  "operation": "detail",
  "listingUrls": [
    "https://www.corotos.com.do/anuncio/inmuebles-en-venta/apartamentos/apartamento-en-venta-avenida-jacobo-majluta-4ta-con-terraza-kdj6prz"
  ]
}
```

### 📤 Output

Results are saved to the Apify dataset with **45 fields** including:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | number | The advert's own number on Corotos |
| `propertyTitle` | string | Advert headline |
| `url` | string | Link to the advert |
| `price` | number | Asking price, as advertised |
| `currency` | string | `DOP` or `USD` — the currency the advertiser quoted |
| `priceDop` | number | The same price in Dominican pesos, for comparison |
| `pricePerSqm` | number | Asking price divided by built area |
| `dealType` | string | `sale` or `rent` |
| `propertyType` | string | Apartment, house, penthouse, land and so on |
| `bedrooms` | number | Bedroom count |
| `bathrooms` | number | Full bathroom count |
| `areaSqm` | number | Built area in square metres |
| `province` | string | Province the advert sits in |
| `town` | string | Town within that province |
| `sector` | string | Neighbourhood, where the advert names one |
| `latitude` | number | Map latitude, where published |
| `longitude` | number | Map longitude, where published |
| `locationIsExact` | boolean | Whether that point is exact or approximate |
| `imageUrls` | array | Every photo on the advert |
| `publishedAt` | string | Published date, as `YYYY-MM-DD` |
| `advertiserName` | string | Who placed the advert |
| `advertiserVerified` | boolean | Whether Corotos has verified the account |

**Example:**

```json
{
  "listingId": 10321070,
  "listingCode": "kdj6prz",
  "propertyTitle": "Apartamento en venta la Jacobo Majluta 4ta con terraza",
  "url": "https://www.corotos.com.do/anuncio/inmuebles-en-venta/apartamentos/apartamento-en-venta-avenida-jacobo-majluta-4ta-con-terraza-kdj6prz",
  "price": 5900000,
  "currency": "DOP",
  "priceDop": 5900000,
  "pricePerSqm": 46456.69,
  "dealType": "sale",
  "propertyType": "apartamentos",
  "bedrooms": 3,
  "bathrooms": 2,
  "halfBathrooms": 1,
  "areaSqm": 127,
  "parkingSpaces": 2,
  "furnished": "No",
  "province": "Santo Domingo",
  "town": "Santo Domingo Norte",
  "sector": "Mal Nombre",
  "latitude": 18.60631944635355,
  "longitude": -69.91304341592394,
  "locationIsExact": false,
  "imageCount": 16,
  "publishedAt": "2026-09-12",
  "advertiserName": "Alexander Arias",
  "advertiserVerified": true,
  "status": "success"
}
```

### 💼 Use Cases & Examples

#### 1. Price the capital by sector

**Valuers and investors who need asking price against built area, sector by sector.**

**Input:** `location` set to `santo-domingo/distrito-nacional`, `propertyType` `apartamentos`
**Output:** Up to 18,615 adverts across the capital, each with price, area and price per square metre
**Use:** Build a per-sector price map from live asking prices instead of last year's report.

#### 2. Track the Punta Cana second-home market

**Agencies and funds watching Caribbean holiday stock.**

**Input:** `propertyType` `casas-vacacionales`, `location` `la-altagracia/bavaropunta-cana`
**Output:** The 1,331 adverts Bávaro / Punta Cana carries, plus hundreds more in Las Terrenas, Sosúa, Juan Dolio and Bayahibe
**Use:** Follow dollar-priced beachfront supply the international portals only partly index.

#### 3. Find off-plan supply before it lists elsewhere

**Developers and analysts who want a pipeline view, not a stock view.**

**Input:** `condition` set to `En planos` or `En construcción`
**Output:** 220 off-plan and 632 under-construction apartment adverts on the for-sale board
**Use:** See which towers are being marketed early, and at what price per square metre.

#### 4. Build a Dominican agency directory

**Recruiters, proptech founders and anyone mapping the market's supply side.**

**Input:** `advertiser` set to `shops`, a high `maxItems`
**Output:** Every advert with its agency name, account age and verification badge
**Use:** Rank the country's active property sellers by how much stock each one carries.

#### 5. Monitor a competitor's listings

**Agencies watching what a rival adds, withdraws and reprices.**

**Input:** The same filters on a schedule, run weekly
**Output:** A dated dataset per run, keyed on the advert number
**Use:** Diff two runs to see exactly what moved.

#### 6. Feed an AI agent a live property index

**Teams building assistants that answer questions about Dominican real estate.**

**Input:** Any board, via the Apify MCP server
**Output:** Typed rows with prices, areas, rooms, coordinates and photos
**Use:** Let an assistant answer from current adverts rather than guessing.

#### 7. Rental yield research

**Investors comparing what a flat sells for against what it rents for.**

**Input:** Two runs. Set `dealType` to `sale`, then to `rent`, keeping the same place and type
**Output:** 11,845 sale and 5,484 rental apartment adverts nationally
**Use:** Pair them by sector and size to estimate gross yield.

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/corotos-com-property-scraper').call({
  operation: 'search',
  dealType: 'sale',
  propertyType: 'apartamentos',
  location: 'santo-domingo/distrito-nacional',
  maxItems: 200
});

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

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/corotos-com-property-scraper').call(
    run_input={
        'operation': 'search',
        'dealType': 'rent',
        'propertyType': 'apartamentos',
        'location': 'santiago/santiago-de-los-caballeros',
        'maxItems': 200,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['propertyTitle'], item['price'], item['currency'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~corotos-com-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "dealType": "sale", "propertyType": "casas", "location": "puerto-plata/puerto-plata", "maxItems": 150}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: Schedule, weekly or daily
2. **HTTP Request**: Call the Actor API with your filters
3. **Process**: Diff the new dataset against last run on `listingId`
4. **Action**: Write to a sheet, a database, or a Slack alert for new stock

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 adverts** per run, every field, same quality
- No credit card required
- Enough to check the data before you commit

#### PAID Tier (Production Ready)

- **Unlimited** adverts per run, to the end of any board
- Pay per advert returned. Errors are never charged
- **$0.0015** per advert from a search, **$0.0045** per advert opened in full, and **$0.005** to start a run

💰 Adverts arrive 24 to a request, so a whole province is minutes of work.

🔗 [View current pricing](https://apify.com/sian.agency/corotos-com-property-scraper?fpr=sian)

### ❓ Frequently Asked Questions

**Q: Do I need an API key, a login or a proxy?**
A: No. Pick a place and press Start.

**Q: Are prices in pesos or dollars?**
A: Both, and each row says which. Dominican advertisers quote in pesos or US dollars depending on the market. Of 120 adverts sampled, 95 were in dollars. A peso-normalised price ships alongside, so everything sorts on one scale.

**Q: Are the map coordinates exact?**
A: Almost never, and the row says so. Corotos publishes an approximate point for most adverts and an exact one only where the advertiser released it. Of 120 adverts sampled, one was exact. The `locationIsExact` field carries that flag.

**Q: Can I filter by whether a property is furnished?**
A: Not as a search filter, and the reason is worth knowing. Corotos shows a furnished filter in its own panel, but its server ignores it. Asking for furnished, unfurnished or nonsense all return the identical unfiltered board. Offering it would charge you for the whole market while appearing to narrow it. The furnished value still ships on every detail row, so you can filter after the fact.

**Q: How many adverts are there in total?**
A: 32,090 across the whole property section on 2026-09-13: 20,833 for sale and 11,257 to rent. Apartments alone hold 17,329.

**Q: How deep can a single run go?**
A: To the end of the board. A full drain of the apartments-for-sale board returned 11,842 unique adverts against a declared 11,844, with no paging ceiling.

**Q: Do you return advertiser phone numbers?**
A: No. Phone and WhatsApp numbers belong to private individuals and the portal puts them behind a click. You get the advertiser's name, type, shop address, account age and verification badge instead.

**Q: What output formats are available?**
A: JSON, CSV and Excel — export directly from the Apify dataset.

**Q: Does the search operation return descriptions and every photo?**
A: No. A search row carries the lead photo, price, rooms, area, town and advertiser name. Descriptions, the full gallery, coordinates and the published date come from Property Detail, which opens one advert per request.

### 🐛 Troubleshooting

**A run returned nothing**

- Check the place and property type actually pair up. Some towns carry very little stock
- Widen the price, area or bedroom bounds, or clear the condition filter
- Try `dealType` on `any` to read both sides of the market

**Fewer adverts than expected**

- `maxItems` caps the run; raise it to read the whole board
- The FREE tier stops at 25 rows per run
- A narrow filter combination can legitimately match only a handful of adverts

**An advert came back as an error row**

- Adverts get withdrawn. A taken-down address comes back as a marked row and is not charged
- Run a search over the same place and type to pick up what replaced it

**A pasted address behaved unexpectedly**

- Addresses in `searchUrls` are used exactly as written, including any filters and ordering they already carry
- Check the address opens in a browser first

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

Corotos is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Corotos.

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/corotos-com-property-scraper/changelog.md

# Actor input Schema

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

Pick one per run. Property Search walks a Corotos property board and returns one row per advert. Property Detail takes Corotos advert addresses you already hold and opens each one for the full record: the advertiser's own Spanish description, the complete photo set, map coordinates, the published date, the spec table and the advertiser's shop. A search row alone carries none of those.

## `dealType` (type: `string`):

Which side of the market to read. Corotos keeps for-sale and to-rent adverts on separate boards that together hold the whole vertical: 20,833 adverts for sale and 11,257 to rent on 2026-09-13. Both reads them together, which is the larger board and the default.

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

Which board to walk. Every type here was fetched and confirmed to return its own narrowed board; a type the portal does not publish is answered with 404 rather than quietly widened, so a wrong value stops the run instead of billing you for the whole corpus. Apartments is the deep board at 11,845 for sale and 5,484 to rent; offices and commercial premises hold 5,148, houses 3,994, land and plots 2,950 and holiday homes 1,165. Penthouses are the one type the portal files under two different…

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

Where to look. The list is the portal's own place index, and every entry was fetched against the 32,090-advert national board to confirm it narrows the result set — five town slugs that the portal publishes but which carry no property at all were dropped, and so was a duplicate name for Santo Domingo city. Provinces come first, then the towns inside each one. Distrito Nacional is the deep market at 18,615 adverts, then Santo Domingo Este, Santiago de los Caballeros and Bávaro / Punta Cana.

## `searchText` (type: `string`):

Optional words to match inside the advert, exactly as the portal's own search box takes them — 'piscina', 'Confotur', 'amueblado', 'planos'. Leave empty to read the whole board. The portal matches these server-side, so a word no advert carries returns nothing rather than everything.

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

Lowest asking price to keep, in Dominican pesos. Corotos stores every advert against a peso-normalised price column and filters on that, so this bound applies to dollar-priced adverts too, converted by the portal. 0 means no lower bound.

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

Highest asking price to keep, in Dominican pesos, on the same peso-normalised column as the minimum. 0 means no upper bound.

## `minAreaSqm` (type: `integer`):

Smallest built area to keep, in square metres. 0 means no lower bound.

## `maxAreaSqm` (type: `integer`):

Largest built area to keep, in square metres. 0 means no upper bound.

## `minBedrooms` (type: `integer`):

Fewest bedrooms to keep. 0 means no lower bound.

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

Fewest full bathrooms to keep. Half-bathrooms are counted separately by the portal and are not included here. 0 means no lower bound.

## `condition` (type: `string`):

How far along the building is. Most adverts declare no condition at all, so choosing one narrows the board sharply — on the apartments-for-sale board these six values return 1,331, 1,252, 864, 632, 220 and 499 adverts out of 11,844. Three of them are not offered by the portal's own filter panel; they were found by testing the values that appear on advert pages, and each was confirmed to return real adverts.

## `advertiser` (type: `string`):

Who placed the advert. Registered shops and agencies removes private sellers; verified accounts keeps only advertisers Corotos has identity-checked. On the apartments-for-sale board these drop the count from 11,844 to 10,967 and 10,344 respectively, so both narrow the board rather than being decorative.

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

The order the portal returns the board in. This matters when you cap the run below the board size, because the cap keeps the first N in this order. Price ordering runs on the peso-normalised price, so dollar and peso adverts interleave correctly rather than forming two separate ladders.

## `searchUrls` (type: `array`):

Paste Corotos result-page addresses to use them verbatim instead of the pickers above. Use this to reach a board the pickers do not cover. Each address is walked from its first page, and anything already in the address — filters, ordering, place — is left exactly as you wrote it.

## `listingUrls` (type: `array`):

Corotos advert addresses to open, one per line, for the Property Detail operation. They look like https://www.corotos.com.do/anuncio/inmuebles-en-venta/apartamentos/some-title-kdj6prz. An address the portal no longer publishes comes back as a clearly-marked error row and is not charged.

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

How many adverts to return before the run stops. Adverts arrive 24 to a request and the deepest board runs to 1,338 pages, so raise this to read a whole market and leave it low to sample one. Nothing beyond this number is fetched, saved or charged.

## Actor input object example

```json
{
  "operation": "search",
  "dealType": "any",
  "propertyType": "all",
  "location": "any",
  "searchText": "",
  "minPrice": 0,
  "maxPrice": 0,
  "minAreaSqm": 0,
  "maxAreaSqm": 0,
  "minBedrooms": 0,
  "minBathrooms": 0,
  "condition": "any",
  "advertiser": "anyone",
  "sortBy": "recent",
  "searchUrls": [],
  "listingUrls": [],
  "maxItems": 100
}
```

# Actor output Schema

## `corotosAdverts` (type: `string`):

Every advert this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "dealType": "any",
    "propertyType": "all",
    "location": "any",
    "searchText": "",
    "minPrice": 0,
    "maxPrice": 0,
    "minAreaSqm": 0,
    "maxAreaSqm": 0,
    "minBedrooms": 0,
    "minBathrooms": 0,
    "condition": "any",
    "advertiser": "anyone",
    "sortBy": "recent",
    "searchUrls": [],
    "listingUrls": [],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/corotos-com-property-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 = {
    "operation": "search",
    "dealType": "any",
    "propertyType": "all",
    "location": "any",
    "searchText": "",
    "minPrice": 0,
    "maxPrice": 0,
    "minAreaSqm": 0,
    "maxAreaSqm": 0,
    "minBedrooms": 0,
    "minBathrooms": 0,
    "condition": "any",
    "advertiser": "anyone",
    "sortBy": "recent",
    "searchUrls": [],
    "listingUrls": [],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/corotos-com-property-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 '{
  "operation": "search",
  "dealType": "any",
  "propertyType": "all",
  "location": "any",
  "searchText": "",
  "minPrice": 0,
  "maxPrice": 0,
  "minAreaSqm": 0,
  "maxAreaSqm": 0,
  "minBedrooms": 0,
  "minBathrooms": 0,
  "condition": "any",
  "advertiser": "anyone",
  "sortBy": "recent",
  "searchUrls": [],
  "listingUrls": [],
  "maxItems": 100
}' |
apify call sian.agency/corotos-com-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/corotos-com-property-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/aAs45dR5BiGlzUNqT/builds/mlbZ0By7egfuq6msp/openapi.json
