# Realestate.com.au Scraper (`scraptivo/realestate-com-au-scraper`) Actor

Collects Australian property listings and agents from realestate.com.au. Returns buy, rent, sold, and new-home records plus optional agent profiles, reviews, and sold history.

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

## Pricing

from $4.70 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

**Realestate.com.au Scraper** collects buy, rent, sold, and new-home listings plus agent profiles from [realestate.com.au](https://www.realestate.com.au) and turns them into structured data for market research, listing alerts, and agent outreach. Provide a suburb such as "Sydney CBD, NSW" or paste a search or listing URL, then export address, price, beds, agency, and listing IDs to JSON, CSV, Excel, or your preferred integration. Use it to monitor suburb stock, compare asking prices, and build agent lead lists. Pricing starts at **$5.00 per 1,000 property listings**; optional details, phones, reviews, and sold listings are billed only when you enable them.

### What can you automate with Realestate.com.au Scraper?

- **Build suburb listing datasets** — Search buy, rent, sold, or new homes by location and export address, price, beds, baths, property type, and agency in one file.
- **Monitor asking prices and stock** — Schedule daily or weekly runs on the same suburb to catch new ads, price changes, and recently sold homes.
- **Collect listing-agent leads** — Keep agency and agent names from every card, and turn on agent contact when you need phones from the listing page.
- **Map local agents** — Switch to Agents mode to collect find-agent profiles with ratings, review counts, and sold counts.
- **Enrich selected records** — Open listing pages for description, gallery, and inspections, or open agent profiles for reviews and sold-property history.
- **Feed research and outreach pipelines** — Download JSON, CSV, or Excel, or push each run through the Apify API or a webhook.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Market researchers | Comparing asking prices, property types, and stock across Australian suburbs and channels. |
| Investors and analysts | Tracking buy and sold listings to spot supply, price bands, and recently transacted homes. |
| Lead-generation teams | Building outreach lists of listing agents and agencies, with optional phones from the listing page. |
| Agencies and brokerages | Monitoring competitor listings and mapping high-rated agents in a suburb. |

### What data can you collect from realestate.com.au?

| Data group | Example fields | How it helps |
|---|---|---|
| Listing identity | `recordType`, `title`, `address`, `url`, `listingId` | Identify and deduplicate properties with the stable `listingId`. |
| Market and price | `channel`, `price`, `propertyType` | Compare buy, rent, sold, and new-home stock by type and asking price. |
| Location | `suburb`, `state`, `postcode` | Slice results by suburb or postcode without opening each listing. |
| Features | `bedrooms`, `bathrooms`, `parkingSpaces` | Filter homes by size before outreach or analysis. |
| Agency and listing agent | `agencyName`, `agentName`, `agentPhone` | See who is listing the property; phone appears when contact extraction finds one. |
| Agent profile | `name`, `avgRating`, `totalReviews`, `soldCount`, `agentId` | Rank agents in Agents mode and merge runs on `agentId`. |

Search-card listings always include address, price, beds, property type, agency, channel, and listing URL. `description`, gallery, inspections, and richer agency fields appear when **Extract listing details** is enabled. `agentPhone` is filled when **Extract agent contact** finds a number on the listing page. Listing-agent bio, ratings, and experience appear when **Extract agent details** is enabled. In Agents mode, `avgRating`, `totalReviews`, and `soldCount` come from the find-agent card; reviews and sold-property rows appear when **Extract full agent profile** is enabled.

### How to use Realestate.com.au Scraper

1. Open the [Realestate.com.au Scraper](https://apify.com/scraptivo/realestate-com-au-scraper) on Apify.
2. Enter a location such as "Sydney CBD, NSW", or paste realestate.com.au search or listing URLs.
3. Choose **Buy**, **Rent**, **Sold**, or **New homes** for search queries, set `maxItems`, and turn on optional listing details or agent contact if you need them.
4. Keep residential proxy enabled and run the Actor.
5. Export the dataset or connect it to your workflow.

```json
{
    "scrapeMode": "properties",
    "propertyChannel": "buy",
    "searchQueries": ["Sydney CBD, NSW"],
    "maxItems": 10,
    "extractPropertyDetails": true,
    "extractAgentDetails": false,
    "extractAgentContact": true,
    "extractAgentProfile": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Build a weekly buy list for Sydney CBD

1. Schedule a Monday run with `searchQueries` = `["Sydney CBD, NSW"]`, `propertyChannel` = `"buy"`, and `maxItems` set to the volume you want.
2. Keep address, price, bedrooms, property type, agency, and listing URL in your sheet or CRM.
3. Turn on **Extract listing details** and **Extract agent contact** when you need description, gallery, inspections, and phones.
4. Send new records to Google Sheets or a CRM through a webhook after each run.
5. Deduplicate user-side against the stable `listingId` field.

### Automate and integrate your results

- **Schedules** — Buy and rent stock changes daily; sold and new-home searches are often enough weekly. Create a separate scheduled task per suburb so each run keeps its own dataset.
- **Webhooks** — Enable a webhook on run completion to push fresh listings or agents into Google Sheets, a CRM, Slack, or a database.
- **Exports and API** — Download JSON, CSV, Excel, or HTML from the Apify Console, or call the Actor from the API. One cURL example:

```shell
curl "https://api.apify.com/v2/acts/scraptivo~realestate-com-au-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "scrapeMode": "properties",
    "propertyChannel": "buy",
    "searchQueries": ["Sydney CBD, NSW"],
    "maxItems": 10,
    "extractPropertyDetails": true,
    "extractAgentContact": true,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": ["RESIDENTIAL"]
    }
  }'
