# Sreality Property Search API

Search Scrappa’s read-only Sreality listings API for Czech property ads.

## Results and filters

The response includes listing records and pagination details. Search can be narrowed by property and deal type, verified locality identifiers, price and area ranges, rooms, floors, availability, building attributes, amenities, points of interest, free-text description, and a complete geographic bounding box. `query` and `description_search` are equivalent free-text inputs. Image URLs are returned as absolute HTTPS URLs.

## Sorting and pagination

`sort` accepts only `price_asc` and `price_desc`. Use `limit` and `offset`; `offset + limit` must stay within the 10,000-result window. The default page size is 20. Price per square metre is returned when available, but it is not a server-side filter or sort.

## Coverage

The endpoint returns public sale, rental, auction, and share-deal listings. Account features, contact-form actions, unsupported filters, and non-public inventory are not covered.

- **Documentation:** [https://scrappa.co/docs/sreality-api/sreality_search](https://scrappa.co/docs/sreality-api/sreality_search)
- **API group:** Sreality API
- **Endpoint:** `GET https://scrappa.co/api/sreality/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 |
| --- | --- | --- | --- |
| `property_type` | integer | No | Property category: 1 flats, 2 houses, 3 land, 4 commercial, or 5 other. |
| `deal_type` | integer | No | Transaction category: 1 sale, 2 rent, 3 auction, or 4 share deal. |
| `category_sub` | integer | No | Property subcategory identifier, a positive integer. |
| `country_id` | integer | No | Country identifier; 112 is Czechia. Must be a positive integer. |
| `region_id` | integer | No | Region identifier; 10 is Praha. Must be a positive integer. |
| `entity_type` | string | No | Locality level: region, district, ward, municipality, or quarter. Supply together with entity_id. |
| `entity_id` | integer | No | Positive locality identifier. Supply together with entity_type; Brno is 5740. |
| `price_min` | integer | No | Minimum advertised price in CZK. |
| `price_max` | integer | No | Maximum advertised price in CZK; cannot be lower than price_min. |
| `advert_age_days_max` | integer | No | Maximum age of the advertisement in days. |
| `agency_id` | integer | No | Positive agency identifier to limit results to that agency. |
| `estate_area_min` | integer | No | Minimum estate area in square metres. |
| `estate_area_max` | integer | No | Maximum estate area in square metres. |
| `usable_area_min` | integer | No | Minimum usable area in square metres. |
| `usable_area_max` | integer | No | Maximum usable area in square metres. |
| `floor_min` | integer | No | Minimum floor number. |
| `floor_max` | integer | No | Maximum floor number. |
| `rooms` | integer | No | Room-count identifier; zero is accepted for listings without a room count. |
| `energy_rating` | integer | No | Energy-efficiency rating identifier. |
| `building_type` | integer | No | Building type identifier from 1 to 7. |
| `building_condition` | integer | No | Building condition identifier from 1 to 6. |
| `ownership` | integer | No | Ownership identifier from 1 to 3. |
| `furnished` | integer | No | Furnishing identifier from 1 to 3. |
| `balcony` | boolean | No | Filter for listings with a balcony. |
| `terrace` | boolean | No | Filter for listings with a terrace. |
| `parking_lots` | boolean | No | Filter for listings with parking spaces. |
| `elevator` | boolean | No | Filter for listings with an elevator. |
| `loggia` | boolean | No | Filter for listings with a loggia. |
| `cellar` | boolean | No | Filter for listings with a cellar. |
| `garage` | boolean | No | Filter for listings with a garage. |
| `easy_access` | boolean | No | Filter for listings with easy access. |
| `garden` | boolean | No | Filter for listings with a garden. |
| `query` | string | No | Free-text search in the listing description; description_search is an equivalent alias. |
| `description_search` | string | No | Equivalent alias for query; searches listing descriptions. |
| `available_to` | string | No | Latest ready date in YYYY-MM-DD format. |
| `has_video` | boolean | No | Filter for listings with a video. |
| `has_matterport` | boolean | No | Filter for listings with a Matterport tour. |
| `has_floor_plan` | boolean | No | Filter for listings with a floor plan. |
| `pois` | integer | No | Proximity category identifier from 1 to 13. |
| `lat_min` | number | No | Southern latitude bound. Supply all four bounding-box coordinates together. |
| `lat_max` | number | No | Northern latitude bound. Supply all four bounding-box coordinates together. |
| `lon_min` | number | No | Western longitude bound. Supply all four bounding-box coordinates together. |
| `lon_max` | number | No | Eastern longitude bound. Supply all four bounding-box coordinates together. |
| `sort` | string | No | Sort by price_asc or price_desc; these are the only supported sort values. |
| `limit` | integer | No | Results per page, from 1 to 2000; defaults to 20. |
| `offset` | integer | No | Number of results to skip. Keep offset + limit at or below 10000. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/sreality/search?property_type=1&deal_type=1&country_id=112&sort=price_asc&limit=20&offset=0"
```

## Example response

```json
{
    "success": true,
    "data": {
        "results": [
            {
                "hash_id": "4c8d2f6a2f1b4c619a5f",
                "advert_name": "Prodej bytu 2+kk, 58 m\u00b2, Praha 10 - Vr\u0161ovice",
                "price_czk": 6890000,
                "price_czk_m2": 118793,
                "usable_area": 58,
                "advert_images": [
                    "https://img1.sreality.cz/..."
                ],
                "locality": {
                    "city": "Praha",
                    "district": "Praha 10",
                    "region": "Praha",
                    "gps_lat": 50.0714,
                    "gps_lon": 14.4657,
                    "zip": "101 00"
                }
            }
        ],
        "pagination": {
            "limit": 20,
            "offset": 0,
            "total": 22642
        }
    },
    "meta": {
        "endpoint_family": "search",
        "billable": true,
        "retryable": false
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A parameter or filter combination is invalid. The response is not billable. |
| 503 | Search Temporarily Unavailable | Search data could not be returned. The response is not billable. |

## Frequently asked questions

### Which sort values are supported?

Only price_asc and price_desc are supported.

### Can I filter by price per square metre?

No. Price per square metre may appear in listing data, but it is not a supported search filter or sort.

### Are failed searches billed?

No. Validation errors and temporary failures are non-billable; a successful empty result is a valid answer.

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