# Homely Property Search API Documentation

Scrappa's `GET /api/homely/search` returns Australian property for sale or rent on Homely as structured JSON. Set `mode=buy` or `mode=rent`.

## What you get

Each listing has `id`, `url_slug`, `listing_type`, `property_type`, `title`, `description`, `price_text`, `price_numeric`, `bond`, `beds`, `baths`, `cars`, `area_sqm`, `building_sqm`, `address`, `lat`, `lng`, `tags`, `inspections`, `images`, `floor_plans`, `documents`, `videos`, `agents` and the `office` id and name. Only available listings are returned: sold and leased history is not part of this endpoint.

## Prices are text

Homely publishes the price as text, for example "Offers over $650,000". `price_text` holds it as published. `price_numeric` is set only when the text holds one clear figure, and is `null` otherwise. Rent is quoted per week. The price filters are applied by Homely, so they act on its own price data.

## Filters are honoured

Beds, baths and car spaces are minimums. `property_types` takes house, unit, apartment, townhouse, villa, acreage, retirement, studio or other. Homely ignores a filter it does not know, so beds, baths, cars, type, land size and location are checked again on every listing. A listing that breaks a filter is never returned and is counted in `filtered_out_count`. `applied_filters` echoes what was used.

## Location is approximate

Homely has no suburb filter. Take `location` and `postcode` from `/api/homely/location-autocomplete`. The search looks the suburb name up as a keyword and then drops every listing from another suburb or postcode. A page can hold fewer than `per_page` listings, even none, while later pages still hold results. `total_results` is then the keyword total, an upper bound, and `total_results_is_estimate` is `true`.

## Sorting

`newest` is the default and `oldest` is the reverse. `expensive` lists the highest rent first and works with `mode=rent` only. Homely returns sale prices in no reliable price order, so price sort is not offered for sale.

## Pagination

`page` is 1-based and `per_page` is 1-50 (default 20). `pagination.page` is always the page you asked for. A page past the last one returns an empty `listings` list, never another page's data.

- **Documentation:** [https://scrappa.co/docs/homely-api/homely_search](https://scrappa.co/docs/homely-api/homely_search)
- **API group:** Homely API
- **Endpoint:** `GET https://scrappa.co/api/homely/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 |
| --- | --- | --- | --- |
| `mode` | string | Yes | buy for sale listings or rent for rental listings. |
| `location` | string | No | Suburb name from location-autocomplete, for example Bondi. |
| `postcode` | string | No | Four-digit postcode from location-autocomplete. Needs location. |
| `property_types` | string | No | house, unit, apartment, townhouse, villa, acreage, retirement, studio or other. Repeat the parameter or separate with commas. |
| `beds_min` | integer | No | Minimum number of bedrooms. |
| `baths_min` | integer | No | Minimum number of bathrooms. |
| `cars_min` | integer | No | Minimum number of car spaces. |
| `price_min` | integer | No | Minimum price in Australian dollars. For rent this is per week. |
| `price_max` | integer | No | Maximum price in Australian dollars. For rent this is per week. |
| `land_size_min` | integer | No | Minimum land size in square metres. |
| `land_size_max` | integer | No | Maximum land size in square metres. |
| `sort` | string | No | newest (default), oldest or expensive (rent only). |
| `page` | integer | No | Result page, 1-based. |
| `per_page` | integer | No | Listings per page, 1-50 (default 20). |

## Example request

```bash
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/homely/search?mode=buy&property_types=house&beds_min=3&price_max=1000000&per_page=20"
```

## Example response

```json
{
    "success": true,
    "total_results": 9120,
    "total_results_is_estimate": false,
    "returned": 1,
    "filtered_out_count": 0,
    "pagination": {
        "page": 1,
        "per_page": 20,
        "total_pages": 456,
        "has_next_page": true
    },
    "applied_filters": {
        "mode": "buy",
        "property_types": [
            "house"
        ],
        "beds_min": 3,
        "price_max": 1000000,
        "sort": "newest"
    },
    "listings": [
        {
            "id": 13634827,
            "url_slug": "31-eden-street-dudley-park-wa-6210",
            "listing_type": "sale",
            "property_type": "house",
            "status": "available",
            "tier": "basic",
            "is_exclusive": false,
            "title": "Entry-Level Opportunity in Prime Location!",
            "description": "Step into charm, character, and an unbeatable location with this delightful 3-bedroom home.",
            "municipality": null,
            "published_on": "2026-10-26T06:06:46.120Z",
            "last_modified": "2026-10-26T06:07:07.726Z",
            "price_text": "$650,000",
            "price_numeric": 650000,
            "price_period": null,
            "bond": null,
            "listed_on": "2026-10-26T06:06:46.120Z",
            "available_on": null,
            "under_offer": false,
            "sold_price_text": null,
            "sold_on": null,
            "leased_on": null,
            "beds": 3,
            "baths": 1,
            "cars": 3,
            "ensuites": 0,
            "living_areas": 0,
            "open_spaces": 0,
            "toilets": 1,
            "other_features": null,
            "tags": [],
            "area_sqm": 446,
            "building_sqm": 135,
            "is_new_construction": false,
            "address": {
                "full": "31 Eden Street, Dudley Park WA 6210",
                "street_number": "31",
                "unit_number": null,
                "street": "Eden Street",
                "suburb": "Dudley Park",
                "suburb_id": 5717676,
                "state": "WA",
                "postcode": "6210"
            },
            "lat": -32.5401732,
            "lng": 115.7287333,
            "inspections": [
                {
                    "starts_on": "2026-10-31T02:00:00.000Z",
                    "ends_on": "2026-10-31T02:30:00.000Z"
                }
            ],
            "images": [
                {
                    "identifier": "l-VaultRE-13634827-1",
                    "version": "5Sa7thaTM3AZqJgYYa7gm4h4pKKKI2zf",
                    "url": "https://example.com/photo-1.jpg"
                }
            ],
            "floor_plans": [],
            "documents": [],
            "videos": [],
            "external_links": [],
            "agents": [
                {
                    "id": 1077857,
                    "name": "Sample Agent",
                    "email": "agent@example.com",
                    "phone": "(08) 5550 0100",
                    "mobile": "0400 000 000"
                }
            ],
            "office": {
                "id": 38010,
                "name": "Sample Realty Mandurah"
            }
        }
    ],
    "meta": {
        "endpoint_family": "search",
        "billable": true,
        "attempts": 1
    }
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A query parameter is missing, unknown or unusable. Unknown parameters are rejected, never ignored (`request_rejected` is the same failure raised by the source). Non-billable. |
| 503 | Source Unavailable | Homely could not be reached in time, refused the request, or its answer changed shape (`upstream_unavailable`, `request_blocked`, `deadline_exhausted`, `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)
