# realestate.com.au Scraper: Buy, Rent, Sold Prices (`automation_craft/realestate-com-au-scraper`) Actor

Scrape realestate.com.au buy, rent and sold listings by suburb, postcode, region, link, map area or address, past the 2,000 row limit, no login. Each gives asking price, weekly rent, sold price and date, bedrooms, parking, land size, agency and inspection days. JSON, CSV, Excel; pay per listing.

- **URL**: https://apify.com/automation_craft/realestate-com-au-scraper.md
- **Developed by:** [Automation Craft](https://apify.com/automation_craft) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.47 / 1,000 homes

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

### realestate.com.au Scraper: Buy, Rent, Sold Prices

**realestate.com.au scraper and API** for Australian homes for sale, for rent and recently sold: search any suburb, postcode, state or region, paste a realestate.com.au search link, draw a map area, or look up listings by link, id or street address. Every listing comes with its price as shown and as a number, rent and bond, sold price and date, full address, map position, property type, beds, baths, parking, land and building size, photos, floor plans and videos, inspection and auction days, listing tier, and the agency and agents. Turn on **Home details** for the full record (description, feature list, every inspection time, the auction time, the statement of information, agency phone and address, nearby schools) and **Property history** for the address's dated sales and leases, the estimated value and rent, and the suburb's median prices.

No login, no cookies and no browser: the Actor reads realestate.com.au's own app data service, 200 listings a request, and reads on past the 2,000 listings the site shows for one search. Only the Property history add-on reads a public web page, through Apify's unblocker proxy.

#### What you can do with it

- Build sold comparables: every sale in a suburb or postcode with its sold price, sold date, beds, baths and land size, read past the 2,000 row limit.
- Pull every listing for sale or rent in a region into a sheet with prices, agencies and inspection days, for deal sourcing and lead lists.
- Track rents and yields: weekly rents by suburb, next to the estimated rent and value of each address (Property history).
- Enrich a list of listing links or addresses with the full record, the nearest schools and the property's sale history.
- Get a free market summary per search and an HTML market report per run (median, quartiles and 90th percentile of the prices delivered, property type mix, top suburbs).

### How to use the realestate.com.au Scraper

1. Open the Actor and type a place in **Places**, for example `Richmond, VIC 3121`, `3121`, `VIC` or `Inner East Melbourne, VIC`, or paste a realestate.com.au search link into **realestate.com.au search links**.
2. Pick the **Channel** (buy, rent, sold or all three) and any filters (price, beds, baths, parking, property types, land size, keywords, features, sold dates, auction or inspection day).
3. Set **Maximum listings in the run** and turn on **Home details** or **Property history** if you need them.
4. Click **Start**. Download the listings as JSON, CSV or Excel, or read them through the Apify API. The HTML market report is in the run's key-value store as `OUTPUT_REPORT.html`.

### What data you get

One row per listing (`type: "home"`), one coverage row per search (`type: "search"`), free status rows for anything not delivered, and one summary row per run.

| Field | What it holds | Filled (buy / rent / sold) |
|---|---|---|
| `id`, `url`, `channel`, `status` | listing id, link, buy, rent or sold, and the status realestate.com.au labels (for sale, under offer, under contract, for rent, deposit taken, sold) | 100% |
| `priceText` | the price exactly as the listing shows it | 98% / 100% / 100% |
| `price`, `priceFrom`, `priceTo` | the asking price as a number, or the range (only when the text holds one amount or one range) | 70% buy |
| `rentPerWeek` (and `rentPerWeekFrom`, `rentPerWeekTo`), `availableDate` | weekly rent (or its range), available date (`now` or a day) | 100% rent |
| `bond` | the bond, when the listing's label shows it | rare: 1 of 32 rentals read with Home details |
| `soldPrice`, `soldDate` | sold price (when shown) and sold day | 79% / 100% sold |
| `address` (`full`, `street`, `suburb`, `state`, `postcode`, `hidden`) | the address; `hidden` when the agent hides the street | 93% / 99% / 99% street |
| `latitude`, `longitude`, `coordinatesFrom` | map position from realestate.com.au's map of the search (`map`) or the full record (`details`) | 92% / 97% / 99% (see below) |
| `propertyType`, `bedrooms`, `bathrooms`, `parkingSpaces` | type and rooms | 100%, 93% to 99%, 94% to 100%, 71% to 78% |
| `landSize`, `landSizeM2`, `buildingSize`, `buildingSizeM2`, `pricePerM2` | sizes as shown and in square metres, and price per square metre | land 22% / 1% / 12% |
| `photos`, `photoCount`, `floorplans`, `videos`, `virtualTours` | photo links (1024x768, change the size part of the link for others), floor plans, YouTube and Vimeo links, 3D tours | photos 98% to 100%, floor plans 81% / 34% / 90% |
| `nextInspectionDate`, `auctionDate`, `labelText`, `badges` | the next inspection and auction day the listing shows, and its labels | as listed |
| `newListing`, `addedLabel` | realestate.com.au's own "Added yesterday" mark | 7% / 9% |
| `listingTier`, `tierVariant` | the listing's tier: premiere, feature, midtier, standard or premiereproject (variant: luxe) | 100% |
| `agency` (`id`, `name`, `logo`, `brandColour`, `phone`, `address`, `profileUrl`) | the listing agency; address, link and the office phone (when the record shows the office line, never an agent's own number) with Home details | id 97% to 100%, name 36% to 58% (90% to 100% with Home details) |
| `agents`, `agentCount` | each agent's name, id, phone, profile link and photo (with `includePersonalData`) | 100% count |
| `listingKind`, `project` | `listing`, or `project` for a new development: realestate.com.au answers a development as ONE result of a search, so it is one row (one Home) with its name, how many of its listings match your filters (`project.matchingListings`) and the child listings shown | projects only |
| `surroundingSuburb` | true for a listing from a surrounding suburb | with the setting |
| `search`, `lookup` | the input that found the row | 100% |

Measured on 3,212 rows (244 buy, 208 rent, 2,760 sold, in Richmond VIC, Toowoomba City QLD, Surry Hills NSW, Perth WA, Bondi NSW and Hawthorn VIC) on 2026-11-01, with Home details on 60 of them. The sold map position figure is over the 260 sold rows read with map positions on. Map positions are fewer on large searches: on a Victoria search of 1,909 listings the map placed 65% (most of the listings it did not place were standard tier listings); Home details always gives the listing's own position.

**Home details** (`details`): `title` and `description` (95% to 100%), `features` (90% buy, 100% rent; sold records carry none), `latitude` and `longitude` (95% to 100%), every `inspections` time with start and end, the `auction` time, `statementOfInformation` (Victoria, 45% of buy listings), `agency` phone (80% to 100%) and address (100%), `listers` (agents with rating and reviews, behind the personal data switch; an agency listed as a lister is always delivered), `nearbySchools` (95% to 100% with the setting: name, sector, years, type, distance in metres, website).

**Property history** (`propertyHistory`): `events` (date, sold, leased or listed, price, agency), `estimatedValue` (low, high, confidence, updated), `estimatedRentPerWeek`, `attributes` (land and floor area, rooms, year built), `suburbMedians` (median price by property type and bedrooms over the last year, with the number of sales and the change), `planning` (the council and its planning scheme link, land use, lot and plan number, heritage, bushfire and flood overlays, the state planning portal, as the address page shows them), `pageUrl`.

#### Example row (shortened)

```json
{
  "type": "home",
  "id": "152518800",
  "url": "https://www.realestate.com.au/property-house-vic-richmond-152518800",
  "channel": "buy",
  "status": "for_sale",
  "priceText": "EOI $1,700,000 - $1,870,000",
  "priceFrom": 1700000,
  "priceTo": 1870000,
  "address": { "full": "2 Egan Street, Richmond, Vic 3121", "street": "2 Egan Street", "suburb": "Richmond", "state": "VIC", "postcode": "3121", "hidden": false },
  "latitude": -37.81396784,
  "longitude": 144.99136193,
  "propertyType": "House",
  "bedrooms": 3,
  "bathrooms": 2,
  "photoCount": 17,
  "listingTier": "premiere",
  "agency": { "id": "TKQVDJ", "name": "RT Edgar - Richmond" },
  "agentCount": 2,
  "search": { "label": "location 1", "place": "Richmond, VIC 3121" }
}
```

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

You pay per listing delivered (pay per event). Prices per 1,000 events:

| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
| Home | $0.66 | $0.60 | $0.55 | $0.47 |
| Home details (add-on, only when on) | $1.06 | $0.97 | $0.88 | $0.76 |
| Property history (add-on, only when on) | $16.00 | $14.40 | $13.00 | $12.00 |

Each run also pays a one time Actor start of $0.007 on every plan. Platinum and Diamond plans pay the Gold price. The Store pricing card shows these same prices per 1,000 events: "$0.47 / 1,000" on the Home row means one listing costs less than a tenth of a cent, and "$12.00 / 1,000" on the Property history row means one property history costs 1.2 cents on the Gold plan (1.6 cents on Free).

- 1,000 listings of a search cost $0.47 to $0.66 plus the $0.007 start fee ($0.477 to $0.667 for the run); with Home details on, $1.23 to $1.72 plus the start fee.
- 100 listings with Property history on cost $1.25 to $1.67 plus the start fee (Home plus Property history on every row); rows whose history is not delivered pay only the Home price.
- A listing is charged once per run, even when two of your searches find it.
- Free: listings outside your search or filters, repeats, places, listing ids or addresses not found, records or pages realestate.com.au did not answer, Property history rows without a street address or an exact address match, and every coverage, status, place and summary row. A run with no usable input charges only the start fee.
- Set a maximum cost per run in the Apify Console: the run stops at the first listing it cannot pay and delivers no row unpaid.

### Input

| Setting | What it does |
|---|---|
| `locations` | Places as realestate.com.au names them: `Richmond, VIC 3121`, `Bondi NSW`, `3121`, `VIC`, `Inner East Melbourne, VIC`. A place is searched only when exactly one realestate.com.au place is that text; otherwise a free row lists the candidates. |
| `channel` | `buy`, `rent`, `sold` or `all` (one search per channel). Search links keep their own channel. |
| `searchUrls` | realestate.com.au search links (buy, rent or sold, list or map pages). realestate.com.au reads the link itself; your filters replace only the same filter of the link. Paste the link of page 1. A link part realestate.com.au would silently drop (an inspection or auction date, or the price of a sold search, for example) refuses the link with a free row, so a link is never read wider than it says; use the matching setting instead (for sold prices, `minPrice` and `maxPrice`). |
| `listingUrls` | Listing links or ids, 200 read at a time. |
| `addresses` | Street addresses `number street, suburb, STATE postcode`: the current listing at exactly that address (buy and rent). |
| `mapAreas` | A circle `{ latitude, longitude, radiusKm }`, a box `{ north, south, east, west }` or a polygon `{ polygon: [[lat, lng], ...] }`. |
| Filters | `minPrice`, `maxPrice`, `minBedrooms`, `maxBedrooms` (0 = studio), `minBathrooms`, `minParking`, `minLandSize`, `maxLandSize`, `propertyTypes`, `keywords`, `features`, `includeSurroundingSuburbs`, `excludeAddressHidden`; buy: `constructionStatus`, `saleMethod`, `excludeUnderContract`, `excludeNoDisplayPrice`, `excludeProjects`, `auctionDate`; buy and rent: `inspectionDate`, `newListingsOnly`; rent: `furnished`, `petsAllowed`, `excludeDepositTaken`; sold: `soldWithinDays`, `soldAfter`, `soldBefore`, `excludeNoSalePrice`. Each filter works only on the channels named; a filter a channel of the run cannot use refuses the run. On sold searches the price is checked on each row, since realestate.com.au's sold search has no price filter. |
| `sort` | `relevance`, `newest`, `oldest`, `price-low`, `price-high`, `next-inspection`, `next-auction`, `sold-newest`, `sold-oldest`, `sold-price-high`, `sold-price-low`. |
| `maxItems`, `maxItemsPerSearch` | Row caps for the run (default 1,000) and per search. |
| `splitPastCap` | On by default: a search of more than 2,000 listings is read in price bands (buy, rent) or sold day windows (sold). |
| `includeDetails`, `includeNearbySchools`, `nearbySchoolsCount` | The Home details add-on, and the schools near each listing with it. |
| `includePropertyHistory` | The Property history add-on. |
| `includeCoordinates` | On by default: map positions on search rows. |
| `includePersonalData` | Off by default: agents' names, ids, phones and links (see below). |
| `maxPhotos`, `outputFields` | Photo links per row (default 50), and the fields to keep. |
| `suggestPlaces` | Free place lookups (realestate.com.au's own suggestions). |
| `maxConcurrency` | Parallel reads, 1 to 4 (default 2). |
| `proxyConfiguration` | Apify Proxy (default): the Actor reads through Apify's datacenter proxy, so proxy groups and countries are refused; or your own http:// proxy links. |

#### Personal data

Off by default. With `includePersonalData` on, rows also carry each agent's name, realestate.com.au profile id, profile link, photo, mobile and phone numbers, and, with Home details, each agent's rating and number of reviews. With it off those fields are empty, and an agency name that holds two words of a listed agent's name is empty too. Agencies (name, id, logo, office address, office phone, profile link) are businesses and always delivered. You are responsible for using personal data lawfully (the GDPR, the Australian Privacy Act, the Spam Act and similar).

### What this Actor does not do

- No monitoring mode ("only new listings since the last run", price or status tracking, resuming by skipping what an earlier run delivered). Schedule the Actor and compare the rows in your own sheet, or use `newListingsOnly` and the sold day filters.
- No realestate.co.nz and no other property site in the same run: only realestate.com.au's buy, rent and sold listings.
- No affordable housing filter for rentals: realestate.com.au's app data applies none (nine forms of it tried, the totals unchanged).
- No agent or agency e-mail addresses: the pages and app data the Actor reads show an enquiry form instead; realestate.com.au's other data service that carries them is closed to automated readers.
- No date a listing was first listed or last updated, days on market or the agency's own listing reference: none of the pages or app data the Actor reads carries them, and the data service that does is closed to automated readers. The site's own "Added N days ago" mark comes as `addedLabel`.
- No "most reduced" order: realestate.com.au's app search has none.
- Agency names on search rows come from the listing's own card when it shows the agent's agency; turn on Home details for the agency name and address on every row and the office phone where the record shows it.
- An inspection day matches the next inspection a listing shows; with Home details on, every inspection time in the record counts too. That reads each listing's record, so on a day few listings hold the run stops early and its search row says why.
- Listings with a hidden street address have no map position from the search (and no Property history).
- Work that earns nothing has a limit: a long list of places, ids or addresses realestate.com.au does not know, or searches that find no listing, stops on the unpaid work allowance and the rest is reported "not reached" on a free row (nothing is charged for it).
- Property history reads a public web page through Apify's unblocker proxy, about 25 seconds a page, six at a time; a page the unblocker cannot load is a free status on the row. Unloaded pages are paid out of a small allowance of their own, so after a failed page early in a small run the other rows can come without Property history (`propertyHistoryStatus: allowance_spent`, not charged). A run of many Property history rows takes minutes.
- A search with surrounding suburbs gives them from its first 2,000 rows; when it is split past 2,000, the bands read the suburb's own listings.

### FAQ

#### Is it legal to scrape realestate.com.au?

This Actor reads only data realestate.com.au shows to every visitor without a login, and it gives personal data only when you turn it on. realestate.com.au's terms of use restrict automated collection and the building of property databases; whether and how you use the data is your decision and responsibility.

#### Does realestate.com.au have an official API?

realestate.com.au's APIs are for partners that serve agencies (listing upload, leads, reviews), with credentials given after onboarding; there is no public API for searching listings. This Actor works like an API: send a JSON input through the Apify API and read the listings as JSON.

#### How do I get more than 2,000 results from a realestate.com.au search?

realestate.com.au shows at most 2,000 listings of one search. With `splitPastCap` on (the default) the Actor reads larger searches in price bands (buy and rent) or sold day windows (sold) until every listing is met, and the search's coverage row says whether it was read in full.

#### Can I get sold prices from realestate.com.au?

Yes: set the channel to `sold`. Every sold row carries the sold date, and the sold price when the listing shows it (79% of 2,760 sold rows in our tests; some sellers withhold it). Use `soldWithinDays`, or `soldAfter` and `soldBefore`, for a period.

#### Can I get a property's sales history and estimated value?

Yes, with the Property history add-on: for each listing with a street address that matches the site's address record exactly, it reads the public address page and gives the dated sales, leases and listings with prices, the estimated value range and weekly rent, the suburb's median prices and the planning overlays. A page that cannot be read is not charged.

#### Why does this Actor run with limited permissions?

It needs nothing beyond its own run storage (the dataset it writes and its own key-value store), so it runs with Apify's limited permissions: it cannot read or change anything else in your account.

### Use it through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/automation_craft~realestate-com-au-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"locations": ["Richmond, VIC 3121"], "channel": "sold", "soldWithinDays": 90, "maxItems": 500}'
```

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("automation_craft/realestate-com-au-scraper").call(run_input={"locations": ["Bondi, NSW 2026"], "channel": "rent", "maxItems": 200})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

The Actor also runs from Apify's MCP server for AI agents, and from Make, Zapier and n8n through Apify's integrations.

### Changelog

- 0.1 (2026-11-01): first version.

### More data tools by Automation Craft

- [Gumtree Scraper: UK, Australia, South Africa Ads](https://apify.com/automation_craft/gumtree-scraper)
- [Zillow Scraper: Homes for Sale, Rent and Sold](https://apify.com/automation_craft/zillow-scraper)
- [Zillow Property Details Scraper: Price History](https://apify.com/automation_craft/zillow-property-details-scraper)
- [Realtor.com Scraper: Homes for Sale, Rent & Sold](https://apify.com/automation_craft/realtor-com-scraper)
- [Redfin Scraper: Homes for Sale, Sold Comps, Agents](https://apify.com/automation_craft/redfin-scraper)
- [Idealista Scraper: Spain, Italy, Portugal Homes](https://apify.com/automation_craft/idealista-scraper)
- [ImmoScout24 Scraper: Rentals, Sales and Agencies](https://apify.com/automation_craft/immoscout24-scraper)
- [Airbnb Scraper: Airbnb Data, Prices, Calendar](https://apify.com/automation_craft/airbnb-scraper)

# Changelog

This Actor's version history is a separate document: https://apify.com/automation_craft/realestate-com-au-scraper/changelog.md

# Actor input Schema

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

Places as realestate.com.au names them, one per line: a suburb with its state ("Richmond, VIC 3121" or "Bondi NSW"), a postcode ("3121"), a state ("VIC" or "Victoria") or a region ("Inner East Melbourne, VIC"). A place is searched only when exactly one realestate.com.au place is that text; otherwise a free row lists the matching places to pick from (a bare "Richmond" matches ten suburbs in five states).

## `channel` (type: `string`):

Which listings each place, address and map area is searched for: homes for sale ("buy"), for rent ("rent"), recently sold ("sold"), or all three ("all", one search per channel). Search links keep their own channel. Address lookups read the buy and rent listings.

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

Search links copied from realestate.com.au (buy, rent or sold, a list or a map page), for example https://www.realestate.com.au/rent/property-unit+apartment-between-400-700-in-richmond,+vic+3121/list-1?misc=pets-allowed. The link is read by realestate.com.au itself, with every filter it holds (surrounding suburbs included when the link has them); the filters you set below replace only the same filter of the link. Paste the link of page 1. A link part realestate.com.au would silently drop (an inspection or auction date) refuses the link with a free row; use the matching setting below instead.

## `listingUrls` (type: `array`):

Listing links (https://www.realestate.com.au/property-house-vic-richmond-147474464, /sold/property-...) or listing ids (147474464), one per line, read 200 at a time. A listing realestate.com.au no longer returns is a free row. Each listing is billed as one Home, plus its add-ons.

## `addresses` (type: `array`):

Street addresses written "number street, suburb, STATE postcode", for example "95 Richmond Terrace, Richmond, VIC 3121" or "409/10 Burnley Street, Richmond, VIC 3121": the current listing at exactly that address (unit, number, street, suburb, state and postcode), looked up among the suburb's buy or rent listings (the channel above). No exact match is a free row.

## `mapAreas` (type: `array`):

Map areas, each one search: a circle {"latitude": -37.8186, "longitude": 145.005, "radiusKm": 1.5} (0.1 to 50 km), a box {"north": -37.80, "south": -37.83, "east": 145.02, "west": 144.98} or a polygon {"polygon": \[\[-37.81, 144.99], \[-37.82, 145.01], \[-37.83, 144.98]]} (latitude, longitude pairs). The box is searched by realestate.com.au; a circle or polygon is searched as its box and each listing kept only when its map position is inside (a listing the map does not place is left out, free, and counted).

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

Lowest price. Buy: the asking price; rent: the weekly rent; sold: the sold price, checked on each row (realestate.com.au's sold search has no price filter), so a sale whose price is not shown is left out, free.

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

Highest price, same meaning as the minimum.

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

Fewest bedrooms (0 = studio). Buy, rent and sold.

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

Most bedrooms (0 = studio). Buy, rent and sold.

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

Fewest bathrooms. Buy, rent and sold.

## `minParking` (type: `integer`):

Fewest car spaces. Buy, rent and sold.

## `minLandSize` (type: `integer`):

Smallest land size in square metres. Buy, rent and sold.

## `maxLandSize` (type: `integer`):

Largest land size in square metres. Buy, rent and sold.

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

Only these property types (any of them). Buy, rent and sold.

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

Words realestate.com.au matches in the listing (for example "pool", "north facing"), up to 10. Buy, rent and sold.

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

Features from realestate.com.au's own feature list (it sends them as keyword terms, like its search form). Buy, rent and sold.

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

Also deliver the listings realestate.com.au shows from surrounding suburbs after a suburb's own (each marked "surroundingSuburb": true). They come from the first 2,000 rows of a search; a search split past 2,000 reads its own suburb only beyond that. Buy, rent and sold.

## `excludeAddressHidden` (type: `boolean`):

Leave out listings whose street address is hidden ("Address available on request"). Buy, rent and sold.

## `constructionStatus` (type: `string`):

Buy only.

## `saleMethod` (type: `string`):

Buy only: auctions only, or private treaty sales only.

## `excludeUnderContract` (type: `boolean`):

Buy only: leave out listings under contract or under offer.

## `excludeNoDisplayPrice` (type: `boolean`):

Buy only: leave out listings that show no price ("Contact agent").

## `excludeProjects` (type: `boolean`):

Buy only: leave out off the plan projects (developments listed as one project).

## `auctionDate` (type: `string`):

Buy only: listings whose auction is on this day (YYYY-MM-DD), read in order of the next auction; the day is the one realestate.com.au shows on the listing.

## `inspectionDate` (type: `string`):

Buy and rent: listings with an inspection on this day (YYYY-MM-DD). Without Home details each listing's next inspection is checked; with Home details every inspection time it lists.

## `newListingsOnly` (type: `boolean`):

Buy and rent: only listings realestate.com.au marks as recently added ("Added yesterday", "Added 3 days ago"), read newest first.

## `furnished` (type: `boolean`):

Rent only: furnished rentals.

## `petsAllowed` (type: `boolean`):

Rent only: rentals that allow pets.

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

Rent only: leave out rentals with a deposit taken.

## `soldWithinDays` (type: `integer`):

Sold only: sales of the last N days, counted to the run's day in Sydney time.

## `soldAfter` (type: `string`):

Sold only: the first sale day (YYYY-MM-DD).

## `soldBefore` (type: `string`):

Sold only: the last sale day (YYYY-MM-DD).

## `excludeNoSalePrice` (type: `boolean`):

Sold only: leave out sales whose price is withheld.

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

The order of each search. A search larger than 2,000 listings that is split (below) is read in bands: price bands in ascending price (buy, rent) or sold day windows (sold).

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

The run stops after this many listing rows (looked up and searched together). Default 1,000; set a larger number for bigger runs.

## `maxItemsPerSearch` (type: `integer`):

Each search stops after this many listing rows.

## `splitPastCap` (type: `boolean`):

realestate.com.au lists at most 2,000 rows of one search. On (the default), a larger search is read in bands (price bands for buy and rent, sold day windows for sold) until every listing is met; each search's coverage row says whether it was read in full. Off: the first 2,000.

## `includeDetails` (type: `boolean`):

Read each listing's full record: title, description, feature list, exact map position, every inspection time, the auction time, the statement of information (Victoria), the agency's name, address and phone, each agent's rating and contacts (agents behind the personal data switch). Billed as one Home details event per row where the record was read.

## `includeNearbySchools` (type: `boolean`):

With Home details: the nearest schools to each listing from realestate.com.au's school service (name, sector, years, type, distance, website). No extra event.

## `nearbySchoolsCount` (type: `integer`):

How many nearby schools per listing (default 10).

## `includePropertyHistory` (type: `boolean`):

Read each listing's public address page on realestate.com.au: the dated sale, lease and listing events with prices and agencies, the estimated value range with its confidence, the estimated weekly rent, the home's attributes and the suburb's median prices. Read through Apify's own unblocker proxy (about 25 s a page, six at a time). Billed as one Property history event per row whose page was read and is that home; a listing without a street address or without an exact address match is a free status on its row.

## `includeCoordinates` (type: `boolean`):

On (the default): each search row gets its latitude and longitude from realestate.com.au's map of the same search, where the map places it (hidden addresses are not placed). No extra event. Home details always gives the listing's own position.

## `includePersonalData` (type: `boolean`):

Off by default. On: each agent's name, profile id, profile link, photo, mobile and phone numbers, rating and review count. Agents are people: you are responsible for a lawful use of their data (the GDPR, the Australian Privacy Act and the Spam Act included). Agencies (name, id, address, office phone, profile link) are businesses and always delivered.

## `maxPhotos` (type: `integer`):

At most this many photo links per row (default 50). "photoCount" always gives the full number.

## `outputFields` (type: `array`):

Keep only these fields in each listing row (dotted names allowed, for example "price", "address.suburb", "details.description"); "type" and "id" are always kept.

## `suggestPlaces` (type: `array`):

Texts to look up in realestate.com.au's place suggestions (suburbs, postcodes, states, regions), one per line: each gives a free row with up to 10 suggestions, to find the exact text for "Places".

## `maxConcurrency` (type: `integer`):

Reads at once (default 2). Each read waits about a second between calls on one connection.

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

Leave as is: the Actor reads realestate.com.au's app backend through Apify's datacenter proxy. Your own proxy links (http://) are used in turn if given.

## Actor input object example

```json
{
  "locations": [
    "Richmond, VIC 3121"
  ],
  "channel": "buy",
  "maxItems": 20
}
```

# Actor output Schema

## `items` (type: `string`):

No description

## `report` (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 = {
    "locations": [
        "Richmond, VIC 3121"
    ],
    "channel": "buy",
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation_craft/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 = {
    "locations": ["Richmond, VIC 3121"],
    "channel": "buy",
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation_craft/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 '{
  "locations": [
    "Richmond, VIC 3121"
  ],
  "channel": "buy",
  "maxItems": 20
}' |
apify call automation_craft/realestate-com-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation_craft/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/3YedoQnKtlymWEqNs/builds/5wUleH6V6oSo8tiHL/openapi.json
