# InfoCasas Scraper — Uruguay, Paraguay & Bolivia Property (`logiover/infocasas-property-scraper`) Actor

Scrape InfoCasas property listings across Uruguay, Paraguay and Bolivia. Extract price in local currency and USD, area, bedrooms, amenities, GPS and the listing agency's name, phone and WhatsApp. No API key, no login.

- **URL**: https://apify.com/logiover/infocasas-property-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (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 $3.50 / 1,000 results

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/platform/actors/running/actors-in-store#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 Property Data

Extract the South American property market that almost nobody indexes: InfoCasas listings from Uruguay, Paraguay and Bolivia, with price in local currency and USD, amenities, GPS — and the listing agency's phone and WhatsApp number.

### What does the InfoCasas Scraper do?

This Actor collects live property listings from **InfoCasas**, the largest real-estate marketplace in Uruguay, Paraguay and Bolivia. InfoCasas is a Next.js site that ships its entire result page as a JSON payload, so this Actor reads that payload directly and gets exactly the objects the site's own front end renders — 21 fully-populated listings per page, no browser, no selector guesswork.

Pick a country, sale or rent, a property type and optionally a city, and the Actor pages through the results writing one flat row per listing: title and full description, price with its currency plus a USD conversion the site itself computes, total and built area, bedrooms and bathrooms from the technical sheet, construction state and year, the amenity list, neighbourhood, department, GPS coordinates — and the advertising agency's name, type, phone number and WhatsApp availability. That last part is rare: most property portals hide contact details behind a form, while InfoCasas publishes them on the card.

### Who is it for?

- **Real-estate investors** comparing price per square metre between Montevideo, Punta del Este, Asunción and Santa Cruz.
- **Lead-generation teams** building agency contact lists for three under-served markets.
- **Proptech and portal operators** seeding or benchmarking a Southern-Cone inventory.
- **Relocation and residency advisers** — Uruguay and Paraguay both attract residency-driven buyers who need current price evidence.
- **Analysts and journalists** covering markets with almost no open property data.

### Use cases

- Track asking prices per square metre in Montevideo neighbourhoods, week over week.
- Build a complete agency directory for Uruguay: name, type, phone, WhatsApp and live-listing count.
- Compare Punta del Este holiday-home pricing against Montevideo residential pricing in USD.
- Monitor new-build ("A estrenar") supply separately from resale stock using `constructionState`.
- Feed an AI agent live listings so it can answer "what does a 3-bedroom in Asunción cost?".

### Why use this InfoCasas Scraper?

- **Keyless and login-free** — nothing to register, nothing to rotate.
- **Agency phone and WhatsApp on every row** — the contact data most property scrapers cannot reach.
- **Three countries from one Actor** — Uruguay, Paraguay and Bolivia, each with its own marketplace.
- **Dual pricing** — local currency plus the USD figure InfoCasas publishes, so cross-border comparison needs no FX guesswork.
- **38 fields per listing**, including amenities, construction state, GPS and the reference code sellers quote on the phone.
- **Bulk by design** — 21 listings per page and roughly 60,000 live in Uruguay alone.

### What data can you extract?

One row per listing. Anything the advertiser left blank comes back as `null`.

