# InfoCasas Property Scraper — Phase-0 gate (`sian.agency/infocasas-property-scraper`) Actor

Extrae avisos de InfoCasas en Uruguay, Paraguay, Bolivia y Perú: precio en USD y moneda local, superficie, dormitorios, GPS, fotos, amenities y datos del anunciante.

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

## Pricing

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

## InfoCasas Scraper - Uruguay, Paraguay, Bolivia & Peru Property 🏠

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![FincaRaiz Scraper](https://img.shields.io/badge/Store-FincaRaiz%20Scraper-FCD116)](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian) [![Urbania Scraper](https://img.shields.io/badge/Store-Urbania%20Scraper-D91023)](https://apify.com/sian.agency/urbania-property-scraper?fpr=sian) [![Encuentra24 Scraper](https://img.shields.io/badge/Store-Encuentra24%20Scraper-0077C8)](https://apify.com/sian.agency/encuentra24-property-scraper?fpr=sian)

#### 🎉 Four InfoCasas country editions on one schema - Uruguay, Paraguay, Bolivia and Peru, 63 fields per advert, prices in the advertised currency and in US dollars

##### Built for property analysts, brokers, proptech teams and investors who need Southern-Cone and Andean listing data they can put straight into a spreadsheet.

### 🔎 What is the InfoCasas Uruguay, Paraguay, Bolivia & Peru Property Scraper — and when should you use it?

The **InfoCasas Uruguay, Paraguay, Bolivia & Peru Property Scraper** turns public InfoCasas property adverts from Uruguay, Paraguay, Bolivia and Peru 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:** Spanish-language sale and rental adverts from the InfoCasas network as rows. Each carries the asking price in the currency the advertiser quoted and a US-dollar figure beside it, built and land area, bedrooms, bathrooms, garages and condition. Each also carries the full advertiser text, the amenity list, GPS coordinates, every photo, and the publisher's name, type and WhatsApp number. Adverts here quote in dollars or in the local currency, and often the same street has some of each, so a single-currency export of this market is a sampling error rather than a dataset. Bolivia's anticretico section is selectable too, which a screen built only around sale and rent misses entirely..

**Use something else when:** the property is not in Uruguay, Paraguay, Bolivia or Peru. Use [FincaRaiz Scraper](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian) for Colombia, which is the fifth country edition of this same portal network and is deliberately not a market here. Use [Urbania Scraper](https://apify.com/sian.agency/urbania-property-scraper?fpr=sian) for Peru again from the other major portal, so the two together see stock neither has alone. Use [Encuentra24 Scraper](https://apify.com/sian.agency/encuentra24-property-scraper?fpr=sian) for Central America and the Caribbean: Panama, Costa Rica, Guatemala and six more. This actor covers the property surfaces the four InfoCasas country editions publish: houses, flats, land, commercial units, offices, farms, parking, whole buildings and the rest of each edition's own category list, for sale, for long-term rent, for seasonal rent, and in Bolivia under anticretico. It reads what the site serves a visitor. Sold-price history is not published by the portal at all, and an advert's repricing is available only as the most recent change the site shows, so a price series has to be accumulated by running on a schedule rather than back-filled.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/infocasas-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 adverts and asking prices from InfoCasas across four South American countries using the Apify Actor `sian.agency/infocasas-property-scraper`.

Use it when I need: Spanish-language sale and rental adverts from the InfoCasas network as rows. Each carries the asking price in the currency the advertiser quoted and a US-dollar figure beside it, built and land area, bedrooms, bathrooms, garages and condition. Each also carries the full advertiser text, the amenity list, GPS coordinates, every photo, and the publisher's name, type and WhatsApp number. Adverts here quote in dollars or in the local currency, and often the same street has some of each, so a single-currency export of this market is a sampling error rather than a dataset. Bolivia's anticretico section is selectable too, which a screen built only around sale and rent misses entirely..

Don't use it when: the property is not in Uruguay, Paraguay, Bolivia or Peru — use fincaraiz-property-scraper or urbania-property-scraper or encuentra24-property-scraper instead.

How to call it: set `market` to the country edition (`uy`, `py`, `bo`, `pe`) and pick `place` from the dropdown, whose values carry their own market (`uy:montevideo`, `py:asuncion`, `bo:santa-cruz`, `pe:lima`, and a whole-country option per edition). The place list is fixed on purpose: the portal answers an unknown place by searching the entire country and returning HTTP 200, so free text would turn a typo into a nationwide bill. Choose `operationType` (`venta`, `alquiler`, `alquiler-temporal`, or `anticretico` on Bolivia only) and `propertyType` — note the editions differ, Uruguay files flats under `apartamentos` and the other three under `departamentos`, and asking for the wrong one stops the run with the list that edition does use. Narrow with `minPrice`/`maxPrice` (say which currency in `priceCurrency`), `minBedrooms`, `minBathrooms`, `minArea`, `maxArea`, `propertyState` for new-build stock and `publishedWithin` to take only fresh adverts. `sortBy` set to `newest` plus a daily schedule collects just the new adverts each day. To re-read adverts you already hold, set `operation` to `lookup` and pass `listingUrls` — a link carries its own country edition, so one run can mix all four — or bare `listingIds`, which resolve against `market` because an id is only served by its own edition.

Start with this input:
{
  "operation": "search",
  "market": "py",
  "place": "py:asuncion",
  "operationType": "venta",
  "propertyType": "casas",
  "sortBy": "newest",
  "maxResults": 200
}

Ask me which of the four countries they want, which place inside it, whether they mean sale or rental, and whether they need the prices in US dollars or the local currency for comparison, then run the Actor and summarise the results as a table.
```

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

- *Pull houses for sale in Asuncion published in the last 7 days, sorted newest first, and give me the median asking price per square metre.*
- *Export flats to rent in Lima under 3,000 soles a month with at least two bedrooms, and include the advertiser's WhatsApp number.*
- *Compare asking prices for houses in Montevideo against Maldonado in US dollars, and tell me which has more new-build stock.*
- *Collect everything on offer under anticretico in Santa Cruz, Bolivia, and show me the deposit range.*
- *Take these 40 InfoCasas advert links from my sheet and re-read them so I can see which ones changed price.*

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

### 📋 Overview

**Four countries, one row shape.** The InfoCasas Scraper reads the Uruguayan, Paraguayan, Bolivian and Peruvian editions of InfoCasas and returns 63 flat fields per advert, ready for CSV, Excel, JSON or the API.

**What you get:**

- 🌎 **Four editions covered**: Uruguay, Paraguay, Bolivia and Peru. Peru is the thin spot in this niche: of the six InfoCasas actors already on the Store, one covers it, and it charges $7.39 per thousand adverts.
- 📍 **Geography that cannot silently widen**: 105 places, each harvested from the portal's own sitemaps and then individually confirmed to return adverts.
- 💱 **Both currencies on every row**: the advertised amount with its currency, plus a US-dollar figure, so Montevideo, Asunción, Santa Cruz and Lima sit in one table without an FX step of your own.
- 📦 **The full record in the search row**: description, GPS, every photo, amenities and the publisher arrive with the first request. There is no detail upsell here, because an advert's own page carries nothing extra.
- 💰 **$2.00 per thousand adverts**: charged per advert returned, and only for adverts that actually arrive.
- 🏦 **The Bolivian anticrético segment**: a real tenure in that market that a venta-and-alquiler screen misses completely.

***

### ✨ Features

- 🔍 **Property Search**: read a country edition by place, sale or rental section, property type and filters, 21 adverts per request.
- 📄 **Listing Lookup**: re-read adverts you already hold links or ids for, one request each, returning the same fields.
- 🎚️ **Filters that map to the portal's own**: price range, bedrooms, bathrooms, built area, condition and publication window.
- 🏗️ **New-build markers**: off-plan, under construction and never-lived-in adverts are flagged, and development projects are marked as such.
- 📉 **Repricing data**: adverts that have been repriced carry the amount, the percentage and the date it happened.
- 🗺️ **GPS on the row**: latitude and longitude alongside the written address, city and neighbourhood.
- 📸 **Every photo, not a thumbnail**: the full image array, the photo count, plus video and 3D-tour flags.
- 🏢 **Publisher details**: name, profile link, reference code and whether the advert came from an agency or a private owner.
- 🔓 **No key, no login, no proxy configuration**: pick an edition and a place, then press Start.
- 🧾 **Run report**: a summary of what was collected, what failed and what it cost is saved to the key-value store.

***

### 🎬 Quick Start

Pick the country edition, pick the place, press Start. The run pages through the portal's results until it reaches your maximum or the results run out. Everything else on the input form only narrows the set.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~infocasas-property-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"operation":"search","market":"uy","place":"uy:montevideo","operationType":"venta","propertyType":"apartamentos","maxResults":100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose the edition and the place

Set **Country edition** to Uruguay, Paraguay, Bolivia or Peru, then pick a **Place** from the list. Each entry shows the advert count measured on 13 September 2026.

#### Step 2: Narrow the set

Choose the sale or rental section, the property type and any price, size, condition or date filters you want. Leave them alone to take everything.

#### Step 3: Set a maximum and run

**Maximum adverts** defaults to 100. Raise it deliberately: a whole-country sweep runs to tens of thousands.

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

- A dataset of adverts with prices in both currencies
- GPS coordinates, photos, amenities and the full Spanish description on every row
- A CSV, Excel or JSON export, or an API endpoint your own code can read

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (Property Search) or `lookup` (Listing Lookup). Default `search`. |
| `market` | string | No | Country edition: `uy`, `py`, `bo` or `pe`. Default `uy`. |
| `place` | string | No | One of 105 verified places, e.g. `uy:montevideo`, `py:asuncion`, `bo:santa-cruz`, `pe:lima`. An empty suffix (`uy:`) means the whole country. |
| `operationType` | string | No | `venta`, `alquiler`, `alquiler-temporal` or `anticretico` (Bolivia only). |
| `propertyType` | string | No | `inmuebles` for every type, or `casas`, `apartamentos` (Uruguay), `departamentos` (PY/BO/PE), `terrenos`, `oficinas` and others. |
| `listingUrls` | array | No | Listing Lookup: advert links to re-read. A link carries its own country edition. |
| `listingIds` | array | No | Listing Lookup: bare advert ids, resolved against the chosen edition. |
| `minPrice` / `maxPrice` | integer | No | Asking-price bounds. `0` means no bound. Monthly figure for rentals. |
| `priceCurrency` | string | No | `USD` or `local` - which currency your price bounds are in. |
| `minBedrooms` / `minBathrooms` | integer | No | Lower bounds. `0` means no bound. |
| `minArea` / `maxArea` | integer | No | Built area in square metres. `0` means no bound. |
| `propertyState` | string | No | `en-pozo`, `en-construccion`, `a-estrenar` or `usados`. Empty for any condition. |
| `publishedWithin` | string | No | `0` (today), `1`, `7`, `15`, `30` or `40` days. Empty for any time. |
| `sortBy` | string | No | `newest`, `popularity`, `price-low`, `price-high`, `area-low`, `area-high`. |
| `maxResults` | integer | No | Stop after this many adverts. `0` takes everything the search matches. Default 100. |

**Example - flats for sale in Montevideo:**

```json
{
  "operation": "search",
  "market": "uy",
  "place": "uy:montevideo",
  "operationType": "venta",
  "propertyType": "apartamentos",
  "maxPrice": 200000,
  "priceCurrency": "USD",
  "maxResults": 500
}
```

**Example - new adverts published today in Santa Cruz, including anticrético:**

```json
{
  "operation": "search",
  "market": "bo",
  "place": "bo:santa-cruz",
  "operationType": "anticretico",
  "propertyType": "inmuebles",
  "publishedWithin": "0",
  "sortBy": "newest",
  "maxResults": 200
}
```

**Example - re-read adverts you already hold:**

```json
{
  "operation": "lookup",
  "market": "py",
  "listingUrls": [
    "https://www.infocasas.com.py/casa-en-venta-en-asuncion/194243388"
  ],
  "listingIds": ["194243388"]
}
```

***

### 📤 Output

Every advert is one flat row with **63 fields**. The most-used ones:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | number | Advert id, unique across the network |
| `listingUrl` | string | Link to the advert |
| `market` / `country` | string | Country edition the row came from |
| `propertyTitle` | string | Advert headline |
| `priceAmount` / `priceCurrency` | number / string | Asking price as advertised, and the currency it was quoted in |
| `priceUsd` | number | The same price in US dollars |
| `pricePerSqm` | number | Asking price per square metre |
| `priceChangeAmount` / `priceChangePct` / `priceChangeDate` | number / number / string | The most recent repricing, when the advert has one |
| `operationType` / `propertyType` / `condition` | string | Sale or rental section, category, and off-plan / under construction / never lived in / previously occupied |
| `bedrooms` / `bathrooms` / `rooms` / `garages` | number | Room counts |
| `areaBuilt` / `areaTerrain` / `areaTerrace` | number | Built, land and terrace area in m² |
| `address` / `city` / `neighbourhood` / `state` | string | Written location, as published |
| `latitude` / `longitude` | number | GPS coordinates |
| `propertyDescription` | string | The advertiser's full Spanish text, with the markup cleaned out |
| `photos` / `photoCount` | array / number | Every image on the advert |
| `amenities` / `technicalSheet` | array | Amenity list and the published specification rows |
| `advertiserName` / `advertiserType` / `isPrivateOwner` | string / string / boolean | Who published it, and whether it is an agency or the owner |
| `advertiserWhatsapp` / `advertiserPhoneMasked` | string | Contact numbers as published. The portal itself truncates the masked number; the WhatsApp number is often complete |
| `publishedAt` / `updatedAt` / `scrapedAt` | string | Advert dates and the capture timestamp |
| `status` / `errorMessage` | string | `success` on a data row, or the reason an item could not be read |

**Example row** (values illustrative):

```json
{
  "listingId": 194243388,
  "market": "py",
  "country": "Paraguay",
  "listingUrl": "https://www.infocasas.com.py/casa-en-venta-en-asuncion/194243388",
  "propertyTitle": "Casa en venta en Asunción, 3 dormitorios",
  "priceAmount": 1200000000,
  "priceCurrency": "PYG",
  "priceUsd": 164383,
  "pricePerSqm": 1252,
  "priceChangeAmount": null,
  "operationType": "venta",
  "propertyType": "casas",
  "condition": "usados",
  "isProject": false,
  "bedrooms": 3,
  "bathrooms": 2,
  "garages": 2,
  "areaBuilt": 131,
  "areaTerrain": 300,
  "address": "Barrio Mburicaó, Asunción",
  "city": "Asunción",
  "neighbourhood": "Mburicaó",
  "latitude": -25.2925,
  "longitude": -57.6178,
  "propertyDescription": "Casa de tres dormitorios con patio y quincho...",
  "photoCount": 18,
  "photos": ["https://.../1.jpg", "https://.../2.jpg"],
  "amenities": ["Piscina", "Parrillero", "Aire acondicionado"],
  "advertiserName": "Inmobiliaria Ejemplo",
  "advertiserType": "agency",
  "isPrivateOwner": false,
  "referenceCode": "REF-1042",
  "publishedAt": "2026-08-30",
  "scrapedAt": "2026-09-13T10:22:41.000Z",
  "status": "success"
}
```

***

### 💼 Use Cases & Examples

#### 1. Southern-Cone market analysis

**Property analysts measuring a department, a city or a whole country.**

**Input:** a country edition, a place and the sale section
**Output:** asking price against built area, bedroom mix, the new-build share of the index
**Use:** a quarterly market report, or a price index for the coast against the capital. The US-dollar figure on every row keeps Montevideo, Asunción, Santa Cruz and Lima in the same table.

#### 2. Cross-border investment screening

**Investors comparing yields across four countries in one workflow.**

**Input:** the same filters run against `uy`, `py`, `bo` and `pe`
**Output:** one schema, so the four sets concatenate without mapping
**Use:** screen for price per square metre outliers, and pick up the Bolivian anticrético segment that a rent-only screen never sees.

#### 3. New-build and development tracking

**Developers and land buyers watching where new stock lands.**

**Input:** `propertyState` set to off-plan, under construction or never lived in
**Output:** project flags, condition, publisher and first publication date
**Use:** measure how much new supply a submarket is absorbing and which developers are advertising into it.

#### 4. Daily price-change monitoring

**Brokers and portals tracking reductions as they are published.**

**Input:** `publishedWithin` set to today, `sortBy` set to most recent first, on a daily schedule
**Output:** the repricing amount, percentage and date on adverts that carry one
**Use:** alert on reductions above a threshold rather than inferring them from your own snapshots.

#### 5. Agency and advertiser intelligence

**Proptech teams sizing the competition in a market.**

**Input:** a place and a wide filter
**Output:** publisher name, profile link, reference code and the agency-versus-owner flag
**Use:** rank agencies by live stock, watch whose inventory is growing, and separate private listings from agency ones.

#### 6. Comparables for valuation and lending

**Appraisers and mortgage teams building a comparables set.**

**Input:** a neighbourhood, a property type and bedroom and area bounds
**Output:** price, area, condition, amenities and GPS on every comparable
**Use:** an appraisal file, or the evidence pack behind a lending decision.

#### 7. Training data and AI agents

**Data teams feeding Spanish-language property text into a model.**

**Input:** a wide sweep with `maxResults` raised
**Output:** the advertiser's full description alongside the structured fields
**Use:** fine-tune a listing classifier, or let an MCP-connected agent answer market questions on demand.

***

### 🔗 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/infocasas-property-scraper').call({
  operation: 'search',
  market: 'py',
  place: 'py:asuncion',
  operationType: 'venta',
  propertyType: 'departamentos',
  maxResults: 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/infocasas-property-scraper').call(
    run_input={
        'operation': 'search',
        'market': 'pe',
        'place': 'pe:lima',
        'operationType': 'alquiler',
        'propertyType': 'departamentos',
        'maxResults': 200,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['listingId'], item['priceUsd'], item['neighbourhood'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~infocasas-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","market":"bo","place":"bo:santa-cruz","operationType":"anticretico","maxResults":100}'
```

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

1. **Trigger**: a daily schedule, or a webhook from your own app
2. **HTTP Request**: start the Actor with your input and wait for the run to finish
3. **Process**: read the dataset and filter on `priceChangePct`, `publishedAt` or `pricePerSqm`
4. **Action**: append to Google Sheets, write to Postgres or Airtable, or post an alert to Slack

***

### 📊 Performance & Pricing

#### Free plan

- **25 adverts per run**, with every field, every filter and both operations
- No credit card, no API key, no setup
- Enough to check the fields and the coverage before you commit

#### Paid plans

- **No per-run cap** - take the whole search if you want it
- 21 adverts per request, so a 1,000-advert sweep is about 48 requests
- Charged per advert returned, never for adverts that fail

| Event | Price | What it covers |
|---|---:|---|
| Property Search | $0.002 per advert | Each advert returned by a results page |
| Listing Lookup | $0.004 per advert | Each advert re-read from a link or id |
| Actor start | $0.005 per run | One charge when the run begins |

$2.00 per thousand adverts on Property Search, with the full record included - description, GPS, photos, amenities and the publisher's details. There is no separate detail charge on this Actor, because an advert's own page carries the same fields its search row already has.

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

***

### ❓ Frequently Asked Questions

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

**Q: Which countries does it cover?**
A: Uruguay, Paraguay, Bolivia and Peru - the four InfoCasas country editions. Colombia is left out on purpose: that edition is FincaRaiz, and it has [its own Actor](https://apify.com/sian.agency/fincaraiz-property-scraper?fpr=sian).

**Q: Are prices in local currency or in dollars?**
A: Both, on every row. Adverts on this network quote in dollars or in the local currency, and the same street often carries some of each. Each row therefore has the advertised amount with its currency and a US-dollar figure beside it. Bolivia quotes in dollars only.

**Q: What is anticrético?**
A: A Bolivian arrangement where the occupant lodges a lump sum with the owner instead of paying monthly rent, and gets it back at the end. It is a section of the Bolivian edition only, and it is selectable as an operation type.

**Q: Does Listing Lookup return more than a search row?**
A: No, and it would be wrong to charge as if it did. An advert's own page carries exactly the fields a search row already has - we compared them field by field. Lookup is for when you already hold links or ids and want those specific adverts. It costs more per advert only because one request returns one advert instead of 21.

**Q: Why is the place a fixed list instead of a text box?**
A: Because this portal answers an unknown place by searching the whole country instead of failing. A typo would then bill you for a nationwide sweep. Every one of the 105 entries was requested against the portal and confirmed to return adverts. Bolivia advertises 70 place slugs and only 30 survived that check.

**Q: How many adverts can one run collect?**
A: As many as the search matches. Requests return 21 adverts each and paging continues until your maximum is reached or the results run out. Set the maximum to 0 only when you mean it.

**Q: How do I collect only the new adverts each day?**
A: Set **Published within** to Today, sort by most recent first, and schedule the run daily. New adverts land on page one.

**Q: Can one Lookup run mix adverts from different countries?**
A: Yes, if you pass full links, because a link carries its own country edition. Bare ids are resolved against the edition you picked, since an id is only served by its own edition.

**Q: What output formats are available?**
A: JSON, CSV, Excel and XML, exported from the dataset or read through the API.

**Q: Is the advertiser's phone number complete?**
A: The masked number is truncated by the site itself, so it arrives truncated here too. The WhatsApp number is frequently complete. We report the masked one as masked rather than implying the contact data is whole.

***

### 🐛 Troubleshooting

**The run stopped and said the operation type does not exist on this edition**

- Anticrético is published by the Bolivian edition only. Set **Country edition** to Bolivia, or choose venta, alquiler or alquiler temporal.

**The run stopped and said the property type does not exist on this edition**

- The editions use different words for the same thing. Uruguay files flats under `apartamentos`; Paraguay, Bolivia and Peru use `departamentos`. The message lists the types your edition does publish.

**A bare advert id came back as not found**

- Ids are unique across the network but are only served by their own edition. Switch **Country edition** to the advert's country, or pass the full link instead, which carries the edition with it.

**The run collected far more adverts than expected**

- **Maximum adverts** was probably set to 0, which takes everything the search matches. Asunción alone carried 90,698 adverts for sale on 13 September 2026. Set a figure you are happy to pay for.

**The search matched nothing**

- The run ends with a message saying so and charges for no adverts. It never widens the search to fill the gap. Loosen a filter, widen the publication window, or pick the whole country by choosing the entry with an empty place suffix.

***

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

InfoCasas is a trademark of its owner. This Actor is not affiliated with, endorsed by or sponsored by InfoCasas, and reads only pages the site publishes publicly.

***

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

***

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

# Actor input Schema

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

Pick one per run. Property Search reads a country edition's results pages at 21 adverts per request and is where the value is. Listing Lookup opens adverts you already have links or ids for and returns the same fields, one request each.

## `market` (type: `string`):

Which InfoCasas country edition to read. Paraguay carries the largest sale index of the four; Uruguay the largest coastal market. This also decides which property types and currencies exist, because the editions differ: only Bolivia sells under anticrético, and Uruguay says apartamento where the others say departamento. In Listing Lookup it is the edition a bare advert id is resolved against.

## `place` (type: `string`):

Where to search. Every entry is a place this portal actually publishes adverts for - the list was harvested from its own sitemaps and then each one was requested and confirmed to return adverts, so none of them can come back empty. Pick the entry that matches your country edition above. Advert counts in brackets were measured on 2026-09-13 and move daily.

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

Which section of the edition to read. Anticrético is a Bolivian arrangement where the occupant lodges a lump sum instead of paying monthly rent; it exists only on the Bolivian edition and the run stops with a clear message if you ask for it elsewhere.

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

Keep only this category. The editions do not share one vocabulary: Uruguay files flats under apartamentos and the other three under departamentos, and a type that does not exist on your chosen edition stops the run with the list that does, rather than quietly returning everything.

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

Used by Listing Lookup: InfoCasas advert links to re-read, e.g. https://www.infocasas.com.py/casa-en-venta-en-asuncion/194243388. The link carries its own country edition, so these work across all four in a single run. The wording of the slug does not matter - the number at the end identifies the advert.

## `listingIds` (type: `array`):

Used by Listing Lookup: bare advert ids, e.g. 194243388. Ids are unique across the whole network but are only served by their own edition, so these are resolved against the country edition chosen above. If your ids span more than one country, use the links field instead.

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

Lowest asking price to include, in the currency chosen below. For rentals this is the monthly figure. 0 means no lower bound.

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

Highest asking price to include, in the currency chosen below. 0 means no upper bound.

## `priceCurrency` (type: `string`):

Which currency your price bounds are expressed in. Adverts on this network quote in either dollars or the local currency and both appear side by side in the results, so every row carries both figures regardless of what you pick here. Bolivia quotes in dollars only.

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

Fewest bedrooms to include. 0 means no lower bound.

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

Fewest bathrooms to include. 0 means no lower bound.

## `minArea` (type: `integer`):

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

## `maxArea` (type: `integer`):

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

## `propertyState` (type: `string`):

Keep only adverts in this condition. The first three together are how this network marks new-build stock, which is a large share of the Paraguayan and Bolivian indexes.

## `publishedWithin` (type: `string`):

Keep only adverts published inside this window. Pair it with Most recent first and a daily schedule to collect just the new adverts each day.

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

How the portal orders adverts before this actor reads them. Most recent first is the one to schedule against, because new adverts then land on page one. The portal's own default is popularity, which leans towards promoted developments.

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

Stop after this many adverts. Each request returns 21, so the run stops at the first page that crosses your limit. Set it to 0 to take everything the search matches - on a whole-country sweep that can be tens of thousands of adverts, so raise it deliberately.

## Actor input object example

```json
{
  "operation": "search",
  "market": "uy",
  "place": "uy:montevideo",
  "operationType": "venta",
  "propertyType": "inmuebles",
  "listingUrls": [],
  "listingIds": [],
  "minPrice": 0,
  "maxPrice": 0,
  "priceCurrency": "USD",
  "minBedrooms": 0,
  "minBathrooms": 0,
  "minArea": 0,
  "maxArea": 0,
  "propertyState": "",
  "publishedWithin": "",
  "sortBy": "newest",
  "maxResults": 100
}
```

# Actor output Schema

## `infocasasAdverts` (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",
    "market": "uy",
    "place": "uy:montevideo",
    "operationType": "venta",
    "propertyType": "inmuebles",
    "listingUrls": [],
    "listingIds": [],
    "minPrice": 0,
    "maxPrice": 0,
    "priceCurrency": "USD",
    "minBedrooms": 0,
    "minBathrooms": 0,
    "minArea": 0,
    "maxArea": 0,
    "propertyState": "",
    "publishedWithin": "",
    "sortBy": "newest",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/infocasas-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",
    "market": "uy",
    "place": "uy:montevideo",
    "operationType": "venta",
    "propertyType": "inmuebles",
    "listingUrls": [],
    "listingIds": [],
    "minPrice": 0,
    "maxPrice": 0,
    "priceCurrency": "USD",
    "minBedrooms": 0,
    "minBathrooms": 0,
    "minArea": 0,
    "maxArea": 0,
    "propertyState": "",
    "publishedWithin": "",
    "sortBy": "newest",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/infocasas-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",
  "market": "uy",
  "place": "uy:montevideo",
  "operationType": "venta",
  "propertyType": "inmuebles",
  "listingUrls": [],
  "listingIds": [],
  "minPrice": 0,
  "maxPrice": 0,
  "priceCurrency": "USD",
  "minBedrooms": 0,
  "minBathrooms": 0,
  "minArea": 0,
  "maxArea": 0,
  "propertyState": "",
  "publishedWithin": "",
  "sortBy": "newest",
  "maxResults": 100
}' |
apify call sian.agency/infocasas-property-scraper --silent --output-dataset

```

## MCP server setup

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