# ClasificadosOnline Scraper - Puerto Rico Property Listings (`sian.agency/clasificadosonline-property-scraper`) Actor

Scrape ClasificadosOnline Bienes Raíces, Puerto Rico's biggest classifieds site: homes, apartments, land and rentals with USD price, bedrooms, baths, town, neighbourhood, brokerage and photos. Filter by town, type, price, pets, parking and Section 8.

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

## Pricing

from $1.32 / 1,000 property searches

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

## ClasificadosOnline Scraper - Puerto Rico Property Listings 🏝️

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Zillow](https://img.shields.io/badge/Store-Zillow-1F4E79)](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) [![Realtor.com](https://img.shields.io/badge/Store-Realtor.com-D92228)](https://apify.com/sian.agency/realtor-property-scraper?fpr=sian) [![Corotos Dominican Republic](https://img.shields.io/badge/Store-Corotos%20Dominican%20Republic-1AE392)](https://apify.com/sian.agency/corotos-com-property-scraper?fpr=sian)

#### 🎉 About 13,000 live Puerto Rico property adverts from ClasificadosOnline Bienes Raíces, from $1.50 per 1,000

##### Built for Puerto Rico brokers, investors, landlords, relocation advisors and anyone pricing homes in San Juan, Dorado or Carolina

***

### 🔎 What is the ClasificadosOnline Property Scraper — and when should you use it?

The **ClasificadosOnline Property Scraper** turns public ClasificadosOnline Bienes Raíces adverts from anywhere in Puerto Rico 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:** Puerto Rico sale and rental adverts as rows: houses, apartments, walk-ups, multi-family, commercial, farms, lots and rooms. Every search row carries the USD price as a number, type, bedrooms, bathrooms, town, neighbourhood and whether a brokerage or an individual account listed it. Open each advert in full and you also get the description, square feet, every photo and the brokerage agent's phone.

**Use something else when:** you want MLS listings or property outside Puerto Rico. Use [Zillow Scraper](https://apify.com/sian.agency/zillow-property-scraper?fpr=sian) for US homes for sale and rent, Puerto Rico included. Use [Realtor.com Scraper](https://apify.com/sian.agency/realtor-property-scraper?fpr=sian) for MLS listings across the US and Puerto Rico. Use [Corotos Scraper](https://apify.com/sian.agency/corotos-com-property-scraper?fpr=sian) for Dominican Republic property adverts. This actor reads ClasificadosOnline only, for live adverts. Sold prices and vacation rentals are not returned, and an individual account's name or phone is never returned.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/clasificadosonline-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 Puerto Rico property adverts and asking prices in US dollars from ClasificadosOnline using the Apify Actor `sian.agency/clasificadosonline-property-scraper`.

Use it when I need: Puerto Rico sale and rental adverts as rows: houses, apartments, walk-ups, multi-family, commercial, farms, lots and rooms. Every search row carries the USD price as a number, type, bedrooms, bathrooms, town, neighbourhood and whether a brokerage or an individual account listed it. Open each advert in full and you also get the description, square feet, every photo and the brokerage agent's phone.

Don't use it when: you want MLS listings or property outside Puerto Rico — use zillow-property-scraper or realtor-property-scraper or corotos-com-property-scraper instead.

How to call it: set `dealType` (`sale` or `rent`), `propertyType` (`any`, `apartment`, `walkup`, `house`, `multifamily`, `commercial`, `farm`, `land`, `land-or-farm`, `room`) and `municipality` (a town such as `dorado`, a San Juan area such as `san-juan-condado-miramar`, a region such as `region-metro`, or `all-puerto-rico`). `minPrice` and `maxPrice` are in USD, `bedrooms` takes `any`, `efficiency`, `1` to `5` or `6plus`, and `listedBy` keeps only `brokerage` or `individual` adverts. `includeDetails` opens each advert for the description, square feet and every photo, for an extra charge per advert. To expand adverts you already have, set `operation` to `detail` and pass `listingUrls`.

Start with this input:
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "house",
  "municipality": "dorado",
  "maxPrice": 600000,
  "maxResults": 100
}

Ask me which town or San Juan area to cover, whether it is for sale or for rent, and the budget, then run the Actor and summarise the results as a table.
```

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

- *List 3-bedroom houses for sale in Dorado under $600,000 and give me the median price per neighbourhood.*
- *Find pet-friendly apartments for rent in Condado and Isla Verde under $2,500 a month.*
- *Show me rentals in Carolina listed by individual accounts that accept Section 8.*

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

### 📋 Overview

**ClasificadosOnline is where Puerto Rico lists its homes.** This actor reads the Bienes Raíces section of ClasificadosOnline and returns every advert as a clean row: USD price, property type, bedrooms, bathrooms, town, neighbourhood, who listed it and the main photo.

**What you get:**

- ✅ **Puerto Rico's largest classifieds**: 8,547 properties for sale and 4,561 for rent on 2026-10-03
- 🏝️ **Stock the MLS portals miss**: on three Puerto Rico samples only 25-40% of adverts also appeared on Zillow or Realtor.com, and just 2-17% of adverts from individual accounts
- 🙋 **Who listed it**: every row says brokerage or individual account, with the brokerage name, partner ID and review score
- 🎯 **The site's own filters**: town, type, price range, bedrooms, keyword, pets, parking and Section 8 (Plan 8)
- 💰 **$1.50 per 1,000 properties**: 30 adverts per results page, and you pay only for rows you get
- 📄 **Full advert on demand**: description, square feet, every photo and the brokerage agent's phone

***

### ✨ Features

- 🏘️ **All 78 municipalities**: plus the five San Juan areas, Isla Verde, Palmas del Mar, Levittown and six regions
- 🔑 **Sale and rent**: houses, apartments, walk-ups, multi-family, commercial, farms and lots for sale; apartments, houses, rooms and land for rent
- 💵 **Typed USD prices**: numbers you can sort and average; an advert with no price returns an empty price, never zero
- 🛏️ **Bedrooms and bathrooms as numbers**: "2 1/2 Baños" becomes 2.5, an efficiency becomes 0
- 🙋 **Listed by filter**: keep only brokerage adverts or only individual accounts; skipped adverts are free
- 🐾 **Rental extras**: pets policy and parking on every rental row, plus pets, parking and Section 8 filters
- 🗺️ **Neighbourhood map pin**: latitude and longitude of the urbanización or barrio each advert sits in
- 🏦 **Repossessed and optioned homes**: included by default, switch either off with one checkbox
- 📄 **Full advert add-on**: headline, description, square feet, every photo, and the agent's name and phones on brokerage adverts
- 📊 **Run report**: median price, a table of every property and a copy-ready list of advert links

***

### 🎬 Quick Start

Pick sale or rent, a property type and a town, then press Start. The actor reads ClasificadosOnline 30 adverts at a time until it has the number of properties you asked for. Results land in your dataset as JSON, CSV or Excel.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~clasificadosonline-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"dealType": "sale", "propertyType": "house", "municipality": "dorado", "maxResults": 100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose what and where

Pick **Sale or rent**, a **Property type** and a town in **Where**, for example houses for sale in Dorado.

#### Step 2: Narrow it down

Optionally add a price range, bedrooms, a keyword such as "Dorado Beach", or keep only brokerage or individual adverts.

#### Step 3: Press Start

Set **Properties to collect** and run. Turn on **Open each advert in full** if you also want descriptions, square feet and every photo.

**That's it! In a minute or two, you'll have:**

- A table of Puerto Rico properties with USD prices, bedrooms, bathrooms and town
- The brokerage behind each advert, or a flag that it came from an individual account
- Advert links and photos ready for a spreadsheet, CRM or AI agent

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (Property Search, default) or `detail` (Property Detail for pasted advert links) |
| `dealType` | string | No | `sale` (default) or `rent` |
| `propertyType` | string | No | `any`, `apartment`, `walkup`, `house`, `multifamily`, `commercial`, `farm`, `land` (sale only for the last four), `land-or-farm`, `room` (rent only) |
| `municipality` | string | No | A town, San Juan area or region, e.g. `san-juan-condado-miramar` (default), `dorado`, `carolina-isla-verde`, `region-metro`, `all-puerto-rico` |
| `keyword` | string | No | Neighbourhood, urbanización, building or word, e.g. "Condado" or "Palmas del Mar" |
| `minPrice` | integer | No | Lowest price in USD (monthly rent for rentals) |
| `maxPrice` | integer | No | Highest price in USD (monthly rent for rentals) |
| `bedrooms` | string | No | `any`, `efficiency`, `1` to `5` (exact), or `6plus` (6 or more) |
| `listedBy` | string | No | `any`, `brokerage` or `individual`; skipped adverts are not charged |
| `includeRepossessed` | boolean | No | For sale only: keep bank-owned homes (default true) |
| `includeUnderOption` | boolean | No | For sale only: keep homes already under option (default true) |
| `petsAllowed` | boolean | No | Rentals only: only rentals that accept pets |
| `section8` | boolean | No | Rentals only: only rentals that accept Section 8 (Plan 8) |
| `parking` | boolean | No | Rentals only: only rentals with parking |
| `maxResults` | integer | No | Properties to return (default 100, max 10,000) |
| `includeDetails` | boolean | No | Open each advert in full (billed as one Property Detail per property) |
| `listingUrls` | array | No | Advert links for Property Detail mode |

**Example: 3-bedroom houses for sale in Dorado under $600,000:**

```json
{
  "dealType": "sale",
  "propertyType": "house",
  "municipality": "dorado",
  "bedrooms": "3",
  "maxPrice": 600000,
  "maxResults": 100
}
```

**Example: pet-friendly rentals in Carolina from individual accounts, with full adverts:**

```json
{
  "dealType": "rent",
  "municipality": "carolina",
  "petsAllowed": true,
  "listedBy": "individual",
  "includeDetails": true,
  "maxResults": 50
}
```

**Example: open adverts you already have:**

```json
{
  "operation": "detail",
  "listingUrls": [
    { "url": "https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480" },
    { "url": "https://www.clasificadosonline.com/UDRentalsDetail.asp?ReForRentAdID=1973706" }
  ]
}
```

***

### 📤 Output

Results are saved to the Apify dataset with **36 fields**:

| Field | Type | Description |
|-------|------|-------------|
| `mainImageUrl` | string | Main photo of the advert |
| `listingId` | integer | ClasificadosOnline advert ID |
| `propertyTitle` | string | The advert's headline as written by the advertiser |
| `listingUrl` | string | Link to the advert on ClasificadosOnline |
| `dealType` | string | `sale` or `rent` |
| `propertyType` | string | House, Apartment, Walk-up apartment, Multi-family, Commercial, Farm, Lot / land, Land or farm, Room / guest house |
| `price` | number | Asking price in USD; for rentals, the monthly rent. Empty when no price is shown |
| `currency` | string | Always `USD` |
| `bedrooms` | integer | Bedrooms as a number (an efficiency is 0) |
| `bedroomsText` | string | Bedrooms as the site shows them, e.g. ">= 6" |
| `bathrooms` | number | Bathrooms; a half bath counts as 0.5 |
| `squareFeet` | number | Square feet, when the advert gives it (full advert) |
| `municipality` | string | Town or San Juan area |
| `neighborhood` | string | Urbanización, barrio or sector, e.g. "Urbanizacion - Dorado Reef" |
| `latitude` | number | Latitude of the neighbourhood's map pin (not the house itself) |
| `longitude` | number | Longitude of the neighbourhood's map pin (not the house itself) |
| `petsPolicy` | string | Rentals: pets policy as written, e.g. "Sí" or "Menos de 25lbs." |
| `parkingInfo` | string | Rentals: parking as written, e.g. "2 Asignados" |
| `listedBy` | string | `brokerage` or `individual` |
| `brokerageName` | string | The brokerage's name (brokerage adverts) |
| `brokerageId` | integer | The brokerage's ClasificadosOnline partner ID |
| `brokerageRating` | number | The brokerage's review score, when it has reviews |
| `brokerageReviews` | integer | Number of reviews behind that score |
| `contactName` | string | Agent named on a brokerage advert (full advert, brokerage adverts only) |
| `contactPhones` | array | Phone numbers the brokerage published (full advert, brokerage adverts only) |
| `descriptionText` | string | The advertiser's description (full advert) |
| `photoCount` | integer | Number of photos on the advert |
| `imageUrls` | array | Every photo, full size (full advert) |
| `hasDetail` | boolean | `true` when the full advert was opened |
| `searchUrl` | string | The results page the row came from |
| `searchPage` | integer | Results page number |
| `position` | integer | Position in the search results |
| `status` | string | `success` or `error` |
| `errorMessage` | string | What went wrong, on error rows only (never charged) |
| `_operation` | string | `search` or `detail` |
| `_fetchedAt` | string | When the row was collected (ISO 8601) |

**Example (a search row with the full advert opened):**

```json
{
  "mainImageUrl": "https://imgcache.clasificadosonline.com/PP/FS/2026/7/7/77202611626PM2w40rjt1_Big.jpg",
  "listingId": 4897480,
  "propertyTitle": "Terrera - Brisas del Mar - Luquillo P.R.",
  "listingUrl": "https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480",
  "dealType": "sale",
  "propertyType": "House",
  "price": 210000,
  "currency": "USD",
  "bedrooms": 3,
  "bedroomsText": "3",
  "bathrooms": 3,
  "municipality": "Luquillo",
  "neighborhood": "Urbanizacion - Brisas Del Mar",
  "latitude": 18.37423,
  "longitude": -65.72034,
  "listedBy": "brokerage",
  "brokerageName": "ALONSO REALTY",
  "brokerageId": 1830,
  "brokerageRating": 2.75,
  "brokerageReviews": 2,
  "contactName": "Alonso Lic.13453",
  "contactPhones": ["(787) 360-4456"],
  "descriptionText": "Casa Terrera Tipo Dúplex en Brisas del Mar, Luquillo\nTasación disponible | Dueños motivados\n...",
  "photoCount": 4,
  "imageUrls": ["https://imgcache.clasificadosonline.com/PP/FS/2026/7/7/77202611626PM2w40rjt1_Big.jpg"],
  "hasDetail": true,
  "searchPage": 1,
  "position": 1,
  "status": "success",
  "_operation": "search",
  "_fetchedAt": "2026-10-03T17:20:00.000Z"
}
```

#### Coverage

All of Puerto Rico: the 78 municipalities, the five San Juan areas (Condado-Miramar, Hato Rey, Río Piedras, Santurce, Old San Juan), Isla Verde, Palmas del Mar and Levittown, or a whole region (Metro, North, South, East, West, Central). Prices are in US dollars as advertised. Vacation rentals and sold prices are not included.

***

### 💼 Use Cases & Examples

#### 1. Price comps for a Puerto Rico town

**A broker preparing a listing presentation pulls every house for sale in Dorado and compares asking prices by bedrooms.**

**Input:** `dealType: sale`, `propertyType: house`, `municipality: dorado`
**Output:** USD asking price, bedrooms, bathrooms, neighbourhood and brokerage for each house
**Use:** A median price per bedroom count for the town, ready in a spreadsheet

#### 2. Rental market and Section 8 supply

**A housing nonprofit measures how many voucher-ready rentals exist in Carolina and Bayamón, and at what rent.**

**Input:** `dealType: rent`, `municipality: carolina`, `section8: true`
**Output:** Monthly rent, bedrooms, pets policy, parking and neighbourhood for each rental
**Use:** Track affordable supply and rents month over month

#### 3. Individual-account inventory

**An investor looks for homes advertised by individual accounts, a large share of Puerto Rico rentals that MLS-fed portals do not carry.**

**Input:** `listedBy: individual`, any town
**Output:** Only adverts from individual accounts; brokerage adverts are skipped and not charged
**Use:** A shortlist of adverts that are mostly missing from Zillow and Realtor.com (2-17% overlap in our samples)

#### 4. Brokerage market share

**A brokerage owner counts live listings per competitor in San Juan.**

**Input:** `municipality: region-metro`, `listedBy: brokerage`
**Output:** Brokerage name, partner ID and review score on every advert
**Use:** Listing counts by brokerage and town, refreshed weekly

#### 5. Investor deal sourcing

**A buy-and-hold investor watches multi-family buildings, lots and commercial property island-wide.**

**Input:** `propertyType: multifamily`, `municipality: all-puerto-rico`, a schedule
**Output:** New adverts as they post, with price and town
**Use:** Alerts for fresh deals before they are gone

#### 6. Relocation and Act 60 research

**A relocation advisor compares Condado, Isla Verde, Dorado and Palmas del Mar for a client moving to Puerto Rico.**

**Input:** One run per area, sale or rent
**Output:** Asking prices and rents side by side
**Use:** A one-page comparison of neighbourhoods by budget

***

### 🔗 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/clasificadosonline-property-scraper').call({
  dealType: 'rent',
  propertyType: 'apartment',
  municipality: 'san-juan-condado-miramar',
  maxPrice: 2500,
  maxResults: 100,
});

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/clasificadosonline-property-scraper').call(
    run_input={
        'dealType': 'sale',
        'propertyType': 'house',
        'municipality': 'dorado',
        'bedrooms': '3',
        'maxResults': 100,
    }
)

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~clasificadosonline-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"dealType": "rent", "municipality": "carolina", "petsAllowed": true, "maxResults": 50}'
```

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

1. **Trigger**: A schedule, for example every Monday morning
2. **HTTP Request**: Call the actor's API with your search
3. **Process**: Read the JSON rows and keep the new advert IDs
4. **Action**: Save to Google Sheets or Airtable, or send yourself the new adverts

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 properties** per run, full feature access, same data
- No credit card required
- Enough to check a town before a bigger run

#### PAID Tier (Production Ready)

- **Unlimited** properties per run
- 30 properties per results page, a few seconds a page
- Pay per result: only delivered rows are charged

💰 **$1.50 per 1,000 properties**, plus $3.00 per 1,000 for the optional full advert and a $0.005 run start. Error rows and adverts skipped by the Listed by filter are never charged.

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

***

### ❓ Frequently Asked Questions (FAQ)

**Q: Does it cover all of Puerto Rico?**
A: Yes. Pick any of the 78 municipalities, one of the five San Juan areas, Isla Verde, Palmas del Mar or Levittown, a whole region, or All of Puerto Rico.

**Q: What currency are prices in?**
A: US dollars, exactly as the advert states. Rent is the monthly rent. An advert with no price returns an empty price, never a zero.

**Q: Are adverts in Spanish?**
A: Mostly. Headlines and descriptions stay as the advertiser wrote them. Price, type, bedrooms, bathrooms and town come from the site's own fields, so they are filled either way.

**Q: Do I get phone numbers?**
A: For brokerage adverts, the full advert returns the agent's name and the phone numbers the brokerage published. For adverts from individual accounts the actor returns neither a name nor a phone. Reach them through ClasificadosOnline.

**Q: What does Listed by mean?**
A: Brokerage means the advert comes from a real-estate company with a ClasificadosOnline partner profile, and the row names it. Individual means any other account: private owners and landlords, and some independent agents.

**Q: Is this the same data as Zillow or Realtor.com?**
A: Only partly. On three Puerto Rico samples 25-40% of ClasificadosOnline adverts also appeared on Zillow or Realtor.com, and only 2-17% of the adverts from individual accounts.

**Q: Are the coordinates the exact house?**
A: No. The latitude and longitude are the map pin ClasificadosOnline uses for the neighbourhood, shared by every advert in that urbanización.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and more, exported straight from the Apify dataset.

***

### 🐛 Troubleshooting

**The run stopped with "no ... for rent" or "only for sale"**

- Commercial, multi-family, farms and lots exist only for sale; rooms and land-or-farm only for rent
- Pick another property type, or switch Sale or rent

**Fewer rows than I asked for**

- The search may simply have fewer adverts; the run log shows how many matched
- With Listed by set, non-matching adverts are skipped, so a town with few individual adverts returns few rows

**San Juan returns very little**

- ClasificadosOnline splits San Juan into five areas: pick Condado-Miramar, Hato Rey, Río Piedras, Santurce or Old San Juan
- Or pick the Metro region to cover all of them

**An advert in Property Detail came back as an error**

- The advert has been removed from ClasificadosOnline. You were not charged for it

***

### ⚖️ 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/).

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

***

### 🤝 Support

**Join our active support community**

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

***

**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/clasificadosonline-property-scraper/changelog.md

# Actor input Schema

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

Property Search reads ClasificadosOnline results pages. Property Detail opens the advert addresses you paste in the Advert URLs field.

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

Which side of the market to read. For rentals every price is the monthly rent in US dollars.

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

Which kind of property. Some types exist on only one side of the market: commercial, multi-family, farms and lots are for sale; rooms and land-or-farm are for rent. A type that does not exist for the side you picked stops the run before anything is charged.

## `municipality` (type: `string`):

A municipality, one of the San Juan areas, or a whole region. San Juan is split into five areas on ClasificadosOnline; the Metro region covers all of them plus Bayamón, Carolina, Guaynabo and the rest of the metro area.

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

Optional. A neighbourhood, urbanización, building or word, for example Condado, Dorado Beach or Palmas del Mar. ClasificadosOnline matches it against the advert's location and text.

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

Lowest asking price in US dollars; for rentals, the monthly rent. Leave empty for no floor.

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

Highest asking price in US dollars; for rentals, the monthly rent. Leave empty for no ceiling.

## `bedrooms` (type: `string`):

Exact number of bedrooms, as ClasificadosOnline filters it: 3 returns three-bedroom adverts only.

## `listedBy` (type: `string`):

Brokerage accounts are real-estate companies with a ClasificadosOnline partner profile; the row names the brokerage. Individual accounts are everyone else: private owners and landlords, plus some independent agents. Adverts that do not match are skipped and never charged.

## `includeRepossessed` (type: `boolean`):

For-sale searches only. Keep bank-owned (reposeídas) properties in the results, as the site does by default.

## `includeUnderOption` (type: `boolean`):

For-sale searches only. Keep properties already under option (opcionadas) in the results, as the site does by default.

## `petsAllowed` (type: `boolean`):

Rentals only. Return only rentals that accept pets.

## `section8` (type: `boolean`):

Rentals only. Return only rentals that accept Section 8 (Plan 8) housing vouchers.

## `parking` (type: `boolean`):

Rentals only. Return only rentals with parking.

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

How many properties to return. Pages hold 30, so a run stops on the page that reaches this number.

## `includeDetails` (type: `boolean`):

Also open every advert page for the full headline and description, square feet and every photo. On brokerage adverts it adds the agent's name and phone; individual accounts never get a name or phone. Billed as one Property Detail on top of the search row.

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

ClasificadosOnline advert addresses for Property Detail, one per line, for example https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480 (for sale) or https://www.clasificadosonline.com/UDRentalsDetail.asp?ReForRentAdID=1973706 (for rent).

## Actor input object example

```json
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "any",
  "municipality": "san-juan-condado-miramar",
  "bedrooms": "any",
  "listedBy": "any",
  "includeRepossessed": true,
  "includeUnderOption": true,
  "petsAllowed": false,
  "section8": false,
  "parking": false,
  "maxResults": 50,
  "includeDetails": false,
  "listingUrls": [
    {
      "url": "https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480"
    }
  ]
}
```

# Actor output Schema

## `clasificadosonlineProperties` (type: `string`):

Every property this run returned, with price, type, location and who listed it.

## `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": "sale",
    "propertyType": "any",
    "municipality": "san-juan-condado-miramar",
    "bedrooms": "any",
    "listedBy": "any",
    "includeRepossessed": true,
    "includeUnderOption": true,
    "petsAllowed": false,
    "section8": false,
    "parking": false,
    "maxResults": 50,
    "includeDetails": false,
    "listingUrls": [
        {
            "url": "https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/clasificadosonline-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": "sale",
    "propertyType": "any",
    "municipality": "san-juan-condado-miramar",
    "bedrooms": "any",
    "listedBy": "any",
    "includeRepossessed": True,
    "includeUnderOption": True,
    "petsAllowed": False,
    "section8": False,
    "parking": False,
    "maxResults": 50,
    "includeDetails": False,
    "listingUrls": [{ "url": "https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480" }],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/clasificadosonline-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": "sale",
  "propertyType": "any",
  "municipality": "san-juan-condado-miramar",
  "bedrooms": "any",
  "listedBy": "any",
  "includeRepossessed": true,
  "includeUnderOption": true,
  "petsAllowed": false,
  "section8": false,
  "parking": false,
  "maxResults": 50,
  "includeDetails": false,
  "listingUrls": [
    {
      "url": "https://www.clasificadosonline.com/UDRealEstateDetail.asp?ID=4897480"
    }
  ]
}' |
apify call sian.agency/clasificadosonline-property-scraper --silent --output-dataset

```

## MCP server setup

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