| Field | Type | Description |
|---|---|---|
| `listingId` | string | InfoCasas listing id |
| `referenceCode` | string | Agency reference code, e.g. "K6E857" |
| `title` | string | Listing headline |
| `url` | string | Direct link to the listing |
| `description` | string | Full description, HTML stripped |
| `price` | number | Asking price in the quoted currency |
| `currency` | string | Currency as displayed, e.g. `U$S` or `$` |
| `priceUsd` | number | Price in USD as computed by InfoCasas |
| `priceWithAdmin` | number | Price including the building's admin fee, where applicable |
| `priceWithAdminUsd` | number | The same figure in USD |
| `isPriceHidden` | boolean | Whether the seller chose to hide the price |
| `operationType` | string | `Venta` (sale) or `Alquiler` (rent) |
| `propertyType` | string | Apartamento, Casa, Terreno, Oficina, Local… |
| `bedrooms` | number | Bedroom count from the technical sheet |
| `bathrooms` | number | Bathroom count |
| `totalAreaSqm` | number | Total area in m² |
| `builtAreaSqm` | number | Built area in m² |
| `usableAreaSqm` | number | Usable area in m² |
| `constructionState` | string | e.g. "A estrenar" (brand new), "Usado" |
| `constructionYear` | number | Year built |
| `floorNumber` | number | Floor the unit is on |
| `amenities` | string | Amenity list, pipe-separated |
| `address` | string | Address as published |
| `neighbourhood` | string | Neighbourhood (barrio) |
| `state` | string | Department or state |
| `country` | string | Uruguay, Paraguay or Bolivia |
| `latitude` / `longitude` | number | GPS coordinates |
| `agencyId` | string | Agency identifier |
| `agencyName` | string | Advertising agency |
| `agencyType` | string | Agency or private seller |
| `agencyPhone` | string | Contact phone in international format |
| `agencyHasWhatsapp` | boolean | Whether that number takes WhatsApp |
| `agencyLogoUrl` | string | Agency logo |
| `agencyProfileUrl` | string | Agency profile page |
| `imageUrl` | string | Main photo |
| `imageCount` | number | Number of photos |
| `scrapedAt` | string | ISO 8601 collection timestamp |

#### Sample output

```json
{
  "listingId": "194109355",
  "referenceCode": "K6E857",
  "title": "Apartamento frente al Puerto del Buceo",
  "url": "https://www.infocasas.com.uy/apartamento-frente-al-puerto-del-buceo/194109355",
  "description": "Apartamento frente al Puerto del Buceo con excelente vista. Exclusivo apartamento ubicado frente al Puerto del Buceo...",
  "price": 420000,
  "currency": "U$S",
  "priceUsd": 420000,
  "priceWithAdmin": 442000,
  "isPriceHidden": false,
  "operationType": "Venta",
  "propertyType": "Apartamento",
  "bedrooms": 3,
  "bathrooms": 2,
  "totalAreaSqm": 115,
  "builtAreaSqm": 105,
  "constructionState": "A estrenar",
  "amenities": "Garaje | Balcón / Terraza | Calefacción Central | Aire Acondicionado | Lavadero",
  "address": "Puerto del Buceo",
  "neighbourhood": "Puerto Buceo",
  "state": "Montevideo",
  "country": "Uruguay",
  "latitude": -34.9049452,
  "longitude": -56.1287644,
  "agencyId": "202914",
  "agencyName": "Vista Inmobiliaria",
  "agencyType": "inmobiliaria",
  "agencyPhone": "+59899000233",
  "agencyHasWhatsapp": true,
  "imageCount": 14,
  "scrapedAt": "2026-08-13T17:52:18.006Z"
}
```

### How to use the InfoCasas Scraper

#### Option A — a whole country

Leave the city empty and the Actor covers the entire national marketplace.

```json
{
  "country": "uy",
  "operation": "venta",
  "propertyType": "casas-y-apartamentos",
  "city": "",
  "maxResults": 1000,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "UY" }
}
```

1. Choose a **Country** — Uruguay, Paraguay or Bolivia.
2. Choose **Sale or rent**.
3. Choose a **Property type** — houses & apartments is the broadest residential filter.
4. Set **Max results** and run.

#### Option B — one city

Pass the city slug exactly as InfoCasas writes it in its own URLs — `montevideo`, `punta-del-este`, `asuncion`, `santa-cruz`. This is how you build a comparable set for one market.

