# Property Com Au Scraper (`mrdoe/property-com-au-scraper`) Actor

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

## Pricing

from $1.50 / 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/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

![Property Com Au Scraper hero](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/property-com-au-scraper--hero.png)

### What does the property.com.au Property Data Scraper do?

The property.com.au Property Data Scraper extracts property research data from [property.com.au](https://www.property.com.au), Australia's third-largest property portal. Paste a suburb or state Buy, Rent, or Sold page (or a direct property profile URL) and the Actor returns clean, structured data for every property: full address, price or price guide, bedrooms, bathrooms, car spaces, land size, sold date, listing status, council area, school catchment, planning overlays, and the matching realestate.com.au listing link. Use it for suburb market analysis, sold-price research, and property due diligence.

The easiest way to try it: open the Actor, keep the pre-filled example Sold search URL, and click **Start**.

### Why use the property.com.au Property Data Scraper?

- **Sold-price research** — pull recently sold properties for a suburb with their sale dates in one table.
- **Property due diligence** — council area, school catchment, and bushfire / flood / heritage overlay flags per property.
- **Cross-referenced listings** — every record includes the matching realestate.com.au listing URL where one exists.
- **Clean, structured output** — numbers as numbers, missing values as `null`, no raw HTML.
- **Automatic pagination** — the Actor walks through every results page up to your limit.
- **No code and no maintenance** — runs on Apify's infrastructure with retries, scheduling, and integrations built in.

### What makes this different?

This Actor targets property.com.au specifically — a research portal, not a listings marketplace — so it surfaces data that listing scrapers miss: council area, school catchment zones, planning overlays, and sold dates for off-market properties. It uses Australian residential IP addresses by default, which is what it takes to load the site reliably.

### Pricing

This Actor uses pay-per-event pricing: a small fixed charge per run start, plus a per-property charge for each record returned. Exact rates are shown on the Actor's page in Apify Console.

### What data can you extract?

![Property Com Au Scraper dataset output](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/property-com-au-scraper--output.png)

![Property Com Au Scraper data fields](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/property-com-au-scraper--fields.png)

| Field                                | Description                                              |
| ------------------------------------ | -------------------------------------------------------- |
| `id`                                 | property.com.au property id                              |
| `url`                                | Property profile page URL                                |
| `channel`                            | `buy`, `rent`, or `sold` (from the search page)          |
| `status`                             | Listing status badge (e.g. "For sale", "Recently sold")  |
| `address`                            | Full property address                                    |
| `suburb`, `state`, `postcode`        | Address components                                       |
| `price`                              | Price, price guide, or "Contact agent" text              |
| `propertyType`                       | House, Apartment, Unit, Townhouse, etc.                  |
| `bedrooms`, `bathrooms`, `carSpaces` | Property features as numbers                             |
| `landSize`                           | Land area with unit, where available                     |
| `soldDate`                           | Sale date for sold properties (YYYY-MM-DD)               |
| `image`                              | Property photo URL                                       |
| `listingUrl`                         | Matching realestate.com.au listing URL, where one exists |
| `description`                        | The site's "About the property" summary                  |
| `councilArea`                        | Local government area                                    |
| `schoolCatchment`                    | Public school catchment zones                            |
| `overlays`                           | Detected planning overlays (bushfire, flood, heritage)   |
| `listingAgency`                      | Listing agency, for on-market properties                 |
| `listedDate`                         | Date the property was listed                             |
| `scrapedAt`                          | Timestamp the record was collected                       |

### How to use the property.com.au Property Data Scraper

![How Property Com Au Scraper works](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/property-com-au-scraper--how-it-works.png)

1. Open the Actor in Apify Console.
2. On property.com.au, open the suburb and channel you want — for example the Sold page for a suburb — and copy the URL from your browser's address bar. Or copy a single property profile URL.
3. Paste it into **Start URLs**. Add as many as you need.
4. Set **Max properties per start URL**.
5. Leave **Open each property page for extra details** on for council area, school catchment, and overlays, or turn it off for a faster summary-only run.
6. Click **Start**, then open the **Dataset** tab to view and export the results.

### Input parameters

| Parameter               | Type    | Required | Default                       | Description                                                                                                         |
| ----------------------- | ------- | -------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `startUrls`             | array   | Yes      | Example Bondi Beach Sold page | property.com.au suburb/state Buy, Rent, or Sold pages, or direct property profile URLs.                             |
| `maxItems`              | integer | No       | `5`                           | Maximum properties to collect per start URL. The Actor paginates until this is reached.                             |
| `scrapePropertyDetails` | boolean | No       | `true`                        | When on, opens each profile page for description, council area, school catchment, overlays, and listing agency.     |
| `useCache`              | boolean | No       | `false`                       | Reuse data collected for a property in an earlier run. Off by default so results are always fresh.                  |
| `proxyConfiguration`    | object  | No       | Australian residential        | Proxy settings. property.com.au blocks non-residential traffic, so Australian residential proxy is used by default. |

### Output data

Each property is one dataset item. Download as JSON, CSV, Excel, or XML from the Dataset tab or the API.

```json
{
    "id": "11546447",
    "url": "https://www.property.com.au/nsw/bondi-beach-2026/obrien-st/3-118-120-pid-11546447/",
    "channel": "sold",
    "status": "Recently sold",
    "address": "3/118-120 O'Brien Street, Bondi Beach, NSW 2026",
    "suburb": "Bondi Beach",
    "state": "NSW",
    "postcode": "2026",
    "price": "Contact agent",
    "propertyType": "Apartment",
    "bedrooms": 2,
    "bathrooms": 1,
    "carSpaces": 1,
    "landSize": null,
    "soldDate": "2026-08-27",
    "image": "https://i2.au.reastatic.net/1144x888/abc/image.jpg",
    "listingUrl": "https://www.realestate.com.au/sold/property-apartment-nsw-bondi+beach-151935584",
    "description": "3/118-120 O'Brien Street is a 2 bedroom, 1 bathroom apartment in Bondi Beach...",
    "councilArea": "Waverley",
    "schoolCatchment": ["Bondi Beach Public School", "Rose Bay Secondary College"],
    "overlays": [],
    "listingAgency": "Raine & Horne - Double Bay",
    "listedDate": null,
    "scrapedAt": "2026-08-31T00:00:00.000Z"
}
```

### Usage examples

**Recently sold properties in a suburb**

```json
{
    "startUrls": [{ "url": "https://www.property.com.au/nsw/bondi-beach-2026/sold/" }],
    "maxItems": 200
}
```

**Properties for sale across a whole state**

```json
{
    "startUrls": [{ "url": "https://www.property.com.au/act/buy/" }],
    "maxItems": 300
}
```

**A single property profile**

```json
{
    "startUrls": [{ "url": "https://www.property.com.au/nsw/bondi-beach-2026/glasgow-ave/2-4-pid-686312/" }]
}
```

### Tips for best results

- Use suburb-level pages (`/{state}/{suburb-postcode}/{channel}/`) rather than state-wide pages for faster, focused runs.
- Use the **Sold** channel for sale-price history research — each record carries the sale date.
- Turn off **Open each property page for extra details** when you only need address, price, and features across a large area — it is significantly faster.

### Known limitations

- property.com.au uses strict bot protection. The Actor gets through with Australian residential proxy and automatic retries, but a rare individual page may be skipped — re-run if a result set looks short.
- property.com.au is a research portal: many properties have no live listing, so `price`, `bedrooms`, and `listingUrl` can be `null`.
- The "About the property" summary is written as prose; `councilArea`, `schoolCatchment`, and `overlays` are a best-effort read of it and may be empty for some properties.
- Detailed historical sale-price and rent timelines shown on the site behind "View historical data" are not included.
- Pagination is limited to the number of result pages property.com.au exposes for a search.

### Integrations

Connect the Actor's output to Google Sheets, Make, Zapier, Slack, or your own systems via the Apify API and webhooks. Schedule runs to keep a dataset up to date.

### Export formats

JSON, CSV, Excel, and XML — from the Dataset tab in Apify Console or via the API.

### Frequently asked questions

#### How many properties can I collect?

As many as the search exposes. `maxItems` is applied per start URL, so add more start URLs to cover many suburbs in one run.

#### Can I use my own filters?

Yes. Any suburb or state Buy, Rent, or Sold URL from property.com.au works. Copy the URL after opening the page you want on the site.

#### Does it support individual property URLs?

Yes. Paste a property profile URL (one ending in `-pid-<number>/`) into **Start URLs**.

#### How are duplicates handled?

Each property is collected once per run, matched on its profile page URL.

#### Why are some fields null?

property.com.au does not publish every field for every property, and many properties are not currently listed for sale or rent. Missing values are returned as `null` rather than guessed.

#### How fresh is the data?

Each run collects live data from property.com.au at run time, unless **Use cache** is enabled.

#### Why did a run return few or no results?

property.com.au's bot protection is IP-sensitive and can occasionally block a run even with residential proxy. Re-run it, and keep searches narrow.

### Support

Found a bug or need a change? Open an issue on the Actor's **Issues** tab in Apify Console, or reach out via Apify Console messaging.

### Legal and responsible use

You are responsible for ensuring your use of this Actor and the collected data complies with property.com.au's Terms of Service, applicable laws, and any contractual obligations. This Actor can collect personal data such as listing agency names published on property pages; if you collect personal data you are responsible for handling it in line with applicable data-protection law, including the Australian Privacy Act and, where relevant, the GDPR.

### Preview

![Property Com Au Scraper input options](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/property-com-au-scraper--input.png)

# Actor input Schema

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

One or more property.com.au pages to scrape. Use a suburb or state Buy, Rent, or Sold page (for example https://www.property.com.au/nsw/bondi-beach-2026/sold/), or a direct property profile page URL. The Actor pages through search results automatically.

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

Maximum number of properties to collect for each start URL. Keep this low for quick test runs and raise it for full exports.

## `scrapePropertyDetails` (type: `boolean`):

When on, the Actor opens every property profile to collect the description summary, council area, school catchment, planning overlays, and listing agency. When off, it returns the faster summary data from the search results only.

## `useCache` (type: `boolean`):

Reuse data collected for a property in an earlier run to speed up recurring runs. Disabled by default so every run returns fresh data.

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

Proxy settings. property.com.au blocks traffic that is not routed through residential IP addresses, so Australian residential proxy is used by default and recommended.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.property.com.au/nsw/bondi-beach-2026/sold/"
    }
  ],
  "maxItems": 5,
  "scrapePropertyDetails": true,
  "useCache": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}
```

# Actor output Schema

## `listings` (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 = {
    "startUrls": [
        {
            "url": "https://www.property.com.au/nsw/bondi-beach-2026/sold/"
        }
    ],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AU"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/property-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 = {
    "startUrls": [{ "url": "https://www.property.com.au/nsw/bondi-beach-2026/sold/" }],
    "maxItems": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AU",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/property-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 '{
  "startUrls": [
    {
      "url": "https://www.property.com.au/nsw/bondi-beach-2026/sold/"
    }
  ],
  "maxItems": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  }
}' |
apify call mrdoe/property-com-au-scraper --silent --output-dataset

```

## MCP server setup

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