# Realestate.com.au Scraper - Buy, Sold & Rent (`parsebird/realestate-au-scraper`) Actor

Scrape realestate.com.au property listings for sale, for rent, or recently sold by suburb or search URL. Extract price, beds, baths, address, agent and more. JSON, CSV, Excel.

- **URL**: https://apify.com/parsebird/realestate-au-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.69 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Realestate.com.au Scraper - Buy, Sold & Rent

Scrape [realestate.com.au](https://www.realestate.com.au) property listings for sale, for rent, or recently sold — search by suburb, state, postcode, or a pasted search URL. Get price, beds, baths, full address with coordinates, agent and agency details, photos and more.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">Search any Australian suburb across Buy, Rent, or Sold listings, filter by price/beds/baths/property type, and get structured property data ready for analysis or integration.</td>
</tr></table>

##### Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

```
Apify Actor: parsebird/realestate-au-scraper — scrapes realestate.com.au property listings from the site's own search GraphQL API (no browser, no per-listing page fetch needed). Call: ApifyClient("TOKEN").actor("parsebird/realestate-au-scraper").call(run_input={"mode": "location", "locations": [{"suburb": "Sydney", "state": "NSW"}], "listingType": "buy", "maxListings": 20, "maxPages": 3}). Inputs: mode ("location" or "url"), locations (array of {suburb, state, postcode} — location mode), listingType ("buy"/"rent"/"sold"), urls (array of realestate.com.au search URLs — url mode, filters below ignored), sortBy, dateRange (sold only), propertyTypes, priceMin/priceMax, bedroomsMin/bedroomsMax, bathroomsMin, includeSurrounding, maxListings (default 20), maxPages (default 3), proxyConfiguration (default standard Apify Proxy). Output: dataset of listings with propertyId, url, listingType, propertyType, address {street, suburb, state, postcode, full}, coordinates {latitude, longitude}, price {display}, features {bedrooms, bathrooms, parkingSpaces, hasStudy, hasBalcony, hasPool, hasGarage}, description, propertyFeatures[], media {imageCount, images[], floorplanUrl}, agent, agents[], agency, inspectionTimes, auction, soldDate, soldPrice, bond, availableDate, landSize, buildingSize, scrapedAt. API docs: https://docs.apify.com/api/v2  Token: https://console.apify.com/settings/integrations
```

### What does Realestate.com.au Scraper do?

Give it a suburb (or a search URL you've already refined on the site) and it walks the search results page by page, returning a structured record per listing pulled straight from the page's own search data — no per-listing detail-page fetch needed, which keeps runs fast and cheap:

- 🏠 **Property basics** — `propertyType`, `description`, `propertyFeatures`, `url`
- 📍 **Address & location** — `address` (street, suburb, state, postcode, full), `coordinates` (lat/lng)
- 💲 **Price** — `price.display`, exactly as shown on the listing
- 🛏️ **Features** — `bedrooms`, `bathrooms`, `parkingSpaces`, plus `hasStudy`/`hasBalcony`/`hasPool`/`hasGarage` flags
- 🖼️ **Media** — `images[]`, `imageCount`, `floorplanUrl`
- 👤 **Agent & agency** — `agent`, `agents[]`, `agency` (name, phone, ratings)
- 🔎 **Search or URL mode** — build a search from suburb + filters, or paste any realestate.com.au search URL directly for full control

Use it as a realestate.com.au API alternative for market research, lead generation, or feeding a property database — all with Apify's scheduling, API access, and JSON/CSV/Excel export.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `mode` | string | **Yes** | `location` | `location` (suburb + filters) or `url` (paste a search URL). |
| `locations` | array | No | Sydney, NSW | `[{suburb, state, postcode}]` — location mode only. |
| `listingType` | string | No | `buy` | `buy`, `rent`, or `sold`. Location mode only. |
| `sortBy` | string | No | `list-date` | `relevance`, `list-date`, `list-date-asc`, `price-asc`, `price-desc`. |
| `propertyTypes` | array | No | all | `house`, `apartment`, `townhouse`, `villa`, `land`, `rural`, `commercial`. |
| `priceMin` / `priceMax` | integer | No | — | Price range in AUD. |
| `bedroomsMin` / `bedroomsMax` | integer | No | — | Bedroom count range. |
| `bathroomsMin` | integer | No | — | Minimum bathrooms. |
| `includeSurrounding` | boolean | No | `false` | Include properties from surrounding suburbs. |
| `urls` | array | No | — | Search result URLs to scrape — URL mode only. Filters above are ignored. |
| `maxListings` | integer | No | `20` | Stop after this many listings. `0` = unlimited. |
| `maxPages` | integer | No | `3` | Max result pages per location. `0` = unlimited. |
| `proxyConfiguration` | object | No | Apify Proxy | Standard Apify Proxy works; Residential is optional. |

### Output example

```json
{
  "propertyId": "143160680",
  "url": "https://www.realestate.com.au/property-house-vic-tarneit-143160680",
  "listingType": "buy",
  "propertyType": "House",
  "address": {
    "street": "28 Chantelle Parade",
    "suburb": "Tarneit",
    "state": "Vic",
    "postcode": "3029",
    "full": "28 Chantelle Parade, Tarneit, Vic 3029"
  },
  "coordinates": { "latitude": -37.85273078, "longitude": 144.66332821 },
  "price": { "display": "$650,000 - $700,000" },
  "features": {
    "bedrooms": 4,
    "bathrooms": 2,
    "parkingSpaces": 2,
    "hasStudy": false,
    "hasBalcony": false,
    "hasPool": false,
    "hasGarage": true
  },
  "description": "Renowned Real Estate proudly presents this sensational opportunity...",
  "propertyFeatures": ["Built-in wardrobes", "Dishwasher", "Ducted heating", "Ensuites"],
  "media": {
    "imageCount": 12,
    "images": ["https://i2.au.reastatic.net/{size}/.../image.jpg"],
    "floorplanUrl": null
  },
  "agent": { "name": "Himraj", "phoneNumber": { "display": "0452060566" } },
  "agency": { "name": "Renowned Real Estate" },
  "isBuy": true,
  "isRent": false,
  "isSold": false,
  "scrapedAt": "2026-09-14T13:00:00.000Z"
}
```

Not every field is published for every listing — realestate.com.au omits fields like `price.display` (e.g. "Contact Agent" listings) or `propertyFeatures` when the agent didn't provide them. Download results in JSON, CSV, or Excel from the Console, or pull them via the [Apify API](https://docs.apify.com/api/v2).

### Use cases

- **Market research** — compare prices, sizes, and features across suburbs
- **Lead generation** — active listings with agent and agency contact details
- **Investor sourcing** — filter by price, bedrooms, and property type
- **Data pipelines** — clean JSON of listings, coordinates, and photos for your own database or map
- **Rent vs. buy analysis** — run the same suburb through `buy` and `rent` modes

### How to scrape realestate.com.au

1. Pick **Location mode** and enter a suburb + state (e.g. `Sydney`, `NSW`), or open [realestate.com.au](https://www.realestate.com.au) in your browser, apply your filters, and copy the resulting URL into **URL mode**.
2. Set `listingType` (Buy, Rent, or Sold) and any filters you want.
3. Set `maxListings` and `maxPages` to control run size and cost.
4. Click **Start** and download the dataset as JSON, CSV, or Excel — or fetch it via the [Apify API](https://docs.apify.com/api/v2) or [integrations](https://apify.com/integrations) (Zapier, Make, Google Sheets, and more).

Under the hood, the actor queries the same search GraphQL API that powers realestate.com.au's own apps, up to 100 listings per request — no browser and no per-listing page fetch, which keeps runs fast and cheap.

### How much does it cost to scrape realestate.com.au?

Realestate.com.au Scraper uses **pay-per-result** pricing — you only pay for listings actually returned.

| Event | Price per event | Price per 1,000 |
|-------|------------------|------------------|
| `listing` | $0.00069 – $0.00099 | **$0.69 – $0.99** |

Pricing depends on your Apify plan (Free, Bronze, Silver, Gold — lower on higher plans). Scraping 1,000 listings costs between $0.69 and $0.99.

### FAQ

**Do I need a proxy?**
The default (standard Apify Proxy) is set for you and is all you need. Residential proxies are optional — switch to them only if you see repeated request failures.

**What's the difference between Location mode and URL mode?**
Location mode builds a search from a suburb/state/postcode plus the filter fields. URL mode scrapes a URL you've already refined in your browser — useful for complex filter combinations — and ignores the filter fields above.

**Are filters applied on the site's search?**
Yes. `propertyTypes`, `priceMin`/`priceMax`, `bedroomsMin`/`bedroomsMax`, `bathroomsMin` and `sortBy` are passed to realestate.com.au's own search, so every returned listing already matches and no pages are wasted. `dateRange` (sold listings) keeps only sales inside the chosen window and stops paging once results get older. Commercial property lives on realcommercial.com.au, so the `commercial` type is ignored.

**Can I scrape rentals or sold listings?**
Yes — set `listingType` to `rent` or `sold`, or paste a `/rent/...` or `/sold/...` URL in URL mode.

**Does it fetch individual property pages?**
No — all data comes from the search results page itself, which keeps runs fast and the cost low.

**Can I schedule it?**
Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to re-run periodically and track new listings in an area.

**Is there an API?**
Yes — every Apify Actor is callable via the [Apify API](https://docs.apify.com/api/v2) and the official [Python](https://docs.apify.com/api/client/python) and [JavaScript](https://docs.apify.com/api/client/js) clients.

### Is it legal to scrape realestate.com.au?

Scraping publicly available data, like the property listings this actor collects, is generally permitted, but you are responsible for how you use the data. Comply with realestate.com.au's Terms of Service, avoid collecting personal data beyond what's publicly listed, and consult a lawyer if you plan to use scraped data commercially. Read more in Apify's blog post on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Using the API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("parsebird/realestate-au-scraper").call(run_input={
    "mode": "location",
    "locations": [{"suburb": "Sydney", "state": "NSW"}],
    "listingType": "buy",
    "maxListings": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["address"]["full"], item["price"]["display"])
```

**JavaScript**

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('parsebird/realestate-au-scraper').call({
    mode: 'location',
    locations: [{ suburb: 'Sydney', state: 'NSW' }],
    listingType: 'buy',
    maxListings: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Related Actors

- [Daft.ie Property Scraper](https://apify.com/parsebird/daft-ie-property-scraper) — Irish real estate listings
- [Trulia Property Scraper](https://apify.com/parsebird/trulia-property-scraper) — US real estate listings
- [Immobiliare.it Scraper](https://apify.com/parsebird/immobiliare-it-scraper) — Italian real estate listings

### Issues & feedback

Found a bug or have a feature request? Open an issue on the Actor's **Issues** tab in Apify Console — feedback helps keep this realestate.com.au scraper reliable as the site evolves.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/realestate-au-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Location mode builds a search from suburb + state + filters below. URL mode scrapes any search URL you already refined in a browser (recommended for complex filters).

## `locations` (type: `array`):

Suburb, state and postcode are all optional - provide whichever you have. Example: \[{"suburb": "Sydney", "state": "NSW"}]

## `listingType` (type: `string`):

Type of property listings to scrape. Location mode only.

## `sortBy` (type: `string`):

Sort order for search results (Location mode; in URL mode the URL's own sort is used).

## `dateRange` (type: `string`):

How far back to search for sold listings. Only applies when listing type is Recently Sold.

## `propertyTypes` (type: `array`):

Filter by property type (leave empty for all).

## `priceMin` (type: `integer`):

Minimum property price (AUD).

## `priceMax` (type: `integer`):

Maximum property price (AUD).

## `bedroomsMin` (type: `integer`):

Minimum number of bedrooms.

## `bedroomsMax` (type: `integer`):

Maximum number of bedrooms.

## `bathroomsMin` (type: `integer`):

Minimum number of bathrooms.

## `includeSurrounding` (type: `boolean`):

Include properties from surrounding suburbs in results.

## `urls` (type: `array`):

Search result page URLs to scrape. Refine your search in a browser (filters, sort), then paste the resulting URL(s) here. All filter fields above are ignored in this mode.

## `maxListings` (type: `integer`):

Stop after scraping this many listings. Set to 0 for unlimited.

## `maxPages` (type: `integer`):

Maximum search result pages to process per location. Each page has up to 100 results (25 when Maximum listings is 25 or less). Set to 0 for unlimited.

## `proxyConfiguration` (type: `object`):

Apify Proxy settings. The default (standard Apify Proxy) works; switch to Residential only if you see repeated request failures.

## Actor input object example

```json
{
  "mode": "location",
  "locations": [
    {
      "suburb": "Sydney",
      "state": "NSW"
    }
  ],
  "listingType": "buy",
  "sortBy": "list-date",
  "dateRange": "6months",
  "includeSurrounding": false,
  "urls": [
    "https://www.realestate.com.au/buy/in-sydney,+nsw/list-1"
  ],
  "maxListings": 1,
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "locations": [
        {
            "suburb": "Sydney",
            "state": "NSW"
        }
    ],
    "urls": [
        "https://www.realestate.com.au/buy/in-sydney,+nsw/list-1"
    ],
    "maxListings": 1,
    "maxPages": 3,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/realestate-au-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "locations": [{
            "suburb": "Sydney",
            "state": "NSW",
        }],
    "urls": ["https://www.realestate.com.au/buy/in-sydney,+nsw/list-1"],
    "maxListings": 1,
    "maxPages": 3,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/realestate-au-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "locations": [
    {
      "suburb": "Sydney",
      "state": "NSW"
    }
  ],
  "urls": [
    "https://www.realestate.com.au/buy/in-sydney,+nsw/list-1"
  ],
  "maxListings": 1,
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call parsebird/realestate-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/realestate-au-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/nfbVwaYQSqRN4tBOQ/builds/nEOhT0afLfda7oMRD/openapi.json
