# Realestate Australia Scraper - Prices, Agents & History (`zyra/realestate-au-listings-scraper`) Actor

Every realestate.com.au property from any search URL: price or rent, beds, baths, parking, land and floor area, coordinates, agents, images, sales history and valuation estimates. 44 fields per listing, buy or rent.

- **URL**: https://apify.com/zyra/realestate-au-listings-scraper.md
- **Developed by:** [Zyra](https://apify.com/zyra) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 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.

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 Australia Scraper

**Every property on the search page — price, agent, land, history, coordinates.**

Search realestate.com.au the way you normally would. Filter by suburb, price,
bedrooms, property type, buy or rent. Paste the URL. Get every listing behind it
as structured data, 44 fields per property.

### Why this one

**Buy, rent and sold, from the same actor.** Whatever the search URL points at
is what you get — `listing_type` tells you which. No separate scraper per mode.

**Map-ready out of the box.** Every listing carries `lat` and `lon` alongside
suburb, state and postcode, so results drop straight into a map, a geo-join or a
catchment analysis without geocoding a single address.

**The agent comes with the property.** Names and profile links for the listing
agents, plus the agency branding — the lead data most property scrapers leave
behind.

**Sales history and valuation, not just the asking price.** Past sale dates and
agencies, plus the automated valuation estimate with its low/high range and a
confidence level, so you can see what a property is asking *and* what it is
reckoned to be worth.

### What you get

**The property** — full street address, suburb, state, postcode, property type,
house type, bedrooms, bathrooms, parking, land size and floor area (both as text
and as numbers), year built, availability and off-market status.

**The money** — asking or estimated price, rent price with currency and bond,
and the valuation estimate with its low, high and confidence.

**The location** — latitude and longitude, suburb, full suburb string, state and
postcode.

**The people** — listing agents with profile links, agency branding, and the
find-agents link.

**The history** — sales history, last sold date and agency, sold date, and the
date the listing was published.

**The media** — image URLs and a photo count.

### Sample output

One real row, abridged:

```json
{
  "street_address": "31F/2 Watermans Quay",
  "suburb": "Barangaroo",
  "state": "NSW",
  "postcode": "2000",
  "property_type": "Apartment",
  "bedrooms": "2",
  "bathrooms": "2",
  "floor_area": "106",
  "estimated_price": "Contact Agent",
  "listing_type": "Buy",
  "lat": -33.8631339,
  "lon": 151.20209675,
  "agents": [{ "name": "Victoria Wu", "link": "https://www.realestate.com.au/..." }],
  "url": "https://www.realestate.com.au/property-apartment-nsw-barangaroo-...",
  "discovery_input": { "url": "https://www.realestate.com.au/buy/in-sydney,+nsw/list-1" }
}
```

That row came from a live run — 31 of its 34 present fields were populated.
Export to JSON, CSV, Excel or XML, or pull it straight from the API.

Fields realestate.com.au does not publish for a property come back empty rather
than guessed at, and how completely a listing is filled in varies: agent details
and coordinates are near-universal, while valuation estimates and sales history
depend on the property.

### How it works

1. Search on realestate.com.au and copy the URL from your address bar.
2. Paste it into **realestate.com.au search URLs**. Add more URLs to run several
   searches at once.
3. Set a limit if you want one, and run it.

### Input

| Field | Required | What it does |
| --- | --- | --- |
| **realestate.com.au search URLs** | yes | One or more buy, rent or sold search URLs. Every property behind each one is collected. |
| **Max listings per URL** | no | Stop after this many properties from each search. **Prefilled at 10**, so a first run is a quick sample. Raise it up to 1,000, or clear the field to collect 1,000 per URL. |
| **Max listings in total** | no | Stop the whole run after this many properties, across all searches. Up to 10,000; empty means 10,000. |

Both limits are applied *during* collection rather than to the results
afterwards, so a limited run genuinely does less work and finishes sooner. Every
run is bounded, so a broad search can never run away with itself.

**Run it once to see the shape of the data, then open it up.** The prefilled 10
listings per URL keeps a first run quick and cheap.

### Built to be trusted with real work

**Stop a run at any time and keep what it found.** Aborting stops the collection
and delivers every property completed up to that moment. Nothing is abandoned
and nothing half-fetched is passed off as a result.

**You are never charged for a listing you did not receive.** Properties that
failed to fetch are reported separately and never reach your dataset.

**Runs are self-limiting.** Time budgets scale with the size of the request.

**Clean, stable output.** Field names come straight from the source schema and
are not renamed or reshaped between runs.

**No invented data.** A field the site does not publish comes back empty.
Nothing is inferred, averaged or filled in to make a row look complete.

### What people use it for

- **Investment screening** — filter by yield, land size, price and location
  across whole suburbs at once.
- **Comparable market analysis** — pull every comparable listing in a catchment
  with coordinates and sales history attached.
- **Agent and agency intelligence** — see who is listing what, where, and at
  what price point.
- **Market monitoring** — track stock levels, asking prices and days on market
  by suburb over time.
- **Lead generation** — find agents and agencies active in a target area.

### Free accounts

On a free Apify plan a run collects up to 10 property listings, whatever the
limits above say. Nothing beyond that is collected, so a capped run finishes
quickly. Upgrade to a paid plan and the limits above apply in full.

### Good to know

- A search URL is checked for shape, not for results. Whether a search returns
  any properties is not knowable until collection runs.
- Repeated search URLs are collected once, so a duplicate never costs twice.
- Collection takes a few minutes even for a small run — most of the time goes
  into working through the search itself, not into the individual properties.
- If a search cannot be crawled, it is reported in the log and counted in the
  run summary rather than silently dropped.

# Actor input Schema

## `searchUrls` (type: `array`):

One or more realestate.com.au search URLs — buy, rent or sold. Every property behind each URL is collected. Search on the site the way you normally would and paste the URL from your address bar; the filters already on it (suburb, price, beds, property type) are kept.

## `maxListingsPerUrl` (type: `integer`):

Stop after this many properties from each search URL. Prefilled at 10 so a first run is a quick sample; raise it for a full collection, up to 1,000. Clearing the field collects up to 1,000 per URL.

## `maxListingsTotal` (type: `integer`):

Stop the whole run after this many properties, across all search URLs together. Up to 10,000; empty means 10,000.

## Actor input object example

```json
{
  "searchUrls": [
    "https://www.realestate.com.au/buy/in-melbourne,+vic+3000/list-1"
  ],
  "maxListingsPerUrl": 10,
  "maxListingsTotal": 10000
}
```

# Actor output Schema

## `listings` (type: `string`):

Every property collected, one item per listing.

## `runSummary` (type: `string`):

What was requested, what arrived, and what was charged.

# 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 = {
    "searchUrls": [
        "https://www.realestate.com.au/buy/in-melbourne,+vic+3000/list-1"
    ],
    "maxListingsPerUrl": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("zyra/realestate-au-listings-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 = {
    "searchUrls": ["https://www.realestate.com.au/buy/in-melbourne,+vic+3000/list-1"],
    "maxListingsPerUrl": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("zyra/realestate-au-listings-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 '{
  "searchUrls": [
    "https://www.realestate.com.au/buy/in-melbourne,+vic+3000/list-1"
  ],
  "maxListingsPerUrl": 10
}' |
apify call zyra/realestate-au-listings-scraper --silent --output-dataset

```

## MCP server setup

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