# Property.com.au Property Search API Documentation

Scrappa's `GET /api/property-com-au/search` returns Property.com.au listings in Australia as structured JSON, for sale (`channel=buy`), for rent (`channel=rent`) and recently sold (`channel=sold`).

## What you get

One request returns one page of up to 20 listings in `data`. Each listing has `id`, `pid`, `path`, `url`, `address` (full, suburb, state, postcode), `status`, `price_text`, `price_numeric`, `price_numeric_max`, `price_period`, `sold_date`, `beds`, `baths`, `cars`, `land_size`, `latitude`, `longitude`, `images` and `realestate_com_au_url`. `price_text` is the advertised text, such as `Auction Guide $2m` or `Contact agent`. `price_numeric` is the figure read from it, or `null`. Rent is per week (`price_period` is `week`). A search card has no property type or description: call the listing endpoint with `path` for those.

`pagination` has `total` and `total_pages`. `map_pins` has the coordinates and a short form of the matching listings on the whole search, not only this page. `search_place` names the place Property.com.au searched.

## Location

`location` is the `search_location` of an autocomplete result, such as `Bondi Beach, NSW 2026`. Text Property.com.au does not know returns `422` (`unknown_location`) instead of a nationwide list.

## Filters are honoured

Property.com.au applies the channel, sort, type, keyword and surrounding suburbs filters itself, and reports what it applied. If it ignored one, the request returns `422` (`upstream_rejected`). `max_bedrooms` has no upstream filter, so the API applies it to the page. Price, bedroom, bathroom and land size limits are checked on every listing too. A listing without the value a filter needs (for example `Contact agent` with a price filter) is removed. `meta.filtered_out` counts them, so a page can hold fewer than 20 listings. Unknown parameters and values are rejected with `422`.

## Property types

`property_type` accepts house, townhouse, villa, land, acreage and rural. Property.com.au has no working filter for apartments and units, retirement living or blocks of units, so those values are rejected instead of returning every type. A search card has no type, so use the listing endpoint for the `property_type` of a result.

## Surrounding suburbs

Results cover only the place you asked for. Set `include_surrounding=true` to add nearby suburbs. They are marked `is_surrounding_suburb`.

## Pagination

`page` is 1-based and the label always equals the page Property.com.au served. A page past the end returns an empty `data` with the real `total`. `property_type` takes one value per request.

- **Documentation:** [https://scrappa.co/docs/property-com-au-api/property_com_au_search](https://scrappa.co/docs/property-com-au-api/property_com_au_search)
- **API group:** Property.com.au API
- **Endpoint:** `GET https://scrappa.co/api/property-com-au/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 |
| --- | --- | --- | --- |
| `location` | string | Yes | The search_location of an autocomplete result, for example Bondi Beach, NSW 2026. |
| `channel` | string | No | buy (default), rent or sold. |
| `sort` | string | No | relevance (default), newest, oldest, price_asc, price_desc, next_auction (buy) or next_inspection (buy, rent). |
| `min_price` | integer | No | Minimum price in AUD. Rent is per week. |
| `max_price` | integer | No | Maximum price in AUD. Rent is per week. |
| `min_bedrooms` | integer | No | Minimum bedrooms, 0 (studio) to 5. |
| `max_bedrooms` | integer | No | Maximum bedrooms, 0 to 10. |
| `min_bathrooms` | integer | No | Minimum bathrooms, 1 to 5. |
| `property_type` | string | No | house, townhouse, villa, land, acreage or rural. One type per request. |
| `min_land_size` | integer | No | Minimum land size in square metres. |
| `keywords` | string | No | Words the listing text must contain, for example pool. |
| `include_surrounding` | boolean | No | true to add listings from surrounding suburbs. Default false. |
| `page` | integer | No | Result page, 1-based. 20 listings per page. |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/property-com-au/search?location=Bondi+Beach%2C+NSW+2026&channel=sold&sort=price_desc&min_bedrooms=2"
```

## Example response

```json
{
    "success": true,
    "data": [
        {
            "id": "152423404",
            "pid": 11646090,
            "path": "/nsw/bondi-beach-2026/lamrock-ave/8-56-pid-11646090/",
            "url": "https://www.property.com.au/nsw/bondi-beach-2026/lamrock-ave/8-56-pid-11646090/",
            "realestate_com_au_url": "https://www.realestate.com.au/sold/property-apartment-nsw-bondi+beach-152423404",
            "address": {
                "full": "8/56 Lamrock Avenue, Bondi Beach, NSW 2026",
                "suburb": "Bondi Beach",
                "state": "NSW",
                "postcode": "2026"
            },
            "status": "Recently sold",
            "price_text": "$1,300,000",
            "price_numeric": 1300000,
            "price_numeric_max": 1300000,
            "price_period": null,
            "currency": "AUD",
            "sold_date": "2026-10-24",
            "beds": 2,
            "baths": 1,
            "cars": null,
            "land_size": null,
            "latitude": -33.89082563,
            "longitude": 151.27014554,
            "images": [
                {
                    "alt": "Property at 8/56 Lamrock Avenue, Bondi Beach NSW 2026",
                    "jpg": "https://i2.au.reastatic.net/421x237-crop,progressive/653bfe33923b1fdb74d1e1c7f77daa1ff2c14c644a1206b0798d7110748ab1af/image.jpg",
                    "webp": "https://i2.au.reastatic.net/421x237-crop,format=webp,progressive/653bfe33923b1fdb74d1e1c7f77daa1ff2c14c644a1206b0798d7110748ab1af/image.jpg"
                }
            ],
            "is_surrounding_suburb": false
        }
    ],
    "pagination": {
        "page": 1,
        "page_size": 20,
        "returned": 1,
        "total": 75,
        "total_pages": 4,
        "has_more": true,
        "next_page": 2
    },
    "search_place": {
        "name": "Bondi Beach, NSW 2026",
        "heading": "Properties sold in"
    },
    "applied_filters": {
        "location": "Bondi Beach, NSW 2026",
        "channel": "sold",
        "sort": "price_desc",
        "min_bedrooms": 2,
        "include_surrounding": false
    },
    "map_pins": [
        {
            "latitude": -33.89082563,
            "longitude": 151.27014554,
            "label": "$1.3m",
            "listings": [
                {
                    "id": "152423404",
                    "pid": 11646090,
                    "path": "/nsw/bondi-beach-2026/lamrock-ave/8-56-pid-11646090/",
                    "address": {
                        "full": "8/56 Lamrock Avenue, Bondi Beach, NSW 2026",
                        "suburb": "Bondi Beach",
                        "state": "NSW",
                        "postcode": "2026"
                    },
                    "status": "Recently sold",
                    "price_text": "$1,300,000",
                    "price_numeric": 1300000,
                    "beds": 2,
                    "baths": 1
                }
            ]
        }
    ],
    "meta": {
        "endpoint_family": "search",
        "billable": true,
        "attempts": 1,
        "filtered_out": 0
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Location or Filter Rejected | Property.com.au does not know the `location` (`unknown_location`), or did not apply a requested filter (`upstream_rejected`). The request is rejected instead of returning a nationwide or unfiltered list. Use `search_location` from autocomplete. Non-billable. |
| 422 | Validation Error | A query parameter is missing, unknown or unusable. Unknown parameters are rejected, never ignored. Non-billable. |
| 503 | Upstream Unavailable | Property.com.au could not be reached after retries or answered with something unusable (`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)