```

- **Deduplication** — The Actor deduplicates properties by `listingId` (or canonical URL) and agents by `agentId` while paginating a single run. It appends new results on every scheduled run and does not merge datasets across runs. Use `listingId` or `agentId` as the stable key when you combine results.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---:|---|---|---|
| `scrapeMode` | String | No | `properties` | `properties` or `agents`. |
| `propertyChannel` | String | No | `buy` | `buy`, `rent`, `sold`, or `new-homes`. Ignored for start URLs and in Agents mode. |
| `searchQueries` | Array of strings | No\* | — | Locations in Properties mode, e.g. `"Sydney CBD, NSW"`. |
| `startUrls` | Array of URLs | No\* | — | realestate.com.au search or `/property-…` listing URLs. |
| `extractPropertyDetails` | Boolean | No | `false` | Open each listing page for description, gallery, inspections, and richer agency data. Charged as `property-details`. |
| `extractAgentDetails` | Boolean | No | `false` | Open listing agents' profiles for bio, ratings, and experience. Charged as `agent-details`. |
| `extractAgentContact` | Boolean | No | `false` | Include agent and agency phones from the listing page. Charged as `agent-contact` when a phone is found. |
| `agentSearchQueries` | Array of strings | No\* | — | Locations to find agents when scrape mode is Agents. |
| `agentUrls` | Array of URLs | No\* | — | Find-agent search pages or `/agent/…` profile URLs. |
| `extractAgentProfile` | Boolean | No | `false` | Open each agent profile for details, reviews, and sold properties. Charged as `agent-details`, plus `agent-reviews` and `sold-properties` per row. |
| `maxItems` | Integer | No | `10` | Maximum properties or agents to scrape (`0` = unlimited). |
| `proxyConfiguration` | Proxy object | No | Apify proxy, RESIDENTIAL | Proxy settings. Australian residential IPs are recommended. |

\* Properties mode needs `searchQueries` and/or `startUrls`. Agents mode needs `agentSearchQueries` and/or `agentUrls`.

#### Which source takes priority?

In Properties mode, `startUrls` scrape those search or listing pages and ignore `propertyChannel` because the URL already includes buy, rent, sold, or new homes. `searchQueries` build a location search using `propertyChannel`. In Agents mode, `propertyChannel` is ignored; use `agentSearchQueries` or `agentUrls` instead.

#### Do listing details and agent contact depend on each other?

No. `extractPropertyDetails`, `extractAgentContact`, and `extractAgentDetails` are independent. You can collect phones without full listing copy, or open listing pages without charging `agent-contact`. `extractAgentProfile` applies in Agents mode and is separate from the listing-agent toggles.

### Output example

Each dataset item is one property (`recordType`: `property`) or one agent (`recordType`: `agent`). With listing details and agent contact enabled, a property record looks like this:

```json
{
    "recordType": "property",
    "listingId": "151625588",
    "url": "https://www.realestate.com.au/property-apartment-nsw-sydney-151625588",
    "channel": "buy",
    "title": "1201/161 Clarence Street",
    "address": "1201/161 Clarence Street, Sydney, NSW 2000",
    "suburb": "Sydney",
    "state": "NSW",
    "postcode": "2000",
    "propertyType": "Apartment",
    "price": "For sale $1,200,000",
    "bedrooms": 2,
    "bathrooms": 2,
    "parkingSpaces": 0,
    "agencyName": "Harmony Realty Group - Sydney",
    "agentName": "Sky Shijia Ye",
    "agentPhone": "0425698896",
    "hasListingDetails": true,
    "hasAgentContact": true,
    "sourceQuery": "Sydney CBD, NSW"
}
```

Agent records use `name`, `avgRating`, `totalReviews`, `soldCount`, and `agentId`. Reviews and sold-property arrays appear only when **Extract full agent profile** is enabled.

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

The Actor uses pay-per-event pricing. A small **Actor start** event ($0.00005) is charged once per run. You then pay for the data you extract:

- **$5.00 / 1,000 properties** — a `property` event for every listing pushed to the dataset.
- **$5.00 / 1,000 listings** — a `property-details` event per listing when **Extract listing details** is enabled.
- **$5.00 / 1,000 listings** — an `agent-contact` event when **Extract agent contact** finds a phone.
- **$5.00 / 1,000 agent profiles** — an `agent-details` event when listing-agent profiles or full agent profiles are opened.
- **$5.00 / 1,000 agents** — an `agent` event for each find-agent record in Agents mode.
- **$1.50 / 1,000 reviews** — an `agent-reviews` event per review on a full agent profile.
- **$1.50 / 1,000 sold listings** — a `sold-properties` event per sold property on a full agent profile.

A listing-only run of 10 properties (the default `maxItems`) costs about **$0.05**. 1,000 search-card listings cost **$5.00**. Enriching those 1,000 listings with details and contact (when a phone is found) costs **$15.00** in event charges. Paid Apify plans discount the per-1,000 rates: Bronze **$4.90** (reviews and sold **$1.40**), Silver **$4.80** (**$1.30**), Gold and above **$4.70** (**$1.20**). Compute units and residential proxy traffic are billed on your Apify plan. When your event spending limit is reached, the run stops and the log shows "Spending limit reached".

### Reliability and responsible use

- **Proxy requirement** — The Actor defaults to the Apify proxy with the RESIDENTIAL group. realestate.com.au typically blocks datacenter IPs; Australian residential proxies are recommended.
- **Retries** — Failed items are skipped so one listing does not stop the run. Blocked sessions are retried with a new proxy session.
- **Conditional fields** — Description, gallery, inspections, `agentPhone`, listing-agent profile fields, reviews, and sold properties appear only when the matching toggle is enabled and the page has that data.
- **Public data** — The Actor collects publicly visible listing and agent information from realestate.com.au.
- **Responsible use** — Only use the data in ways that comply with realestate.com.au's terms of service and applicable law.

### Frequently asked questions

#### Can I scrape buy, rent, sold, and new-home listings from realestate.com.au?

Yes. Set `propertyChannel` to `buy`, `rent`, `sold`, or `new-homes` when you use `searchQueries`. If you paste `startUrls`, the Actor follows the channel already in the URL and ignores `propertyChannel`.

#### Can I schedule Realestate.com.au Scraper to run automatically?

Yes. Open the **Scheduler** tab in Apify Console and set a recurring schedule — daily for buy and rent stock, weekly for sold or new-home snapshots. Create a separate schedule per suburb in `searchQueries` if you want a dataset per location.

#### What counts as one result?

Each property record is one `property` event (**$5.00 per 1,000**). Optional `property-details`, `agent-contact`, and `agent-details` events are **$5.00 per 1,000** each and are charged only when that extra data is extracted. In Agents mode, each agent is one `agent` event (**$5.00 per 1,000**). Reviews and sold listings on a full profile are **$1.50 per 1,000** rows. A listing-only Properties run charges only `property` plus the Actor start event.

#### Why are some fields empty?

`description`, gallery, and inspections require **Extract listing details**. `agentPhone` requires **Extract agent contact** and a phone on the listing page. Agent reviews and sold-property rows require **Extract full agent profile**. realestate.com.au also leaves some fields unset, so a null value usually means the page has no data for it.

#### How do I avoid duplicate records?

Within one run, the Actor skips repeat `listingId` or `agentId` values while paginating. Across scheduled runs, results are appended. When merging datasets, keep only rows whose `listingId` (properties) or `agentId` (agents) is new. `maxItems` caps how many primary records one run returns (`0` means no cap).

#### Do I need a proxy?

Yes for reliable results. Keep the default Apify residential proxy enabled. Australian residential IPs work best. Empty datasets or repeated access-denied messages usually mean the proxy was off or not residential.

### Related Scraptivo automations

- **[Realtor Scraper](https://apify.com/scraptivo/realtor-scraper)** — Collect US property listings from Realtor.com.
- **[Trulia Scraper](https://apify.com/scraptivo/trulia-scraper)** — Collect US listings from Trulia.
- **[Funda.nl Scraper](https://apify.com/scraptivo/funda-nl-scraper)** — Collect Dutch buy and rent listings from Funda.
- **[Otodom Scraper](https://apify.com/scraptivo/otodom-scraper)** — Collect Polish property listings from Otodom.
- **[Apartments.com Scraper](https://apify.com/scraptivo/apartments-scraper)** — Collect US rental listings from Apartments.com.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

## `scrapeMode` (type: `string`):

Choose properties (buy/rent/sold/new homes) or real estate agents.

## `propertyChannel` (type: `string`):

Market used with search queries. Ignored for start URLs (those already include buy, rent, sold, or new homes) and when scraping agents.

## `searchQueries` (type: `array`):

Locations to search — e.g. "Sydney CBD, NSW", "Melbourne VIC", or "4000". Used when scrape mode is Properties.

## `startUrls` (type: `array`):

Paste search or listing URLs from realestate.com.au — e.g. https://www.realestate.com.au/buy/in-sydney+cbd,+nsw/list-1 or a /property-… listing page.

## `extractPropertyDetails` (type: `boolean`):

Open each listing page for the full description, gallery, inspections, and agency info. Charges property-details once per listing.

## `extractAgentDetails` (type: `boolean`):

Open each listing agent's profile for bio, ratings, and experience. Charges the same agent-details event used in Agents mode, once per agent profile.

## `extractAgentContact` (type: `boolean`):

Include agent and agency phone numbers from the listing page. Charges agent-contact once per listing when a phone number is found.

## `agentSearchQueries` (type: `array`):

Locations to find agents — e.g. "Sydney CBD, NSW". Used when scrape mode is Agents.

## `agentUrls` (type: `array`):

Paste find-agent search pages or agent profile URLs — e.g. https://www.realestate.com.au/find-agent/sydney-cbd-nsw or https://www.realestate.com.au/agent/emma-vadas-4016604.

## `extractAgentProfile` (type: `boolean`):

Open each agent profile for details, reviews, and sold properties. Charges agent-details once per profile, agent-reviews once per review, and sold-properties once per sold listing.

## `maxItems` (type: `integer`):

Maximum properties or agents to scrape (0 = unlimited).

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

Residential proxies are required for reliable access to realestate.com.au. Australian residential IPs work best.

## Actor input object example

```json
{
  "scrapeMode": "properties",
  "propertyChannel": "buy",
  "searchQueries": [
    "Sydney CBD, NSW"
  ],
  "startUrls": [
    {
      "url": "https://www.realestate.com.au/buy/in-sydney+cbd,+nsw/list-1"
    }
  ],
  "extractPropertyDetails": false,
  "extractAgentDetails": false,
  "extractAgentContact": false,
  "agentSearchQueries": [
    "Sydney CBD, NSW"
  ],
  "agentUrls": [
    {
      "url": "https://www.realestate.com.au/find-agent/sydney-cbd-nsw"
    }
  ],
  "extractAgentProfile": false,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset containing scraped properties and/or agents

## `runStats` (type: `string`):

Record counts and timestamps for this run

# 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 = {
    "scrapeMode": "properties",
    "propertyChannel": "buy",
    "searchQueries": [
        "Sydney CBD, NSW"
    ],
    "startUrls": [
        {
            "url": "https://www.realestate.com.au/buy/in-sydney+cbd,+nsw/list-1"
        }
    ],
    "extractPropertyDetails": false,
    "extractAgentDetails": false,
    "extractAgentContact": false,
    "agentSearchQueries": [
        "Sydney CBD, NSW"
    ],
    "agentUrls": [
        {
            "url": "https://www.realestate.com.au/find-agent/sydney-cbd-nsw"
        }
    ],
    "extractAgentProfile": false,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/realestate-com-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 = {
    "scrapeMode": "properties",
    "propertyChannel": "buy",
    "searchQueries": ["Sydney CBD, NSW"],
    "startUrls": [{ "url": "https://www.realestate.com.au/buy/in-sydney+cbd,+nsw/list-1" }],
    "extractPropertyDetails": False,
    "extractAgentDetails": False,
    "extractAgentContact": False,
    "agentSearchQueries": ["Sydney CBD, NSW"],
    "agentUrls": [{ "url": "https://www.realestate.com.au/find-agent/sydney-cbd-nsw" }],
    "extractAgentProfile": False,
    "maxItems": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/realestate-com-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 '{
  "scrapeMode": "properties",
  "propertyChannel": "buy",
  "searchQueries": [
    "Sydney CBD, NSW"
  ],
  "startUrls": [
    {
      "url": "https://www.realestate.com.au/buy/in-sydney+cbd,+nsw/list-1"
    }
  ],
  "extractPropertyDetails": false,
  "extractAgentDetails": false,
  "extractAgentContact": false,
  "agentSearchQueries": [
    "Sydney CBD, NSW"
  ],
  "agentUrls": [
    {
      "url": "https://www.realestate.com.au/find-agent/sydney-cbd-nsw"
    }
  ],
  "extractAgentProfile": false,
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/realestate-com-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/realestate-com-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/imNSqaIJr8buZkbYc/builds/iwhwVd6ywo6ce6HXa/openapi.json