```json
{
  "country": "uy",
  "operation": "alquiler",
  "propertyType": "apartamentos",
  "city": "montevideo",
  "maxResults": 500,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "UY" }
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `country` | string | `uy` | `uy` (Uruguay), `py` (Paraguay) or `bo` (Bolivia). |
| `operation` | string | `venta` | `venta` for sale, `alquiler` for rent. |
| `propertyType` | string | `casas-y-apartamentos` | Houses & apartments, apartments, houses, land, offices or commercial premises. |
| `city` | string | — | City slug from InfoCasas' own URL; empty means the whole country. |
| `maxResults` | integer | `500` | How many listings to collect. |
| `proxyConfiguration` | object | Residential / UY | Residential proxies pinned to the selected country. |

### Tips for best results

- **Copy the city slug from the site's URL.** InfoCasas uses its own slugs (`punta-del-este`, `ciudad-de-la-costa`); guessing a spelling is the most common reason a run comes back empty.
- **Use `priceUsd` for cross-country comparison.** Uruguayan listings are often quoted in dollars and Paraguayan or Bolivian ones in local currency; the USD column removes the FX step.
- **`priceWithAdmin` matters for apartments.** In Montevideo the monthly *gastos comunes* can be a meaningful share of the cost; comparing headline prices alone understates apartments against houses.
- **`constructionState` separates new builds from resale** — "A estrenar" is brand new, which is the segment most developers care about.
- **Agency phone numbers come in international format** and are WhatsApp-capable more often than not; `agencyHasWhatsapp` tells you which.
- **Split by property type to go deeper.** Each type has its own result cap in practice, so four narrow runs beat one broad run for total coverage.
- **Keep the proxy country aligned** with the marketplace you selected — each national site serves local traffic more reliably.
- **Deduplicate on `listingId`** across scheduled runs; agencies refresh listings frequently.
- **Zero rows?** Clear the city first. If that fixes it, the slug was wrong.

### Integrations

- **Google Sheets** — send each run's dataset to a sheet your acquisitions or sales team already uses.
- **Slack** — alert a channel when new listings appear in a target neighbourhood.
- **Zapier / Make** — push agency contacts straight into a CRM.
- **Webhooks** — receive the dataset id the moment a run completes.
- **Schedules** — daily runs turn this into a price and supply history for three markets.

### API usage

**cURL**

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~infocasas-property-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"country":"uy","operation":"venta","city":"montevideo","maxResults":200}'
```

**Node.js**

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

