---
title: "Realestate.com.au API: Australian Listings as JSON"
description: "Search realestate.com.au by location and channel (buy, rent, sold), then open each listing by URL. Parameters, a recorded Sydney response and the cost."
url: https://perceptlayer.com/blog/realestate-com-au-api-listings
---

[Blog](https://perceptlayer.com/blog) / [API guides](https://perceptlayer.com/blog/category/api-guides)

# Realestate.com.au API: Australian Listings as JSON

8 Oct 2026 Perceptlayer 6 min read

realestate.com.au has no self-serve API for reading its listings. To get them as JSON, call `GET /v1/realestate-com-au/search` with a `location` such as `Sydney, NSW` and a `channel` of `buy`, `rent` or `sold`. Each successful call costs 1 credit and returns a page of listings with address, price text, bedrooms, agency and a listing URL, which `/v1/realestate-com-au/property` takes to return the full listing.

## Key takeaways

-   The flow is three calls: `locations` to check a place name, `search` with `location` and `channel`, then `property` with each listing's `url`.
-   A recorded search for `Sydney, NSW` returned `total_results` 596 with `pageSize` 25, so the whole result set is 24 pages, or 24 credits.
-   `price` is display text, not a number: the same recorded page has `Contact Agent` and `Buyers Guide $2,200,000`. Parse it, and keep the raw string.
-   The recorded search has `surroundingSuburbs: true` and returned a Millers Point listing for a Sydney search, so filter on `address.suburb` if you need one suburb only.
-   All 9 realestate.com.au endpoints cost 1 credit per successful call, and failed calls cost nothing.

## Is there an official realestate.com.au API?

Not one we could find for reading listings: there is no public, self-serve API that returns realestate.com.au search results to any developer who signs up. REA Group, which runs the site, sells property data separately through PropTrack, its data and valuations business, which offers property data APIs including automated valuations ( [PropTrack](https://www.proptrack.com.au/products/property-data-and-insights/apis/), 2026).

If you need automated valuations or a licensed data product, talk to PropTrack. If you need what the listing pages show, as JSON, without a sales process, the [realestate.com.au API](https://perceptlayer.com/apis/realestate-com-au) returns it with the same key as every other API in the catalogue. Data is collected from publicly available sources and returned as found at the time of the call, and whether your use is allowed depends on the site's terms and Australian law.

## Which endpoints does the realestate.com.au API have?

Nine GET endpoints, each 1 credit per successful call. Three carry the main flow (locations, search, property). Two give area context: suburb profiles and sales events by state. The other four cover agents and agencies. Most identify a page by its realestate.com.au `url`, so the URLs a search returns are the inputs to the next call.

| Endpoint | Returns | Required | Optional |
| --- | --- | --- | --- |
| `/v1/realestate-com-au/locations` | Location matches | `query` | `limit` |
| `/v1/realestate-com-au/autocomplete` | Typeahead matches | `query` | `limit`, `types`, `source` |
| [`/v1/realestate-com-au/search`](https://perceptlayer.com/apis/realestate-com-au/search) | A page of listings | `location` | `channel`, `page`, `sort`, price, room and type filters |
| [`/v1/realestate-com-au/property`](https://perceptlayer.com/apis/realestate-com-au/property) | One listing | `url` | none |
| `/v1/realestate-com-au/suburb-profile` | A suburb profile | `url` | none |
| [`/v1/realestate-com-au/sales-events`](https://perceptlayer.com/apis/realestate-com-au/sales-events) | Sales events | none | `state`, `url` |
| `/v1/realestate-com-au/agents` | Agents | none | `url`, `location`, `page` |
| `/v1/realestate-com-au/agent-profile` | One agent | `url` | none |
| `/v1/realestate-com-au/agency-profile` | One agency | `url` | none |

`sales-events` takes `state` as one of `act`, `nsw`, `nt`, `qld`, `sa`, `tas`, `vic` or `wa`.

## How do you search realestate.com.au listings?

Call `GET /v1/realestate-com-au/search` with `location` and, usually, `channel`. `location` is free text up to 120 characters, written the way the site writes it, such as `Sydney, NSW`. If you're not sure how a place is spelled, call `/v1/realestate-com-au/locations` with `query=Sydney` first. `channel` is `buy`, `rent` or `sold`, and `page` steps through results. This is the request behind the recorded response below:

```bash
curl "https://api.perceptlayer.com/v1/realestate-com-au/search?location=Sydney%2C+NSW&channel=buy&page=1" \
  -H "X-API-Key: $API_KEY"
```

[Get a free API key](https://perceptlayer.com/signup) if you don't have one; keys go in the `X-API-Key` header, as the [authentication docs](https://docs.perceptlayer.com/authentication) explain.

### Which search parameters can you use?

Search takes one required parameter and eleven optional ones. The types and limits come from the endpoint definition, and nothing else about them is documented, so don't assume a default sort.

| Parameter | Type | Notes |
| --- | --- | --- |
| `location` | string, required | Up to 120 characters, such as `Sydney, NSW` |
| `channel` | string | `buy`, `rent` or `sold` |
| `page` | integer | Results page |
| `sort` | string | Up to 40 characters |
| `min_price`, `max_price` | integer | Price bounds |
| `min_bedrooms`, `max_bedrooms` | integer | Bedroom bounds |
| `min_bathrooms` | integer | Minimum bathrooms |
| `min_carspaces` | integer | Minimum parking spaces |
| `property_types` | string | Up to 200 characters |
| `keywords` | string | Up to 200 characters |

For rentals in Parramatta with two or more bedrooms, that's `location=Parramatta, NSW&channel=rent&min_bedrooms=2`. Switch `channel` to `sold` for recent sales in the same area.

### What does the recorded response contain?

The response has `data.total_results`, a `pagination` object and a `listings` array. This excerpt, trimmed with `…`, shows the paging fields and the second listing on the page:

```json
{
  "success": true,
  "data": {
    "channel": "buy",
    "location": "Sydney, NSW",
    "total_results": 596,
    "pagination": {
      "page": 1,
      "pageSize": 25,
      "localities": [{ "searchLocation": "Sydney CBD, NSW" }],
      "filters": {
        "surroundingSuburbs": true,
        …
      }
    },
    "listings": [
      …,
      {
        "id": "151002436",
        "url": "https://www.realestate.com.au/property-apartment-nsw-millers+point-151002436",
        "property_type": "Apartment",
        "address": {
          "display": { "fullAddress": "28A High Street, Millers Point, NSW 2000", … },
          "suburb": "Millers Point",
          "state": "NSW",
          "postcode": "2000"
        },
        "price": "Buyers Guide $2,200,000",
        "features": {
          "bedrooms": { "value": 3 },
          "bathrooms": { "value": 2 },
          "parkingSpaces": { "value": 0 },
          …
        },
        "property_sizes": {
          "land": { "displayValue": "103", … }
        },
        "listing_company": {
          "name": "LJ Hooker - Blacktown",
          "id": "EKORXD",
          "ratingsReviews": { "avgRating": 5, "totalReviews": 202 },
          …
        },
        …
      }
    ],
    …
  }
}
```

Three details matter when you load this. Room counts sit one level down, under `features.bedrooms.value`. The listing's `url` is what the `property` endpoint takes. And the search resolved `Sydney, NSW` to the locality `Sydney CBD, NSW` with `surroundingSuburbs: true`, which is why a Millers Point listing appears. The first listing on the same page is in Sydney itself, with `price` set to `Contact Agent`.

## How do you turn the price text into a number?

Keep the raw `price` string and add a parsed column next to it. On realestate.com.au the price is whatever the agent displays, so one page can mix a guide, a range and no figure at all. In the recorded page, one listing says `Contact Agent` and the other `Buyers Guide $2,200,000`. A parser that takes the first dollar figure and leaves the rest empty is honest about what the page gave you:

```python
import os
import re
import requests

URL = "https://api.perceptlayer.com/v1/realestate-com-au/search"
HEADERS = {"X-API-Key": os.environ["API_KEY"]}
MONEY = re.compile(r"\$\s?([\d,]+)")

def parse_price(text):
    m = MONEY.search(text or "")
    return int(m.group(1).replace(",", "")) if m else None

r = requests.get(URL, params={"location": "Sydney, NSW", "channel": "buy", "page": 1},
                 headers=HEADERS, timeout=60)
r.raise_for_status()
for item in r.json()["data"]["listings"]:
    print(item["id"], item["address"]["suburb"], item["features"]["bedrooms"]["value"],
          item["price"], parse_price(item["price"]))
```

We checked `parse_price` against the recorded page but haven't run the request loop live for this article. For the two listings in the recorded page, `parse_price` returns `None` and `2200000`. A range such as a lower and upper figure would return the lower one, so if your analysis needs ranges, capture both matches with `MONEY.findall`.

## What does a suburb-level pull cost?

Each search page is one call and 1 credit, so a full pull costs the number of pages. With `total_results` 596 and `pageSize` 25, the recorded Sydney search needs 596 ÷ 25 = 23.84, rounded up to 24 pages: 24 credits. Opening every listing with `property` adds one call each, 596 credits, for 620 credits in total.

| Step | Calls | Credits |
| --- | --- | --- |
| `search`, 24 pages | 24 | 24 |
| `property` for every listing | 596 | 596 |
| **Full pull, buy channel** | **620** | **620** |

Run the search pages weekly and skip `property` for listings you've already stored, and the recurring cost falls to 24 credits plus one call per new listing. That fits easily inside the 1,000 free credits a month. Read `total_results` from page one rather than hard-coding it, since it changes daily. Failed calls return `X-Credits-Used: 0`; the [credits docs](https://docs.perceptlayer.com/credits) explain the balance, and [pricing](https://perceptlayer.com/pricing) has what packs cost.

## When should you call Domain.com.au as well?

Call both portals when you need coverage rather than one site's view, because a listing can appear on either and the two return different fields. Domain's API has auction results by city and suburb insights by bedrooms and property type; realestate.com.au has agency ratings, sales events by state and suburb profiles. The [Domain.com.au guide](https://perceptlayer.com/blog/domain-com-au-api-listings) compares the two response shapes field by field, so it isn't repeated here.

The listing IDs differ between portals, so you can't join on them. Normalise the address (unit, street number, street, suburb, postcode) and match on that; the article on [deduplicating listings across sources](https://perceptlayer.com/blog/deduplicate-listings-across-sources) has the method. To see the fields for your own area first, run a `search` in the playground on the [realestate.com.au API page](https://perceptlayer.com/apis/realestate-com-au).

## APIs in this post

-   [realestate.com.au **1 credit per call** · 9 endpoints](https://perceptlayer.com/apis/realestate-com-au)

## Frequently asked questions

### How much does the realestate.com.au API cost?

Every one of the 9 endpoints costs 1 credit per successful call, and failed calls cost nothing. The recorded Sydney search is 24 pages, so a full pass is 24 credits before opening any listings. Every verified account gets 1,000 free credits a month, and the [pricing page](https://perceptlayer.com/pricing) has what credit packs cost.

### Can I get sold prices from realestate.com.au?

Yes, through the same search endpoint with `channel=sold` and a `location`. Sold results come back as listings like the buy channel, with whatever price text the site shows for each sale. Where a sale shows no figure, the parser above returns `None`, so keep the raw `price` text next to any parsed number.

### Why did my search return listings from other suburbs?

The recorded search shows `surroundingSuburbs: true` in its filters, and a search for `Sydney, NSW` returned a listing in Millers Point. If you need one suburb only, filter the listings on `address.suburb` and `address.postcode` after the call. Credits are per call, not per listing, so the filtering costs nothing extra.

### Does the API return agents' personal details?

Listings include a `listers` array with the agents' names and job titles as shown on the page, and there are agent and agency profile endpoints. Australia's privacy regulator says personal information can include information about a person's work activities, and lists a name as an example ( [OAIC](https://www.oaic.gov.au/privacy/privacy-guidance-for-organisations-and-government-agencies/handling-personal-information/what-is-personal-information), 2026). Use agency-level fields for analysis and drop names you don't need.

### What happens when a call fails?

You get an HTTP status and a JSON body with an error `code`, a `message` and a `request_id`, and `X-Credits-Used` is 0, so a failed `property` lookup for a withdrawn listing costs nothing. A `location` over 120 characters fails with `invalid_parameters` (422). The [errors docs](https://docs.perceptlayer.com/errors) list every code and what to do about it.

realestate.com.au australia real estate listings property data

## More from the blog

1.  [API guides](https://perceptlayer.com/blog/category/api-guides) 11 Aug 2026 Perceptlayer 7 min read
    
    ## [Domain.com.au API: Australian Listings and Suburb Data](https://perceptlayer.com/blog/domain-com-au-api-listings)
    
    Call /v1/domain-com-au/search for Australian listings, then property, auction results and suburb insights as JSON. Parameters, a real response, 1 credit a call.
    
2.  [API guides](https://perceptlayer.com/blog/category/api-guides) 1 Jul 2026 Updated 26 Oct 2026 Perceptlayer 9 min read
    
    ## [Zillow Listings API: Get Property Data as JSON](https://perceptlayer.com/blog/zillow-listings-api-json)
    
    One GET to /v1/zillow/search returns listings near a point as JSON with price, beds, baths and address. Parameters, a real response, 1 credit per call.
    
3.  [API guides](https://perceptlayer.com/blog/category/api-guides) 15 Oct 2026 Perceptlayer 7 min read
    
    ## [Redfin API: Search Homes, Then Property and Valuation](https://perceptlayer.com/blog/redfin-api-property-valuation)
    
    Four Redfin endpoints at 1 credit each: find a region, search homes with a real JSON response, then call property and valuation by property\_id.
