# RealCommercial.com.au Scraper (`maximedupre/realcommercial-scraper`) Actor

Collect public Australian commercial property listings from RealCommercial.com.au for sale, lease, sold, or leased searches. Filter by location, category, price, area, parking, NABERS rating, tenure, and date, then save normalized listing data with public details when available.

- **URL**: https://apify.com/maximedupre/realcommercial-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Real estate, Business, Developer tools
- **Stats:** 3 total users, 2 monthly users, 88.9% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 commercial listings

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

### 🏢 Find Australian commercial listings

Real estate researchers, brokers, investors, and data teams can search public RealCommercial.com.au listings and save normalized records for market research, acquisition review, leasing work, and structured exports.

- Search land listings with **[Commercial Land](https://apify.com/maximedupre/realcommercial-scraper/examples/commercial-land)** for an Australian location.
- Filter industrial listings with **[Industrial Property](https://apify.com/maximedupre/realcommercial-scraper/examples/industrial-property)** by location, price, area, or tenure.
- Find medical listings with **[Medical Centre](https://apify.com/maximedupre/realcommercial-scraper/examples/medical-centre)** and review their public listing details.
- Review development opportunities with **[Development Site](https://apify.com/maximedupre/realcommercial-scraper/examples/development-site)** by location and date.
- Compare retail listings with **[Retail Space](https://apify.com/maximedupre/realcommercial-scraper/examples/retail-space)** by price and area.
- Search office listings with **[Office Space](https://apify.com/maximedupre/realcommercial-scraper/examples/office-space)** and save normalized rows.

#### 📋 Normalized commercial listing rows

**What you get**

Each dataset row represents the first eligible occurrence of one public RealCommercial.com.au listing. It can include the listing identity, source URL, channel, displayed price, property details, location, dates, media, agency and agent contacts, and related listings when the source provides them.

**How matches are handled**

The Actor saves a listing as soon as it finds the first eligible match. If the same source listing appears again through another location or keyword in the same run, later matches are ignored. The saved row describes that first match only.

#### ▶️ Start a RealCommercial search

**Run flow**

Choose one listing channel and one or more Australian locations. Apply the same keyword, property, price, area, parking, NABERS, tenure, order, and date filters to that one search configuration. Turn on rich details when you want more public descriptions, attributes, map context, photos, or agency and agent context.

**Source data**

The Actor reads public RealCommercial.com.au listing information at run time. Optional values stay absent when the source does not publish them.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `listingChannel` | string | Select `sale`, `lease`, `sold`, or `leased`. |
| `includeDetails` | boolean | Request richer public descriptions, property attributes, map context, photos, and agency or agent context. |
| `locations` | array of strings | Add one or more Australian suburbs, cities, regions, or states. All values use the same channel and filters. |
| `keyword` | string | Narrow matches with a word or phrase from the public listing text. |
| `propertyCategories` | array of strings | Filter by one or more commercial property categories, such as industrial, retail, office, land, showroom, hotel, medical, or farming. |
| `minPrice` | number | Keep listings with an advertised price at or above this amount in Australian dollars. |
| `maxPrice` | number | Keep listings with an advertised price at or below this amount in Australian dollars. |
| `minFloorAreaSqm` | number | Keep listings with at least this internal floor area in square metres. |
| `maxFloorAreaSqm` | number | Keep listings with at most this internal floor area in square metres. |
| `minLandAreaSqm` | number | Keep listings with at least this land area in square metres. |
| `maxLandAreaSqm` | number | Keep listings with at most this land area in square metres. |
| `minParkingSpaces` | integer | Require at least this many published parking spaces. |
| `minNabersRating` | number | Require a published NABERS energy rating at or above this value. |
| `tenure` | string | Select `vacant-possession` or `tenanted-investment`; leave it empty to include both when the source provides this detail. |
| `sortBy` | string | Keep marketplace order or sort by price or source-published listing date. |
| `dateFrom` | date string | Include listings whose source-published listing or update date is on or after this date. |
| `dateTo` | date string | Include listings whose source-published listing or update date is on or before this date. |
| `maxItems` | integer | Stop after this many listings. Leave it empty to return all available results until the source is exhausted. |

Use one coherent search configuration per run. Optional filters can be left empty when you want a broader result set. The source may publish a price as text, a single amount, a range, or no numeric amount.

**Successful default-input example**

This is the public input from a successful current-beta default-input run:

```json
{
  "listingChannel": "sale",
  "includeDetails": true,
  "locations": [
    "Sydney"
  ],
  "maxItems": 3
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | URL string | Links to the default Apify dataset that contains the collected listing rows. |

**Compact listing row**

With `includeDetails` set to `false`, a row can contain core identity and the price or basic property values that are available without a detail request.

| Field | Type | What it does |
| --- | --- | --- |
| `listingId` | string | Stable identifier assigned to the listing by RealCommercial.com.au. |
| `title` | string | Published title of the listing. |
| `url` | URL string | Canonical public listing URL. |
| `price` | object | Published price information when available. |
| `price.display` | string | Price wording shown by the source. |
| `price.amount` | number | One numeric price amount when published. |
| `price.minAmount` | number | Lower value of a published price range when available. |
| `price.maxAmount` | number | Upper value of a published price range when available. |
| `property` | object | Published property values returned for the row. |
| `property.tenure` | string | Published tenure information when available. |

Here is a complete row from a successful current-beta run with details disabled:

```json
{
  "listingId": "504501532",
  "title": "PREMIUM MEDICAL SUITE WITH SPECTACULAR HARBOUR VIEWS!",
  "url": "https://www.realcommercial.com.au/for-sale/property-william-bland-centre-701-707-229-macquarie-street-sydney-nsw-2000-504501532",
  "price": {
    "display": "Guide $2,500,000",
    "amount": 2500000
  },
  "property": {
    "tenure": "vacant"
  }
}
```

**Detailed listing row**

With `includeDetails` set to `true`, the row can contain the following additional public listing data. Optional fields are included only when the source provides them.

| Field | Type | What it does |
| --- | --- | --- |
| `listingId` | string | Stable source identifier for the listing. |
| `title` | string | Published listing title. |
| `url` | URL string | Canonical public listing URL. |
| `description` | string | Published property and commercial-use description. |
| `status` | string | Listing status published by the source. |
| `channels` | array of strings | Source channels for the listing, such as `sale`, `lease`, `sold`, or `leased`. |
| `price` | object | Published sale or lease price information. |
| `price.display` | string | Price wording shown in the public listing. |
| `price.amount` | number | One numeric price amount. |
| `price.minAmount` | number | Lower numeric value of a published price range. |
| `price.maxAmount` | number | Upper numeric value of a published price range. |
| `property` | object | Published commercial property details. |
| `property.categories` | array of strings | Commercial property categories published for the listing. |
| `property.floorArea` | object | Published internal floor area values in square metres. |
| `property.floorArea.valueSqm` | number | One published internal floor area value. |
| `property.floorArea.minSqm` | number | Lower value of a published internal floor area range. |
| `property.floorArea.maxSqm` | number | Upper value of a published internal floor area range. |
| `property.floorArea.display` | string | Published internal floor area wording. |
| `property.landArea` | object | Published land area values in square metres. |
| `property.landArea.valueSqm` | number | One published land area value. |
| `property.landArea.minSqm` | number | Lower value of a published land area range. |
| `property.landArea.maxSqm` | number | Upper value of a published land area range. |
| `property.landArea.display` | string | Published land area wording. |
| `property.parkingSpaces` | integer | Number of published parking spaces. |
| `property.nabersRating` | number | Published NABERS energy rating. |
| `property.tenure` | string | Published tenure information. |
| `property.highlights` | array of strings | Published property highlights. |
| `property.features` | array of strings | Other published property features. |
| `location` | object | Published address and map context. |
| `location.address` | string | Published street address or address text. |
| `location.suburb` | string | Published Australian suburb. |
| `location.state` | string | Published Australian state or territory. |
| `location.postcode` | string | Published Australian postcode. |
| `location.region` | string | Published broader geography. |
| `location.coordinates` | object | Published or source-provided map coordinates. |
| `location.coordinates.latitude` | number | Latitude of the property location. |
| `location.coordinates.longitude` | number | Longitude of the property location. |
| `location.mapUrl` | URL string | Public map URL supplied by the source. |
| `dates` | object | Listing or update dates published by the source. |
| `dates.updatedDate` | date string | Most recent source-published update date. |
| `availability` | object | Published availability or occupancy timing. |
| `availability.occupancy` | string | Published occupancy or tenancy timing. |
| `media` | object | Public photos, videos, tours, and listing website links. |
| `media.photos` | array of objects | Public photo links published for the listing. |
| `media.photos[].url` | URL string | Direct public photo URL. |
| `media.photos[].caption` | string | Published photo caption. |
| `media.videos` | array of objects | Public video links published for the listing. |
| `media.videos[].url` | URL string | Direct public video URL. |
| `media.tours` | array of objects | Public virtual tour links or tour information. |
| `media.tours[].url` | URL string | Direct public tour URL. |
| `media.tours[].title` | string | Published tour title. |
| `media.websiteUrl` | URL string | Public listing website link. |
| `agency` | object | Published listing agency details. |
| `agency.name` | string | Published agency name. |
| `agency.phone` | string | Published agency phone number. |
| `agents` | array of objects | Published agent or salesperson contacts. |
| `agents[].name` | string | Published agent or salesperson name. |
| `agents[].phone` | string | Published agent or salesperson phone number. |
| `relatedListings` | array of objects | Related listing summaries published by the source. |
| `relatedListings[].listingId` | string | Stable identifier for the related listing. |
| `relatedListings[].title` | string | Published title of the related listing. |
| `relatedListings[].url` | URL string | Canonical public URL of the related listing. |
| `relatedListings[].price` | string | Published price wording for the related listing. |

Here is one complete row from the successful current-beta default-input run:

```json
{
  "listingId": "505209508",
  "title": "Welcoming Offers | Haymarket Freehold with Significant Value-Add Potential",
  "url": "https://www.realcommercial.com.au/for-sale/property-211-215-thomas-street-haymarket-nsw-2000-505209508",
  "description": "Colliers and Savills are pleased to present 211-215 Thomas Street, Haymarket, a rare opportunity to acquire a landmark freehold asset in the heart of Sydney's renowned Chinatown precinct.<br/><br/>The property occupies a prominent 392m²* landholding and comprises 1,248m²* of net lettable area across four levels. Ideally positioned moments from Central Station, major universities and Sydney's $4.3 billion Tech Central precinct, the asset benefits from exceptional connectivity and long-term growth drivers. <br/><br/>Offered with favourable planning controls, the property presents flexibility for investors, owner-occupiers and developers alike. Opportunities of this scale and prominence are rarely available within one of Sydney CBD's most tightly held precincts.<br/><br/>Key Investment Highlights<br/><br/>+ Landmark 392m²* freehold landholding in the heart of Haymarket<br/>+ Prominent 16-metre* frontage to Thomas Street's pedestrian boulevard<br/>+ 1,248m²* net lettable area across four levels<br/>+ SP5 Metropolitan Centre zoning with 50m height limit and 9.9:1 FSR potential<br/>+ Positioned within Sydney's $4.3 billion Tech Central precinct<br/>+ Walking distance to Central Station, Metro and major universities<br/>+ Significant value-add, repositioning and development potential (STCA)<br/><br/>For further information or to arrange an inspection, please contact the exclusive selling agents.<br/><br/>*Approximate<br/>^ STCA: Subject to Council Approval<br/>",
  "channels": [
    "sale"
  ],
  "price": {
    "display": "Please contact agent"
  },
  "property": {
    "categories": [
      "Retail"
    ],
    "highlights": [
      "Landmark 392m²* freehold landholding",
      "16-metre* frontage to Thomas Street",
      "SP5 Metropolitan Centre zoning"
    ],
    "features": [
      "eliteplus"
    ]
  },
  "location": {
    "address": "211-215 Thomas Street",
    "suburb": "Haymarket",
    "state": "NSW",
    "postcode": "2000",
    "region": "nsw_sydney_cbd",
    "coordinates": {
      "latitude": -33.88051192,
      "longitude": 151.2042333
    },
    "mapUrl": "https://maps.googleapis.com/maps/api/staticmap?size=80x80&style=feature:poi%7Cvisibility:off&style=feature:administrative%7Cvisibility:off&zoom=16&markers=icon:https://www.realcommercial.com.au/listing-ui-assets/img/map-marker-small.png%7C-33.88051192,151.2042333&key=AIzaSyC_gjuO7NtFjrw2ihFjA5nwxvtACeZ_K4g&channel=rca-prod-map-thumbnail&signature=6ytHDrLfQjvINHp8Mmi-4Rj6MpE="
  },
  "dates": {
    "updatedDate": "2026-09-22"
  },
  "media": {
    "photos": [
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/7490f4bba59348876f16477e7e765afffff353ecd20cdcd267df1a13822c80f5/image0.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 1"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/387720050198bed31e57502ea49df8b1d5482001bf3df19eee9b42b969487023/image1.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 2"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/4e3777ff2aab59dc24a76c013de6583d3765e8dbf5727cbfd5d2645bd6e09321/image2.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 3"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/a3a85c685241c282819daf3ef8ee7d53d95bcc930c7ba8eae54691c108a3d68e/image3.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 4"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/45a91460a64ecd318de6b5a34b85575dde8a30d3dbc93fde2fcfe617fbd84031/image4.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 5"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/8d51371e7cceecfacede5f3b140033521d52e5dd4f7bd664e8f17aa68f01b175/image5.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 6"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/7aacc255a9e5756fb8995b8c9d2d8d509261c56bbbb20a4ac9fc46015482a3fe/image6.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 7"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/4d434a3547c1e7de200aa284b79a6bfda87d67fa767b0591b8f91ce0466f2fba/image7.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 8"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/f5058d5da8af2eec73b257c994cd6987a924af8f386f227d8dae861f0a95a3b9/image8.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 9"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/deb58156f2d517e15a9d105e0f926d146a6dbe3764838a6c2ae973deb5b60adc/image9.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 10"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/e9f3b0fe4115d3d1b7fdaf0ddeb1f4a5d83cf1eafb0f1116bbb5c561bdd8f45e/image10.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 11"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/370cc5025540ec7c1974ce3472473a3838a6847c1d206920bacbbb9596c8c53e/image11.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 12"
      },
      {
        "url": "https://i1.au.reastatic.net/712x496-smart=80,r=33,g=40,b=46,quality=60,progressive/d097fbb7235aa6499c5f2c13fad5ac087a4cfdb28f718eb8a90eed766ca19781/image12.jpg",
        "caption": "211-215 Thomas Street Haymarket NSW 2000 - Image 13"
      }
    ],
    "videos": [
      {
        "url": "https://www.youtube.com/watch?v=USuo3v4_yqI"
      }
    ]
  },
  "agency": {
    "name": "Savills - Sydney CBD",
    "phone": "02 8215 8888"
  },
  "agents": [
    {
      "name": "Andy Hu",
      "phone": "0410868066"
    },
    {
      "name": "Jordan Lee",
      "phone": "0435 967 245"
    }
  ],
  "relatedListings": [
    {
      "listingId": "505211960",
      "title": "Flagship Waterfront Opportunity at Sydney’s Iconic Finger Wharf",
      "url": "https://www.realcommercial.com.au/for-sale/property-ground-mezzanine-6f-cowper-wharf-roadway-woolloomooloo-nsw-2011-505211960",
      "price": "For Sale via Expressions of Interest"
    }
  ]
}
```

#### 💳 Pricing

**Event**

Pricing uses pay per event. Each normalized commercial property listing saved to the default dataset is billed as one `Commercial listing` event. The event description is: “One normalized commercial property listing is saved to your dataset.”

The `maxItems` limit controls how many listings the run may save. Leave it empty to return all available results until the source is exhausted.

#### 🔌 Integrations

Use the Apify Console to start a run and open the default dataset. The dataset link can be read through the Apify API or exported for analysis and downstream workflows.

The Actor reads public RealCommercial.com.au listing information and does not ask for customer-supplied source credentials.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### How do I search sale or lease listings?

Set `listingChannel` to `sale`, `lease`, `sold`, or `leased`. All locations and filters in that run use the selected channel.

##### What does leaving Maximum listings empty do?

The Actor returns all available results until the source is exhausted. Set `maxItems` when you want an upper bound for the run.

##### Can one run cover several Australian locations?

Yes. Add one or more values to `locations`. They share the same channel and filters in that run.

##### Can I filter listings by source dates?

Yes. Use `dateFrom` and `dateTo` for source-published listing or update dates. Each field can be left empty.

##### What happens when the same listing matches more than once?

The first eligible occurrence is saved. Later matches of the same source listing are ignored, and the saved row keeps the first match's details.

##### What does Include rich details change?

When `includeDetails` is true, the Actor requests richer public descriptions, property attributes, map context, photos, and agency or agent context. When it is false, rows may contain core fields only.

##### Are numeric prices always available?

No. A listing can publish contact-only text, a single amount, or a price range. Check the fields under `price` and keep in mind that some listings may not publish price information.

##### Does the Actor need a RealCommercial.com.au login or API key?

No customer-supplied source credentials are required. The Actor reads the public listing information available at run time.

##### Does this Actor guarantee complete market coverage?

No. Results reflect what RealCommercial.com.au makes public at run time. Optional fields and listings can be missing when the source does not provide them.

### 📝 Changelog

**v0.0** (25-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~realcommercial-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [RealCommercial.com.AU Scraper | Enterprise Grade](https://apify.com/fatihtahta/realcommercial-au-scraper): Compare another RealCommercial.com.au extraction when you need a second option for Australian commercial listing research.
- [Real Commercial AU Property Scraper | Full Listing Dataa](https://apify.com/abotapi/realcommercial-au-scraper): Review another RealCommercial.com.au listing collection for richer property details, media, and location data.
- [Commercialrealestate.com.au · AU Commercial $1.50/1K · Emails](https://apify.com/memo23/commercialrealestate-au-scraper): Add a second Australian commercial property marketplace to a listing research workflow.
- [Commercialrealestate.com.au Scraper — Listings & Contacts](https://apify.com/trev0n/commercialrealestate-au-scraper): Compare commercialrealestate.com.au listings when you need another Australian source and contact context.
- [Crexi Scraper - Commercial Property Listings for Sale](https://apify.com/abotapi/crexi-commercial-listings-scraper): Search US commercial property listings for sale when your research extends beyond Australia.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `listingChannel` (type: `string`):

Choose the public RealCommercial channel to search. The run returns normalized listing records from this channel.

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

Request richer public details such as descriptions, property attributes, map context, photos, and agency or agent context. Clear this option to skip the extra detail request. The default keeps the current detailed output.

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

Search one or more Australian suburbs, cities, regions, or states. Use one value per item. All locations use the same channel and filters in this run.

## `keyword` (type: `string`):

Narrow listings with a word or phrase from the public listing text. Leave empty to include all matching listings.

## `propertyCategories` (type: `array`):

Choose one or more commercial property categories. You can also enter another source category if it is not listed.

## `minPrice` (type: `number`):

Only include listings with an advertised price at or above this amount in Australian dollars.

## `maxPrice` (type: `number`):

Only include listings with an advertised price at or below this amount in Australian dollars.

## `minFloorAreaSqm` (type: `number`):

Only include listings with at least this internal floor area in square metres.

## `maxFloorAreaSqm` (type: `number`):

Only include listings with at most this internal floor area in square metres.

## `minLandAreaSqm` (type: `number`):

Only include listings with at least this land area in square metres.

## `maxLandAreaSqm` (type: `number`):

Only include listings with at most this land area in square metres.

## `minParkingSpaces` (type: `integer`):

Only include listings with at least this many published parking spaces.

## `minNabersRating` (type: `number`):

Only include listings with a published NABERS energy rating at or above this value.

## `tenure` (type: `string`):

Choose vacant possession or tenanted investment listings. Leave empty to include both when the source provides this detail.

## `sortBy` (type: `string`):

Choose marketplace order, price, or listing date. Leave empty to keep the marketplace order.

## `dateFrom` (type: `string`):

Include listings whose source-published listing or update date is on or after this date.

## `dateTo` (type: `string`):

Include listings whose source-published listing or update date is on or before this date.

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

Stop after this many listings. Leave empty to collect all available results until the source is exhausted.

## Actor input object example

```json
{
  "listingChannel": "sale",
  "includeDetails": true,
  "locations": [
    "Sydney"
  ],
  "maxItems": 3
}
```

# Actor output Schema

## `dataset` (type: `string`):

The normalized commercial listing records collected by the Actor.

# 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 = {
    "listingChannel": "sale",
    "locations": [
        "Sydney"
    ],
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/realcommercial-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 = {
    "listingChannel": "sale",
    "locations": ["Sydney"],
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/realcommercial-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 '{
  "listingChannel": "sale",
  "locations": [
    "Sydney"
  ],
  "maxItems": 3
}' |
apify call maximedupre/realcommercial-scraper --silent --output-dataset

```

## MCP server setup

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