# Realitica Property Search API Documentation

<p><strong>Realitica Property Search API</strong> returns property for sale, short-term rent or long-term rent in Montenegro, Croatia, Serbia and Bosnia as JSON. Filter by country, region, text, property type, price, bedrooms and area, sort by newest, oldest or price, limit by posting age, and page through the results with 25 listings per page. Each listing carries the id, link, sentence title, advertiser, property type, bedrooms, area, price in EUR, location split into place, municipality, region and country, thumbnail and a text snippet. The response also returns the total result count, the real page, and the municipalities and property types of the result page as facets.</p><p>Notes: Price on request is <code>null</code>, never 0. Prices below 2 EUR are placeholders and are <code>null</code> as well. Realitica cannot filter by bedrooms, area or a Montenegrin municipality, so these filters are applied to the fetched page: <code>search_metadata.filtered_out</code> counts the removed items and a page can hold fewer than 25 listings. Page on <code>has_next_page</code>. A bathrooms filter is not supported and returns a 422 error. Map coordinates, fees and reviews do not exist on Realitica.</p>

- **Documentation:** [https://scrappa.co/docs/realitica-api/realitica_search](https://scrappa.co/docs/realitica-api/realitica_search)
- **API group:** Realitica API
- **Endpoint:** `GET https://scrappa.co/api/realitica/v1/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 |
| --- | --- | --- | --- |
| `listing_type` | string | No | sale (default), rent_short or rent_long. Example: rent_long. |
| `country` | string | No | montenegro (default), croatia, serbia or bosnia. Example: croatia. |
| `region` | string | No | Name from the locations route. Montenegro: a municipality such as Budva, searched as text, so it cannot be combined with query and total_results counts all text matches. Croatia, Serbia, Bosnia: a county such as Istra. Example: Istra. |
| `query` | string | No | Free text keyword, 2 to 100 characters. Example: Budva. |
| `property_type` | string | No | One or more of Home, Apartment, Land, Commercial, Hotel, Residential_lot, Agricultural_land, Campground, Garage. Repeat property_type[] or comma-separate. Example: Apartment. |
| `min_price` | integer | No | Minimum price in EUR. Example: 100000. |
| `max_price` | integer | No | Maximum price in EUR. Example: 250000. |
| `bedrooms` | integer | No | Bedrooms 1 to 5, 5 means 5 or more. Applied to the fetched page: items without a known bedroom count are dropped. Example: 2. |
| `min_area` | integer | No | Minimum area in m2. Applied to the fetched page. Example: 50. |
| `max_area` | integer | No | Maximum area in m2. Applied to the fetched page. Example: 120. |
| `sort` | string | No | default, newest, oldest, price_asc or price_desc. Example: newest. |
| `posted_within` | string | No | any (default), 7d, 1m or 1y. Example: 7d. |
| `page` | integer | No | One-based page number, 25 results per page. Example: 2. |

## Example response

```json
{
    "data": {
        "facets": {
            "locations": [
                {
                    "name": "Andrijevica",
                    "count": 13
                },
                {
                    "name": "Bar",
                    "count": 6132
                },
                {
                    "name": "Berane",
                    "count": 47
                }
            ],
            "property_types": [
                "Apartment",
                "House",
                "Land",
                "Residential Lot",
                "Commercial Property",
                "Hotel",
                "Agricultural Land",
                "Garage",
                "Campground"
            ]
        },
        "listings": [
            {
                "url": "https://www.realitica.com/en/listing/3456582",
                "price": {
                    "amount": 240000,
                    "currency": "EUR"
                },
                "title": "is selling an apartment",
                "area_m2": 65,
                "snippet": "Apartment of 65 sq. m, located on the raised ground floor of a four-storey building at Lazi Street, bb, Budva. The apartment has a functional layout and consists of: a spacio...",
                "bedrooms": 1,
                "location": {
                    "text": "Lazi, Budva, Montenegro",
                    "place": "Lazi",
                    "region": null,
                    "country": "Montenegro",
                    "municipality": "Budva"
                },
                "thumbnail": "https://www.realitica.com/images/listing_photos/thumb_3456582_dsc_5273.jpg",
                "listing_id": 3456582,
                "listing_type": "sale",
                "property_type": "Apartment",
                "advertiser_name": "Monteflower"
            },
            {
                "url": "https://www.realitica.com/en/listing/3730448",
                "price": {
                    "amount": 225000,
                    "currency": "EUR"
                },
                "title": "is selling an apartment",
                "area_m2": 49,
                "snippet": "Two-Bedroom Apartment for Sale in Tivat \u2013 Kava Fully furnished and equipped two-bedroom apartment in the Kava neighbourhood of Tivat. The apartment has 49 m\u00b2 of living space, a t...",
                "bedrooms": 2,
                "location": {
                    "text": "Kava, Tivat, Montenegro",
                    "place": "Kava",
                    "region": null,
                    "country": "Montenegro",
                    "municipality": "Tivat"
                },
                "thumbnail": "https://www.realitica.com/images/listing_photos/thumb_3730448_20260922_164806r.jpg",
                "listing_id": 3730448,
                "listing_type": "sale",
                "property_type": "Apartment",
                "advertiser_name": "Mihailo"
            }
        ],
        "search_metadata": {
            "page": 1,
            "page_size": 25,
            "total_pages": 1896,
            "filtered_out": 0,
            "has_next_page": true,
            "total_results": 47376,
            "upstream_items": 25,
            "dropped_invalid": 0
        },
        "search_parameters": {
            "page": 1,
            "sort": "default",
            "country": "montenegro",
            "listing_type": "sale",
            "posted_within": "any"
        }
    },
    "meta": {
        "billable": true,
        "endpoint_family": "search"
    },
    "success": true
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A required parameter or a value is invalid. This response is not billable. |
| 503 | Upstream Unavailable | Realitica could not be reached. This response is not billable and is retryable. |
| 503 | Unexpected Upstream Data | Realitica returned data in an unexpected shape. This response is not billable and is retryable. |

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