const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('logiover/infocasas-property-scraper').call({
    country: 'py',
    operation: 'venta',
    propertyType: 'casas-y-apartamentos',
    city: 'asuncion',
    maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'listings');
```

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")

run = client.actor("logiover/infocasas-property-scraper").call(run_input={
    "country": "uy",
    "operation": "alquiler",
    "propertyType": "apartamentos",
    "city": "montevideo",
    "maxResults": 500,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["neighbourhood"], item["priceUsd"], item["agencyName"], item["agencyPhone"])
```

### Use with AI agents (MCP)

Expose this Actor through Apify's MCP server (`https://mcp.apify.com`) and an assistant can answer live questions about three property markets that are otherwise invisible in training data.

> *"Use the InfoCasas scraper to collect 300 apartments for sale in Montevideo, then rank neighbourhoods by median price per square metre in USD."*

### FAQ

#### Do I need an InfoCasas account or API key?

No. The Actor reads the public page payload that serves InfoCasas' own front end. There is nothing to register.

#### Which countries are supported?

Uruguay, Paraguay and Bolivia — the three markets where InfoCasas is the leading portal. Each is a separate marketplace with its own listings and currency.

#### How many listings can one run return?

Uruguay alone carries around 60,000 live listings, at 21 per page. Set `maxResults` to what you need; split by city or property type for the deepest coverage.

#### Why did my run return zero rows?

Nine times out of ten the city slug does not exist. Clear the city field and re-run: if listings appear, correct the slug against the site's own URL.

#### Are the agency phone numbers really public?

Yes. InfoCasas publishes the advertiser's contact number on the result card itself, which is why it appears in the page payload this Actor reads. Nothing is unmasked, decoded or reverse-engineered. Treat those numbers as business contact data and follow the note below.

#### What is the difference between `price` and `priceUsd`?

`price` is the figure in whatever currency the seller quoted; `priceUsd` is InfoCasas' own conversion. Uruguayan listings are frequently priced in dollars already, in which case the two match.

#### What does `priceWithAdmin` mean?

Apartment listings in the region often quote a separate monthly building fee (*gastos comunes*). Where InfoCasas publishes a combined figure, it appears in this column.

#### Why are some fields null?

Because the advertiser left them blank. Construction year, floor number and usable area are optional and are missing from a fair share of listings. A `null` means "not published", never "zero".

#### Can I export to CSV or Excel?

Yes — JSON, CSV, Excel, XML and RSS from the run's Storage tab or through the API.

#### How fresh is the data?

Every run fetches live pages. `scrapedAt` timestamps each row, so scheduled runs give you a precisely dated price history.

#### How often is the Actor updated?

It is monitored and maintained. Reading the site's own structured payload rather than its markup makes it resistant to redesigns.

### Is it legal to scrape InfoCasas?

This Actor collects publicly available information only — listings InfoCasas publishes openly to every visitor, including the contact details advertisers choose to display on their own cards. Collecting public data is broadly lawful in most jurisdictions, but you are responsible for what you do with it.

Contact numbers deserve particular care. A number belonging to an agency is business contact data; a number belonging to a private individual selling their own home may be personal data under Uruguay's Law 18.331, Paraguayan and Bolivian data-protection rules, or the GDPR if you operate in the EU. Marketing to those numbers may additionally fall under anti-spam rules. Make sure you have a lawful basis before storing or contacting, and review InfoCasas' Terms of Service before large-scale or commercial collection. This is not legal advice.

### Related scrapers

- **[Zonaprop Scraper](https://apify.com/logiover/zonaprop-scraper)** — Argentina's largest property portal.
- **[FincaRaiz Scraper](https://apify.com/logiover/fincaraiz-scraper)** — Colombian property listings.
- **[VivaReal Scraper](https://apify.com/logiover/vivareal-scraper)** — Brazilian property market data.
- **[Encuentra24 Scraper](https://apify.com/logiover/encuentra24-scraper)** — Central American classifieds and property.

# Actor input Schema

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

InfoCasas runs a separate marketplace per country. Uruguay is the largest by listing count.

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

Properties offered for sale (venta) or to rent (alquiler).

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

Which kind of property to collect. Houses & apartments is the broadest residential filter.

## `city` (type: `string`):

City slug exactly as it appears in InfoCasas' own URL — e.g. 'montevideo', 'punta-del-este', 'asuncion', 'santa-cruz'. Leave empty to cover the whole country.

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

How many listings to collect. Uruguay alone carries around 60,000 live listings; each page returns 21.

## `proxyConfiguration` (type: `object`):

InfoCasas answers reliably from local IPs, so residential proxies pinned to the selected country are used by default.

## Actor input object example

```json
{
  "country": "uy",
  "operation": "venta",
  "propertyType": "casas-y-apartamentos",
  "city": "montevideo",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "UY"
  }
}
```

# Actor output Schema

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

Every record collected in this run. Open the Dataset tab to browse, filter or export as JSON, CSV or Excel.

# 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 = {
    "country": "uy",
    "operation": "venta",
    "propertyType": "casas-y-apartamentos",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "UY"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = {
    "country": "uy",
    "operation": "venta",
    "propertyType": "casas-y-apartamentos",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "UY",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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 '{
  "country": "uy",
  "operation": "venta",
  "propertyType": "casas-y-apartamentos",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "UY"
  }
}' |
apify call logiover/infocasas-property-scraper --silent --output-dataset

```

## MCP server setup

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