# Domain.com.au Scraper - Australia Real Estate Listings (`igolaizola/domain-au-scraper`) Actor

Domain.com.au property scraper for Australian sale, rental, sold, and new-home listings. Filter by location, price, rooms, property type, features, inspections, and keywords, then export data as JSON, CSV, or Excel. Connect through the API or MCP for market research, lead generation, and automation.

- **URL**: https://apify.com/igolaizola/domain-au-scraper.md
- **Developed by:** [Iñigo Garcia Olaizola](https://apify.com/igolaizola) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

## Domain.com.au Scraper - Australia Real Estate Listings

Find Australian homes and property listings on Domain.com.au for market research, lead generation, investment analysis, relocation, and competitive intelligence. Search by suburb, postcode, region, or map area, then refine results by price, rooms, property type, features, inspections, and keywords.

### 🤖 What does Domain.com.au Scraper do?

This Domain.com.au scraper collects Australian real estate listings for sale, rent, sold properties, share accommodation, and new homes. Each result includes the listing URL, price information, address, rooms, property type, media, agency data, and available inspection information.

- 🏠 **For-sale listings** — compare homes, apartments, land, townhouses, and other property types.
- 🏘️ **Rental listings** — monitor weekly rental prices, availability, features, and inspections.
- 📉 **Sold listings** — research recent comparable sales by location and date range.
- 🏗️ **New homes** — find new developments and receive individual child listings with their parent project context.
- 📍 **Location search** — search suburbs, regions, postcodes, schools, projects, or a coordinate radius.
- 🎯 **Detailed filters** — narrow results by price, bedrooms, bathrooms, parking, land area, property age, features, and keywords.

**Great for:** property market research, investment analysis, rental monitoring, agency prospecting, relocation planning, and real estate data products.

> SEO keywords: **Domain.com.au scraper**, **Australia real estate scraper**, **Australian property listings**, **Domain API alternative**, **property data extractor**, **Apify actor**.

### 💡 Why scrape Domain.com.au?

- 📈 **Track market prices** — compare sale and rental supply across suburbs, regions, and postcodes.
- 🔎 **Find investment opportunities** — combine price, rooms, property type, land size, and features.
- 🎯 **Build property lead lists** — identify relevant listings and agencies for your workflow.
- 🏘️ **Monitor rental markets** — follow weekly prices, furnished homes, inspections, and availability.
- 📊 **Create reports and dashboards** — download results as JSON, CSV, or Excel for analysis.

### 🧠 Search modes

Choose the search purpose that matches the market you want to study:

- **For sale** — current properties advertised for purchase.
- **For rent** — current rental properties, including weekly price filters.
- **Recently sold** — completed sales with optional date ranges.
- **New homes** — new developments and their available child listings.
- **Share accommodation** — listings advertised for shared living.

### 🚀 How to use

1. Open **Domain.com.au Scraper - Australia Real Estate Listings** in Apify.
2. Set `location` to a suburb, postcode, or region. The default is `Sydney City`.
3. Choose `operation`, set `maxItems`, and add any price, room, property, or feature filters.
4. Click **Run** or start the actor through the Apify API, SDK, or MCP.
5. Download the completed dataset as JSON, CSV, or Excel.

#### Apify API example

```bash
curl -X POST "https://api.apify.com/v2/acts/igolaizola~domain-au-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "maxItems": 25,
    "location": "Sydney City",
    "operation": "buy",
    "minBedrooms": 2,
    "propertyTypes": ["house", "townhouse"]
  }'
```

### 💳 Pricing

Apify's **Free plan** includes monthly credits for small tests. For larger property datasets, use a Personal or Business plan with more usage and concurrency.

### 📝 Input parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `maxItems` | Integer | Yes | Maximum listings to save. Use `0` for all available results. Default: `10`. |
| `fetchDetails` | Boolean | No | Enrich each listing with additional property information when available. Default: `false`. |
| `sort` | Enum | No | Result order: `featured` · `newest` · `lowestPrice` · `highestPrice` · `earliestInspection` · `suburb`. |
| `location` | Text | No | One Australian suburb, postcode, region, school, or project. Default: `Sydney City`. |
| `locations` | String list | No | Additional suburbs, postcodes, regions, schools, or projects to search together. |
| `locationType` | Enum | No | Match the location as `any` · `suburb` · `region` · `area` · `school` · `project` · `postcode`. |
| `latitude` | Number | No | Latitude for a radius search. Use with `longitude` and `radiusKm`. |
| `longitude` | Number | No | Longitude for a radius search. Use with `latitude` and `radiusKm`. |
| `radiusKm` | Integer | No | Radius in kilometres around the supplied coordinates. |
| `operation` | Enum | No | Search purpose: `buy` · `newdev` · `rent` · `share` · `sold`. Default: `buy`. |
| `minPrice` | Integer | No | Minimum price in Australian dollars. For rentals, use the weekly price. |
| `maxPrice` | Integer | No | Maximum price in Australian dollars. For rentals, use the weekly price. |
| `minBedrooms` | Integer | No | Minimum number of bedrooms. |
| `maxBedrooms` | Integer | No | Maximum number of bedrooms. |
| `minBathrooms` | Integer | No | Minimum number of bathrooms. |
| `maxBathrooms` | Integer | No | Maximum number of bathrooms. |
| `minCarspaces` | Integer | No | Minimum number of car spaces. |
| `maxCarspaces` | Integer | No | Maximum number of car spaces. |
| `minLandArea` | Integer | No | Minimum land area in the selected `landAreaUnit`. |
| `maxLandArea` | Integer | No | Maximum land area in the selected `landAreaUnit`. |
| `landAreaUnit` | Enum | No | Land area unit: `square-meters` · `acres` · `hectares`. Default: `square-meters`. |
| `propertyTypes` | Enum list | No | Include `house` · `apartment` · `townhouse` · `land` · `rural` · `new-home-designs` · `new-house-and-land` · `new-apartments-off-plan` · `retirement` · `new-land` · `development-site` · `vacant-land`. |
| `features` | Enum list | No | Require `pets-allowed` · `built-in-wardrobes` · `gas` · `garden-courtyard` · `balcony-deck` · `internal-laundry` · `study` · `swimming-pool` · `air-conditioning` · `dishwasher` · `furnished`. |
| `propertyEstablished` | Enum | No | Property age: `any` · `new` · `established`. Default: `any`. |
| `keywords` | String list | No | Words or phrases to match, such as `waterfront`, `views`, or a street name. |
| `includeSurroundingSuburbs` | Boolean | No | Include nearby suburbs with the selected location. Default: `false`. |
| `excludeUnderOffer` | Boolean | No | Exclude properties already under offer. Default: `false`. |
| `excludeDepositTaken` | Boolean | No | Exclude rental listings with a deposit taken. Default: `false`. |
| `showPriceWithheldProperties` | Boolean | No | Include listings without a displayed price. Default: `false`. |
| `soldDateRange` | Enum | No | Sold period: `all` · `lastWeek` · `lastFortnight` · `lastMonth` · `lastThreeMonths` · `lastSixMonths` · `lastYear` · `lastTwoYears`. |
| `auctionSchedule` | Enum | No | Find auctions scheduled for `today` · `thisWeekend` · `nextWeekend` · `next7Days`. |
| `inspectionSchedule` | Enum | No | Find inspections scheduled for `today` · `thisWeekend` · `nextWeekend` · `next7Days`. |
| `listedSince` | Date | No | Earliest listing date in `YYYY-MM-DD` format. |

When both `location` and `locations` are provided, the actor searches the combined list without duplicate names. If no location is supplied, `Sydney City` is used.

For a coordinate search, provide `latitude`, `longitude`, and a positive `radiusKm`. The coordinate search takes precedence over text locations when all three values are valid.

### 🧪 Example inputs

#### Sale search in Sydney

```json
{
  "maxItems": 25,
  "location": "Sydney City",
  "operation": "buy",
  "minPrice": 600000,
  "maxPrice": 1200000,
  "minBedrooms": 2,
  "maxBedrooms": 4,
  "propertyTypes": ["house", "townhouse"],
  "features": ["air-conditioning", "pets-allowed"],
  "sort": "lowestPrice"
}
```

#### Rental search across Melbourne suburbs

```json
{
  "maxItems": 50,
  "locations": ["Melbourne", "Richmond", "South Yarra"],
  "operation": "rent",
  "minPrice": 400,
  "maxPrice": 900,
  "minBedrooms": 1,
  "maxBedrooms": 3,
  "propertyTypes": ["apartment"],
  "features": ["furnished"],
  "inspectionSchedule": "next7Days",
  "fetchDetails": true
}
```

#### Coordinate radius search

```json
{
  "maxItems": 25,
  "latitude": -33.8688,
  "longitude": 151.2093,
  "radiusKm": 10,
  "operation": "buy",
  "minBedrooms": 2,
  "sort": "newest"
}
```

### 📊 Output and results

Each saved item represents an individual property listing. Development projects with child listings are returned as individual child properties, with the parent project context kept in a separate `project` field. Projects without a child property are skipped because they do not identify an individual listing.

#### Field reference

- **`url`** *(string)* — Canonical Domain.com.au listing URL.
- **`media`** *(object)* — Available listing photos and other media entries.
- **`displayableAddress`** *(object)* — Display address, state, postcode, and coordinates.
- **`priceDetails`** *(object)* — Formatted `displayPrice` plus numeric `parsedValue` when a price can be read. For a price range, `parsedValue` uses the first displayed amount.
- **`bedrooms`**, **`bathrooms`**, **`carspaces`** *(number)* — Main property features.
- **`propertyType`** *(string)* — Domain property type.
- **`landArea`** *(object)* — Land size and its unit when supplied.
- **`agency`** *(object)* — Agency name, profile, branding, and available contacts.
- **`propertyLabels`** *(array)* — Listing status and labels.
- **`inspectionDetails`** *(object)* — Inspection times when supplied.
- **`project`** *(object, conditional)* — Parent development context for a child listing.
- **`_details`** *(object, conditional)* — Additional property information when `fetchDetails` is enabled and available, including headline, description, date listed, agency, agents, and media.

#### Example result

```json
{
  "id": "2021172551",
  "url": "https://domain.com.au/2021172551",
  "priceDetails": {
    "displayPrice": "$915,000",
    "parsedValue": 915000
  },
  "bedrooms": 2,
  "bathrooms": 2,
  "carspaces": 1,
  "propertyType": "ApartmentUnitFlat",
  "displayableAddress": {
    "displayAddress": "1908/101 Bathurst Street, Sydney",
    "state": "NSW",
    "postcode": "2000",
    "geolocation": {
      "latitude": -33.8688,
      "longitude": 151.2093
    }
  },
  "media": [
    {"type": "photo", "url": "https://rimh2.domainstatic.com.au/example"}
  ],
  "agency": {
    "agencyId": 6877,
    "name": "Sydney Cove Property",
    "contacts": [{"name": "Example contact"}]
  },
  "_details": {
    "headline": "Light-filled apartment in central Sydney",
    "description": "A well-presented apartment close to transport, dining, and parks.",
    "dateListedV2": {"isoDateWithTimeZone": "2026-09-17T08:21:18+10:00"}
  }
}
```

The Apify dataset Overview focuses on the most useful listing fields: price, rooms, property type, address, media, agency, inspections, and optional details. The full record, including project context, remains available in the dataset.

### 🧭 Tips and common recipes

- **Start small:** Use `maxItems: 10` or `25` while tuning a search.
- **Search a market:** Use `locations` for several suburbs in one run.
- **Compare sold prices:** Set `operation: "sold"` with `soldDateRange`.
- **Find fresh opportunities:** Use `sort: "newest"` and `listedSince`.
- **Find open homes:** Use `inspectionSchedule` to focus on upcoming inspections.
- **Target a property type:** Combine `propertyTypes`, price, and room filters.
- **Get descriptions:** Set `fetchDetails: true` when you need headlines and listing descriptions.
- **Collect everything:** Set `maxItems: 0` to continue through all available results, subject to your account limits.

### ⚙️ Best practices

- Begin with one location and a modest `maxItems` value before searching multiple suburbs.
- Use `locationType` when a place name could refer to more than one kind of location.
- Rental prices are normally weekly amounts; interpret `minPrice` and `maxPrice` accordingly.
- Price-withheld listings do not have a numeric `parsedValue`.
- Detail enrichment adds extra work per listing, so enable `fetchDetails` only when the additional information is useful.
- Treat agency contacts and other personal information responsibly and store downloaded data securely.

### ⚖️ Legal and ethical considerations

- Respect Domain.com.au's Terms of Service and applicable usage restrictions.
- Use reasonable request volumes and avoid disrupting the service.
- Handle agency and contact information responsibly, especially when building lead lists.
- Follow Australian privacy, copyright, and data-protection laws for your use case.
- Secure downloaded datasets and delete information you no longer need.

This Actor is an independent tool and is **not** affiliated with, endorsed by, or sponsored by Domain Holdings Australia Limited. Domain.com.au and related trademarks belong to their respective owners.

### ❓ FAQ

**What location is used by default?**

The default location is `Sydney City`. You can replace it with a suburb, postcode, region, or a list of locations.

**Can I search sales, rentals, and sold properties?**

Yes. Choose `buy`, `rent`, `sold`, `newdev`, or `share` with the `operation` input.

**What does `maxItems: 0` mean?**

It means the actor continues through all available results, subject to any account or run limits.

**Are descriptions included by default?**

No. Set `fetchDetails` to `true` when you want additional fields such as the headline, description, date listed, agents, and expanded media.

**Can I search around a point on a map?**

Yes. Provide `latitude`, `longitude`, and a positive `radiusKm`. The coordinate search takes priority over text locations.

**Which export formats are available?**

Apify datasets can be downloaded as JSON, CSV, and Excel, and can be connected to workflows through the Apify API or MCP.

### 🛟 Support

Need a custom field, filter, or export workflow?

Open an issue or contact [igolaizola.com](https://igolaizola.com/#contact).

# Actor input Schema

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

Maximum number of listings to save. Use 0 for all available results.

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

Enrich each saved listing with additional property information when available.

## `sort` (type: `string`):

Order in which listings are returned.

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

One Australian suburb, postcode, region, school, or project.

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

Several Australian suburbs, postcodes, regions, schools, or projects searched together.

## `locationType` (type: `string`):

Optional category used to match the location text.

## `latitude` (type: `number`):

Latitude for a radius search. Use with longitude and radiusKm.

## `longitude` (type: `number`):

Longitude for a radius search. Use with latitude and radiusKm.

## `radiusKm` (type: `integer`):

Radius in kilometres around the supplied coordinates.

## `operation` (type: `string`):

Which kind of property listing to find.

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

Minimum price in Australian dollars; weekly price for rentals.

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

Maximum price in Australian dollars; weekly price for rentals.

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

Minimum number of bedrooms.

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

Maximum number of bedrooms.

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

Minimum number of bathrooms.

## `maxBathrooms` (type: `integer`):

Maximum number of bathrooms.

## `minCarspaces` (type: `integer`):

Minimum number of car spaces.

## `maxCarspaces` (type: `integer`):

Maximum number of car spaces.

## `minLandArea` (type: `integer`):

Minimum land area in the selected unit.

## `maxLandArea` (type: `integer`):

Maximum land area in the selected unit.

## `landAreaUnit` (type: `string`):

Unit used for minimum and maximum land area.

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

Property types to include. Leave empty for all types.

## `features` (type: `array`):

Features that listings should have.

## `propertyEstablished` (type: `string`):

Limit results to new or established properties.

## `keywords` (type: `array`):

Optional words or phrases to match in listings.

## `includeSurroundingSuburbs` (type: `boolean`):

Include nearby suburbs with the selected location.

## `excludeUnderOffer` (type: `boolean`):

Do not include properties already under offer.

## `excludeDepositTaken` (type: `boolean`):

Do not include rental listings with a deposit taken.

## `showPriceWithheldProperties` (type: `boolean`):

Include listings that do not display a price.

## `soldDateRange` (type: `string`):

Limit sold listings to a recent period.

## `auctionSchedule` (type: `string`):

Show listings with an auction in this period.

## `inspectionSchedule` (type: `string`):

Show listings with an inspection in this period.

## `listedSince` (type: `string`):

Earliest listing date, in YYYY-MM-DD format.

## Actor input object example

```json
{
  "maxItems": 10,
  "fetchDetails": false,
  "location": "Sydney City",
  "latitude": 0,
  "longitude": 0,
  "radiusKm": 0,
  "operation": "buy",
  "minPrice": 0,
  "maxPrice": 0,
  "minBedrooms": 0,
  "maxBedrooms": 0,
  "minBathrooms": 0,
  "maxBathrooms": 0,
  "minCarspaces": 0,
  "maxCarspaces": 0,
  "minLandArea": 0,
  "maxLandArea": 0,
  "landAreaUnit": "square-meters",
  "propertyEstablished": "any",
  "includeSurroundingSuburbs": false,
  "excludeUnderOffer": false,
  "excludeDepositTaken": false,
  "showPriceWithheldProperties": false,
  "soldDateRange": "all"
}
```

# 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 = {
    "location": "Sydney City"
};

// Run the Actor and wait for it to finish
const run = await client.actor("igolaizola/domain-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 = { "location": "Sydney City" }

# Run the Actor and wait for it to finish
run = client.actor("igolaizola/domain-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 '{
  "location": "Sydney City"
}' |
apify call igolaizola/domain-au-scraper --silent --output-dataset

```

## MCP server setup

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