# InfoCasas Search API Documentation

Scrappa's `GET /api/infocasas/search` returns InfoCasas property listings for sale, rent or temporary rent in Uruguay (`country=uy`, the default), Paraguay (`py`) or Bolivia (`bo`) as structured JSON.

## What you get

One request returns one page of listings and the platform's own match count in `total`. Each listing has the same shape as the property endpoint: `id`, `code`, `title`, `description`, `url`, `price`, `common_expenses`, `bedrooms`, `bathrooms`, `rooms`, `garage`, `areas`, `address`, `latitude`, `longitude`, `location`, `images`, `facilities`, `technical_sheet`, `owner` and more.

## Filters are honoured

Unknown filter names are rejected with a `422` instead of being ignored. Every returned listing is checked against the filters you sent. `applied_filters` echoes what was sent upstream. A listing that does not match is removed and never returned.

## Prices and currencies

`minPrice` and `maxPrice` are in the currency of `currencyID`: `1` is USD (the default), `2` is the local currency of the country. The platform compares prices after converting them to one currency, so a Paraguay page can mix `U$S` and `Gs.` listings. Every listing carries its own `price.currency`. Never add amounts across currencies without reading it. Price sorting (`order` 0 and 1) uses the converted value, so raw amounts in mixed currencies can look out of order.

## Pagination window

Only the first 10000 results of a search are reachable: `page` multiplied by `rows` must stay at or below 10000. A page past that window, or past the last result, returns a non-billable `422` (`page_out_of_range`). It never returns another page's listings. Sort by newest (`order=3`, the default) for stable paging.

## Sort codes

`0` price high to low, `1` price low to high, `3` newest (default), `4` area small to large.

## What this API does not cover

This is read-only public listing data. Contact details are limited to the masked phone and a WhatsApp flag. Projects, similar listings and further filters (publication date, features, garage, private owner, sea distance) are not available yet and are rejected.

- **Documentation:** [https://scrappa.co/docs/infocasas-api/infocasas_search](https://scrappa.co/docs/infocasas-api/infocasas_search)
- **API group:** InfoCasas API
- **Endpoint:** `GET https://scrappa.co/api/infocasas/search`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `country` | string | No | uy (default), py or bo. |
| `operation_type_id` | integer | No | 1 sale (default), 2 rent or 4 temporary rent. |
| `property_type_id` | integer | No | One or more of 1 house, 2 apartment, 3 land, 4 shop, 5 office, 6 farm, 7 garage, 8 business, 9 building, 10 hotel, 11 warehouse, 12 other. Repeatable or comma-separated. |
| `minPrice` | integer | No | Minimum price as a whole number, in the currency of currencyID. |
| `maxPrice` | integer | No | Maximum price as a whole number, in the currency of currencyID. |
| `currencyID` | integer | No | 1 USD (default) or 2 local currency. Applies to minPrice and maxPrice. |
| `bedrooms` | integer | No | Bedroom count. Means "this many or more" unless bedroomsExact is true. Repeatable. |
| `bedroomsExact` | boolean | No | true to match the listed bedroom counts exactly. |
| `bathrooms` | integer | No | Bathroom count. Means "this many or more" unless bathroomsExact is true. Repeatable. |
| `bathroomsExact` | boolean | No | true to match the listed bathroom counts exactly. |
| `m2Min` | integer | No | Minimum area in square metres. |
| `m2Max` | integer | No | Maximum area in square metres. |
| `locations` | array | No | One or more location objects with an id and a type, both required, from location-autocomplete. Format: locations[0][id]=UUID&locations[0][type]=NEIGHBOURHOOD. |
| `order` | integer | No | 0 price high to low, 1 price low to high, 3 newest (default), 4 area small to large. |
| `rows` | integer | No | Listings per page, 1-100 (default 21). |
| `page` | integer | No | Result page, 1-based. page x rows must stay at or below 10000. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/infocasas/search?country=uy&operation_type_id=2&property_type_id=2&bedrooms=2&rows=10"
```

## Example response

```json
{
    "success": true,
    "country": "uy",
    "page": 1,
    "rows": 10,
    "total": 4454,
    "total_pages": 446,
    "returned": 10,
    "applied_filters": {
        "operation_type_id": 2,
        "order": 3,
        "property_type_id": [
            2
        ],
        "bedrooms": [
            2
        ],
        "bedroomsExactMode": false,
        "bathroomsExactMode": false
    },
    "listings": [
        {
            "id": 194453624,
            "code": "O7DD3A",
            "title": "Alquiler apartamento de 2 dormitorios en el centro",
            "description": "Apartamento de 39 m2 en un segundo piso.",
            "url": "https://www.infocasas.com.uy/alquiler-apartamento-de-2-dormitorios-en-el-centro/194453624",
            "operation_type": {
                "id": 2,
                "name": "Alquiler"
            },
            "property_type": {
                "id": 2,
                "name": "Apartamento"
            },
            "price": {
                "amount": 25000,
                "currency": "$",
                "currency_id": 2,
                "hidden": false,
                "admin_included": 25000,
                "amount_usd": 624,
                "admin_included_usd": 624
            },
            "common_expenses": {
                "amount": null,
                "currency": null
            },
            "address": "Ejido 1500",
            "address_hidden": false,
            "latitude": -34.9014898,
            "longitude": -56.1873848,
            "location": {
                "state": {
                    "id": "a475c197-e6d7-4833-aa87-0ffd96a879ec",
                    "name": "Montevideo"
                },
                "neighbourhood": {
                    "id": "3c2b142f-c4f2-4f02-8ed8-cb0fe7f08696",
                    "name": "Centro"
                }
            },
            "bedrooms": 2,
            "bathrooms": 1,
            "rooms": 3,
            "garage": 0,
            "areas": {
                "m2": 39,
                "built": null,
                "terrain": null,
                "terrace": null,
                "apto": 39,
                "hectares": null
            },
            "construction_year": 1975,
            "images": [
                {
                    "url": "https://cdn1.infocasas.com.uy/repo/img/example.jpg",
                    "tag": null
                }
            ],
            "image_count": 24,
            "video": null,
            "tour_3d": null,
            "facilities": [
                {
                    "id": 13,
                    "name": "Parrillero / Barbacoa",
                    "group": "Confort del apartamento"
                }
            ],
            "technical_sheet": [
                {
                    "field": "bedrooms",
                    "label": "Dormitorios",
                    "value": "2"
                }
            ],
            "owner": {
                "id": 210,
                "name": "Example Inmobiliaria",
                "type": "inmobiliaria",
                "logo": "https://cdn1.infocasas.com.uy/repo/img/logo.jpg",
                "masked_phone": "+5989",
                "has_whatsapp": true,
                "subsidiaries": []
            },
            "created_at": "2026-10-25",
            "updated_at": "2026-10-25",
            "is_project": false,
            "sold": false,
            "active": true,
            "sea_view": null,
            "barter": false
        }
    ],
    "meta": {
        "billable": true,
        "attempts": 1,
        "last_status": 200,
        "endpoint_family": "search",
        "filter_drift_dropped": 0
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Unsupported Filter or Page | A filter name this API does not support, an unusable value, an order code that is not offered, or a page past the first 10000 results (`unknown_filter`, `blocked_filter`, `page_out_of_range`). Non-billable. |
| 422 | Validation Error | A query parameter failed validation. Non-billable. |
| 503 | Upstream Unavailable | InfoCasas could not be reached after retries, or answered with a body this API cannot read (`upstream_unavailable`, `upstream_blocked`, `parser_drift`). Retryable and never billed. Clients are never rate limited. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
