# InfoCasas Scraper | Uruguay, Paraguay & Bolivia Real Estate (`plum_spear/aztec-infocasas`) Actor

Scrape InfoCasas real estate listings across Uruguay, Paraguay and Bolivia by operation and property type. Returns price in USD, area, bedrooms, bathrooms, garage, location, geo coordinates and the listing URL as clean structured data.

- **URL**: https://apify.com/plum\_spear/aztec-infocasas.md
- **Developed by:** [Roberto Kerber](https://apify.com/plum_spear) (community)
- **Categories:** Real estate, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.15 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## InfoCasas Scraper - Uruguay, Paraguay & Bolivia Real Estate Listings

> Built and maintained by **Az Digital Consulting LU**.

**Scrape InfoCasas at scale.** This scraper turns [InfoCasas](https://www.infocasas.com.uy/) - the leading real estate portal in **Uruguay, Paraguay and Bolivia** - into a clean, structured data feed. Pick a country, an operation (sale or rent) and a property type, and get flat JSON for every listing: **price in USD, area in m², bedrooms, bathrooms, garage, property type, neighborhood, state, geo coordinates** and a direct URL to the ad.

No proxy setup, no HTML parsing, no account. Run it once for a market snapshot, or **schedule it daily** to track how asking prices and inventory move.

***

### What does InfoCasas Scraper do?

Instead of copying listings by hand, you choose a market and it returns every matching property as clean, flat JSON.

Prices arrive as **numbers** (`320000`, not `"U$S 320.000"`), and the Actor returns both the original price and a normalized **`priceUsd`**, so you can compare across three countries without converting anything. Area comes as an integer in m². Location arrives split into **state, city and neighborhood**.

This is the fastest way to **scrape InfoCasas listings** for any segment - whether you are tracking asking prices in Montevideo, sizing the Asunción apartment market, or building a Southern Cone real estate dataset.

***

### Why use InfoCasas Scraper?

- **Price monitoring** - track asking prices per neighborhood and per m² over time.
- **Market intelligence** - measure supply by country, property type and price band.
- **Investment analysis** - compare price/m² across Uruguay, Paraguay and Bolivia in one dataset.
- **Comparables (CMA)** - pull comparable listings for a valuation in seconds.
- **Lead sourcing** - build lists of properties matching a client brief.

***

### How to use it

1. Click **Try for free**.
2. Choose a **country** (Uruguay, Paraguay or Bolivia).
3. Choose **operation** (sale or rent) and **property type**.
4. Set **Max properties**.
5. Click **Start** and download the results as JSON, CSV, Excel or HTML.

***

### Input

| Field | Description |
|---|---|
| `country` | `uy` (Uruguay), `py` (Paraguay) or `bo` (Bolivia) |
| `operation` | `venta` (sale) or `alquiler` (rent) |
| `propertyType` | `casas`, `apartamentos`, `terrenos`, `oficinas`, `locales`, `campos` |
| `maxItems` | How many properties to collect |

```json
{
  "country": "uy",
  "operation": "venta",
  "propertyType": "casas",
  "maxItems": 100
}
```

***

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
  "id": 194028275,
  "title": "venta Casa en Lomas de Solymar cinco dormitorios",
  "code": "V83F72",
  "propertyType": "Casa",
  "operationType": "Venta",
  "price": 320000,
  "currency": "U$S",
  "priceUsd": 320000,
  "area": 145,
  "areaTerrain": 321,
  "bedrooms": 4,
  "bathrooms": 2,
  "garage": 1,
  "country": "Uruguay",
  "state": "Canelones",
  "neighborhood": "Lomas de Solymar",
  "latitude": -34.8322202525,
  "longitude": -55.9360061042,
  "url": "https://www.infocasas.com.uy/venta-casa-en-lomas-de-solymar-cinco-dormitorios/194028275"
}
```

#### Data fields

| Field | Type | Description |
|---|---|---|
| `id` / `code` | number / string | Portal listing ID and reference code |
| `title` | string | Listing headline |
| `propertyType` / `operationType` | string | Category and sale/rent |
| `price` / `currency` | number / string | Price as listed and its currency |
| `priceUsd` | number | Price normalized to USD |
| `commonExpenses` | number | Monthly common expenses when published |
| `area` / `areaBuilt` / `areaTerrain` | number | Areas in m² |
| `bedrooms` / `bathrooms` / `garage` / `floor` | number | Property counts |
| `country` / `state` / `city` / `neighborhood` | string | Location breakdown |
| `latitude` / `longitude` | number | Geo coordinates |
| `imageCount` / `hasVideo` | number / boolean | Media info |
| `createdAt` / `updatedAt` | string | Listing timestamps |
| `url` | string | Direct link to the listing |

***

### Pricing

**Pay per event: $0.15 per 1,000 properties returned, plus a minimal actor-start event.**

No subscription, no monthly minimums - you only pay for the data you actually extract. New Apify users get free monthly platform credits to test at no cost before scaling.

***

### Tips

- Narrow searches run faster and cost less: pick one country and one property type per run.
- Use `priceUsd` when comparing across countries - it is already normalized.
- Schedule a daily run on the same filters to build a price history you can chart.
- **Note on `city`:** the portal fills this field inconsistently and often leaves it empty, while `state` and `neighborhood` are reliably present. Group by those when `city` is null.

***

### FAQ

**Is scraping InfoCasas legal?**
This Actor collects only **publicly available listing data** - the same information any visitor sees without logging in. It deliberately collects **no personal data**: seller names, agency contacts and phone numbers are never returned, even though some appear in the page payload. You remain responsible for how you use the data; review the target site's terms and applicable law for your use case.

**Do I need a proxy?**
No. The Actor reads the portal's public page data directly.

**Which countries are covered?**
Uruguay, Paraguay and Bolivia - the three markets InfoCasas operates.

**Why did I get fewer properties than I asked for?**
The search matched fewer listings, or you reached the last page for those filters. Broaden the property type or switch operation.

***

### Support

Found a bug or need a field that is not here? Open an issue on the **Issues** tab of this Actor. Issues are answered.

# Actor input Schema

## `country` (type: `string`):

Which InfoCasas market to scrape.

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

Sale or rent.

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

Property category as used in the portal URL.

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

Maximum number of properties to scrape (21 per page).

## Actor input object example

```json
{
  "country": "uy",
  "operation": "venta",
  "propertyType": "casas",
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("plum_spear/aztec-infocasas").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("plum_spear/aztec-infocasas").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 '{}' |
apify call plum_spear/aztec-infocasas --silent --output-dataset

```

## MCP server setup

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

```

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/D0AghRC2nqBbza0Io/builds/feLnwdwMQFfQ4DA5q/openapi.json
