# realestate.com.au Scraper (`unfenced-group/realestate-au-scraper`) Actor

Scrape Australia's #1 property portal: 1.2M+ listings. Buy, rent & sold data with prices, addresses, beds/baths, photos & agency info. No proxy needed.

- **URL**: https://apify.com/unfenced-group/realestate-au-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** Real estate
- **Stats:** 4 total users, 3 monthly users, 96.6% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.68 / 1,000 results

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/platform/actors/running/actors-in-store#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

![realestate-au-scraper](https://api.apify.com/v2/key-value-stores/lJlifu6C8YQfZMPKE/records/realestate-au-scraper)

Extract property listings from **realestate.com.au** — Australia's largest real estate portal with over 1.2 million active listings. Scrape for-sale, rental, and recently-sold listings across all of Australia with prices, addresses, property features, photos, and agency information.

### Features

- **Full Australia coverage** — scrape any suburb, city, state, or all of Australia in a single run
- **Three listing types** — for sale (buy), for rent, and recently sold
- **Rich property data** — price, full address, bedrooms, bathrooms, parking, building size, land size
- **Media** — main photo and up to 20 listing images per property, floorplan URL
- **Agency & agent info** — agency name, agent names and profile photos
- **Inspection & auction times** — structured datetime data for open homes and auctions
- **Advanced filters** — property type, price range, bedrooms, bathrooms, keywords
- **Deduplication** — cross-location deduplication prevents duplicate results
- **Fast & efficient** — no browser or proxy required; runs at ~1,000 properties/minute

### Why this scraper?

#### 🎯 Purpose-built

A dedicated scraper for this portal, tuned to its locations, price formats and property types.

#### 💶 Structured pricing

Asking price or rent as a clean number. Price-on-request listings return `null`, never a guess.

#### 🏠 Property characteristics

Bedrooms, rooms, surface and property type in structured fields, ready for filtering and analysis.

***

### Input Parameters

| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `location` | String | Suburb, city, state, or `Australia` for nationwide scrape | `Australia` |
| `transaction` | Select | `buy`, `rent`, or `sold` | `buy` |
| `propertyTypes` | Array | Filter by type: `house`, `unit apartment`, `townhouse`, `villa`, `land`, `acreage` | All |
| `minPrice` | Integer | Minimum price in AUD (0 = disabled) | `0` |
| `maxPrice` | Integer | Maximum price in AUD (0 = disabled) | `0` |
| `minBedrooms` | Integer | Minimum bedrooms (0 = disabled) | `0` |
| `maxBedrooms` | Integer | Maximum bedrooms (0 = disabled) | `0` |
| `minBathrooms` | Integer | Minimum bathrooms (0 = disabled) | `0` |
| `surroundingSuburbs` | Boolean | Include listings from surrounding suburbs | `true` |
| `searchQuery` | String | Keyword search within listing descriptions | \`\` |
| `maxItems` | Integer | Maximum listings to return (0 = unlimited) | `100` |
| `startUrls` | Array | Specific realestate.com.au search URLs to scrape | `[]` |

### Output Fields

Each result contains:

| Field | Type | Description |
|-------|------|-------------|
| `id` | String | Unique REA listing ID |
| `url` | String | Full listing URL |
| `transaction` | String | `buy`, `rent`, or `sold` |
| `shortAddress` | String | Street address |
| `fullAddress` | String | Complete address including suburb |
| `suburb` | String | Suburb name |
| `state` | String | State code (NSW, VIC, QLD, etc.) |
| `postcode` | String | Postcode |
| `propertyType` | String | House, Unit, Townhouse, etc. |
| `price` | String | Price display text |
| `bedrooms` | Integer | Number of bedrooms |
| `bathrooms` | Integer | Number of bathrooms |
| `parkingSpaces` | Integer | Number of parking spaces |
| `buildingSize` | String | Floor area |
| `landSize` | String | Land area |
| `mainImage` | String | Primary photo URL |
| `images` | Array | Up to 20 photo URLs |
| `floorplan` | String | Floorplan image URL |
| `agencyName` | String | Real estate agency name |
| `agents` | Array | Agent names and profile photo URLs |
| `auctionDate` | String | Auction datetime (if applicable) |
| `dateSold` | String | Sale date display (sold listings) |
| `inspections` | Array | Open for inspection times |
| `badge` | String | Listing badge (New, Under offer, etc.) |
| `description` | String | Full property description |
| `descriptionMarkdown` | string | Full description converted to Markdown. |
| `scrapedAt` | String | ISO timestamp of extraction |

#### Example record

```json
{
  "id": "151669400",
  "url": "https://www.realestate.com.au/property-house-qld-highfields-151669400",
  "slug": "property-house-qld-highfields-151669400",
  "transaction": "buy",
  "listingType": "BuyResidentialListing",
  "productDepth": "standard",
  "shortAddress": "Highfields Qld 4352",
  "fullAddress": "Highfields Qld 4352",
  "addressWithheld": true,
  "suburb": "Highfields",
  "state": "Qld",
  "postcode": "4352",
  "propertyType": "House",
  "propertyTypeId": "house",
  "price": "From $827,904",
  "priceDisclaimer": null,
  "bedrooms": 4,
  "bathrooms": 2,
  "parkingSpaces": 2,
  "buildingSize": "185",
  "buildingSizeUnit": "m²",
  "landSize": "509",
  "landSizeUnit": "m²",
  "preferredSize": "509",
  "preferredSizeUnit": "m²",
  "preferredSizeType": "LAND",
  "mainImage": "https://i2.au.reastatic.net/800x600-resize/17d94aa2db642f059b2cb137585279666889e4c531aa5f90a955afc699780ba8/image.png",
  "images": [
    "https://i2.au.reastatic.net/800x600-resize/17d94aa2db642f059b2cb137585279666889e4c531aa5f90a955afc699780ba8/image.png",
    "https://i2.au.reastatic.net/800x600-resize/40b2499c92640c5699def84e694493201688deb471033f13bcfc7e7fa0bfea4b/image.png",
    "https://i2.au.reastatic.net/800x600-resize/aecbce4dadb6497430237e38a84e082246eda8a50ce5db38b4fcdefdf6bc2383/image.jpg",
    "https://i2.au.reastatic.net/800x600-resize/d19073d334ffbc1ef23a100f402ae927393dad70e88c0141606877d80631e4ad/image.jpg"
  ],
  "imageCount": 10,
  "floorplans": [],
  "videos": [],
  "virtualTours": [],
  "statementOfInformation": null,
  "agencyId": "HKOJES",
  "agencyName": "Chinoz Real Estate",
  "agencyPhone": "0438947930",
  "agency": {
    "id": "HKOJES",
    "name": "Chinoz Real Estate",
    "phone": "0438947930",
    "address": null,
    "profileUrl": "https://www.realestate.com.au/agency/chinoz-real-estate-HKOJES",
    "logo": "https://i2.au.reastatic.net/200x80-resize/aa6c312762e2f576c0849ba15f8ea4ff662e27b6b67313290922175a7af773e4/logo.jpg",
    "primaryColour": "#fefefe",
    "textColour": "#000000"
  },
  "bond": null,
  "availableDate": null,
  "auctionDate": null,
  "auctionDisplay": null,
  "auctionOnlineUrl": null,
  "dateSold": null,
  "inspections": [],
  "description": "House & Land Package – Full Turnkey - Highfields<br/><br/>Discover an outstanding opportunity to secure a brand-new, ful …",
  "descriptionMarkdown": "House & Land Package – Full Turnkey - Highfields  \n  \nDiscover an outstanding opportunity to secure a brand-new, full tu …",
  "badge": "Added 3 hours ago",
  "badgeColour": "#00BEB3",
  "searchLocation": "Toowoomba QLD",
  "scrapedAt": "2026-07-02T15:19:54.346Z"
}
```

### Example Output

```json
{
  "id": "151060696",
  "url": "https://www.realestate.com.au/property-apartment-nsw-sydney-151060696",
  "transaction": "buy",
  "shortAddress": "2702/1 Macquarie Place",
  "fullAddress": "2702/1 Macquarie Place, Sydney NSW 2000",
  "suburb": "Sydney",
  "state": "NSW",
  "postcode": "2000",
  "propertyType": "Apartment",
  "price": "$1,850,000",
  "bedrooms": 2,
  "bathrooms": 2,
  "parkingSpaces": 1,
  "buildingSize": "105",
  "landSize": null,
  "mainImage": "https://bucket-2.zobj.net/...jpg",
  "images": ["https://i2.au.reastatic.net/example.jpg", "https://i2.au.reastatic.net/example.jpg"],
  "agencyName": "Knight Frank Residential",
  "agents": [{"name": "Emma Vadas", "photo": null, "profileUrl": "https://www.realestate.com.au/agent/emma-vadas"}],
  "auctionDate": null,
  "inspections": [{"display": "Sat 3 May 12:00pm - 12:30pm"}],
  "description": "Set in the heart of Sydney's CBD...",
  "scrapedAt": "2026-04-30T10:00:00.000Z"
}
```

### Usage Examples

**All houses for sale in Sydney:**

```json
{ "location": "Sydney NSW", "transaction": "buy", "propertyTypes": ["house"] }
```

**Rental apartments in Melbourne under $700/week:**

```json
{ "location": "Melbourne VIC", "transaction": "rent", "propertyTypes": ["unit apartment"], "maxPrice": 700 }
```

**Recently sold 3+ bedroom homes in Brisbane:**

```json
{ "location": "Brisbane QLD", "transaction": "sold", "minBedrooms": 3, "propertyTypes": ["house"] }
```

**Nationwide for-sale listings:**

```json
{ "location": "Australia", "transaction": "buy", "maxItems": 5000 }
```

**From a specific search URL:**

```json
{ "startUrls": [{ "url": "https://www.realestate.com.au/buy/in-bondi-beach,-nsw/list-1" }] }
```

### Pricing

**$0.85 per 1,000 results.** A full nationwide scrape of all for-sale listings (~500,000 properties) costs approximately $0.43.

### Performance

- Speed: ~1,000 results/minute
- Memory: 512 MB
- No proxy required

***

### Run it on a schedule

This actor is built for repeat use. Set it to run daily, weekly, or hourly, and the data keeps flowing without you touching it.

- **Schedule runs** — open the actor, go to Schedules, and pick a cadence. Each run only charges you for the results it returns.
- **Connect it to your stack** — push results straight to Google Sheets, Slack, a webhook, or your database using Apify Integrations. No glue code needed.
- **Pull results via API** — every run writes a clean dataset you can fetch with one API call, ready for whatever you build on top of it.

Set it once and it runs on its own.

***

### Known limitations

- Some fields (surface, year built, energy label) are only returned when the lister publishes them — expect `null` on a share of records.
- Listing photos and agent details vary per listing; the scraper returns what the source publishes and never invents data.
- Very large result sets are bounded by the source's own paging limits.
- Listings can be withdrawn at any time, so a small share of URLs may expire shortly after scraping.

***

### Technical details

- **Coverage:** everything the public search exposes, filterable via the input parameters above
- **Retry:** automatic retry on network errors with exponential backoff
- **Formats:** results export to JSON, CSV and Excel from the dataset

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

## `transaction` (type: `string`):

Type of listings to scrape.

## `location` (type: `string`):

Suburb, city, region or 'Australia' for nationwide. Examples: Sydney NSW, Melbourne VIC 3000, Brisbane QLD, Australia

## `minPrice` (type: `integer`):

Minimum price filter. Set to 0 to disable.

## `maxPrice` (type: `integer`):

Maximum price filter. Set to 0 to disable.

## `minBedrooms` (type: `integer`):

Minimum number of bedrooms. Set to 0 to disable.

## `maxBedrooms` (type: `integer`):

Maximum number of bedrooms. Set to 0 to disable.

## `minBathrooms` (type: `integer`):

Minimum number of bathrooms. Set to 0 to disable.

## `daysOld` (type: `integer`):

Only return listings published within the last N days. Leave empty for no recency filter.

## `fetchDetails` (type: `boolean`):

If true, opens each listing detail page to extract additional fields (description, floor plan, agent contact). Increases run time and cost.

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

Maximum number of listings to return. Set to 0 for unlimited.

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

Optional: provide specific realestate.com.au search URLs to scrape instead of using the filters above.

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

Filter by property type. Leave empty for all types. Options: house, unit apartment, townhouse, villa, land, acreage, retire, unitblock

## `surroundingSuburbs` (type: `boolean`):

Also return listings from suburbs surrounding the specified location.

## `searchQuery` (type: `string`):

Optional keyword filter applied to listing descriptions. Examples: pool, waterfront, renovated

## Actor input object example

```json
{
  "transaction": "sale",
  "location": "Australia",
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "maxBedrooms": 0,
  "minBathrooms": 0,
  "fetchDetails": false,
  "maxItems": 100,
  "startUrls": [],
  "propertyTypes": [],
  "surroundingSuburbs": true,
  "searchQuery": "developer"
}
```

# Actor output Schema

## `results` (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 = {
    "maxItems": 100,
    "searchQuery": "developer"
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/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 = {
    "maxItems": 100,
    "searchQuery": "developer",
}

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

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 100,
  "searchQuery": "developer"
}' |
apify call unfenced-group/realestate-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/realestate-au-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/UU4EN2LR4ahDDyi7L/builds/2U7nEKHezeqhLa5NT/openapi.json
