# RealCommercial.com.AU Scraper | Enterprise Grade (`fatihtahta/realcommercial-au-scraper`) Actor

Extract Australian commercial real estate listings from RealCommercial.com.au at scale with rich property detail, agent contacts, deep listing metadata, market insights and more. Built for enterprise-grade real estate intelligence, lead enrichment, and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/realcommercial-au-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Automation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## RealCommercial.com.au Scraper

**Slug:** `fatihtahta/realcommercial-au-scraper`

### Overview

RealCommercial.com.au Scraper collects structured commercial property listing data, including listing titles, prices, property types, locations, areas, agents, agencies, media, property attributes, and listing metadata when available. [RealCommercial.com.au](https://www.realcommercial.com.au) is one of Australia's major commercial property marketplaces, making its public listing data useful for market research, acquisition analysis, leasing intelligence, and competitive tracking. The actor turns marketplace search results into repeatable JSON records that can be consumed by analytics tools, operational reports, enrichment workflows, and downstream systems. It supports configurable searches across deal type, location, keyword, commercial property category, pricing, area, parking, energy rating, tenure, and output size. The actor is designed for dependable recurring data acquisition with consistent structured output, while reflecting the public data available at the time each run executes.

### Why Use This Actor

- **Market research and analytics teams:** build structured extraction workflows for pricing, supply, location coverage, property mix, and availability analysis across Australian commercial markets.
- **Product and content teams:** normalize public listing attributes, photos, descriptions, and agency details for internal tools, content operations, and market-facing product experiences.
- **Developers and data engineering teams:** feed repeatable collection jobs into downstream systems, warehouses, APIs, search indexes, and enrichment pipelines.
- **Lead generation and enrichment teams:** identify relevant listings, agencies, agents, and commercial opportunities for prospecting, CRM enrichment, and operational qualification.
- **Monitoring and competitive intelligence teams:** schedule recurring runs to track new listings, listing changes, active inventory, recently sold or leased properties, and category movement.

### Common Use Cases

- **Market intelligence:** monitor commercial property supply, price positioning, availability, locations, property types, and area ranges.
- **Lead generation:** build targeted prospect lists from public property listings, agency records, and agent contact context where available.
- **Competitive monitoring:** track changes in listings, agencies, represented properties, pricing language, and commercial property categories over time.
- **Catalog and directory building:** populate internal databases with structured public commercial property records.
- **Data enrichment:** add current public listing attributes, property media, location details, and agency metadata to CRM, BI, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, regional snapshots, and trend analysis.

### Quick Start

1. Choose the `deal_type` you want to collect: buy, lease, sold, or leased.
2. Add one or more `location` values, such as suburbs, cities, regions, or state-level search areas supported by RealCommercial.com.au.
3. Apply optional filters such as `keyword`, `property_type`, price range, area range, parking, NABERS rating, or tenure type.
4. Set a small `limit` for the first validation run, such as 25 or 50 records per location.
5. Run the actor in Apify Console and inspect the first dataset records to confirm the output shape matches your workflow.
6. Increase coverage, refine filters, enable `enrich_data`, or schedule the actor once the output is verified.

### Input Parameters

The actor accepts search criteria for deal type, result order, location, listing filters, enrichment, and maximum results per location.

| Parameter | Type | Description | Default |
|---|---:|---|---|
| `deal_type` | string | Listing channel to collect. Allowed values: `buy`, `lease`, `sold`, `leased`. | `buy` |
| `sort_by` | string | Result order for matching listings. Allowed values: `featured`, `price-descending`, `price-ascending`, `listing-date-newest-first`, `listing-date-oldest-first`. | `featured` |
| `location` | array of strings | Australian suburbs, cities, regions, or state-level search areas to collect. Add one location per array item. | – |
| `keyword` | string | Word or phrase used to narrow listing text, such as a business use, property feature, tenant type, or location qualifier. | – |
| `property_type` | array of strings | Commercial property categories to include. Allowed values: `industrial warehouse`, `retail`, `offices`, `land development`, `showrooms bulky goods`, `hotel leisure`, `medical consulting`, `commercial farming`, `other`. | – |
| `min_price` | integer | Minimum listing price in Australian dollars. Leave empty for no lower price requirement. | – |
| `max_price` | integer | Maximum listing price in Australian dollars. Leave empty for no upper price requirement. | – |
| `min_floor_area` | integer | Minimum internal floor area in square meters. | – |
| `max_floor_area` | integer | Maximum internal floor area in square meters. | – |
| `min_land_area` | integer | Minimum land area in square meters. | – |
| `max_land_area` | integer | Maximum land area in square meters. | – |
| `min_parking` | string | Minimum number of parking spaces. Allowed values: `1`, `2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `25`, `50`, `100`, `250`, `500`, `1000`. | – |
| `nabers_energy_rating` | string | Minimum NABERS energy rating threshold on a 1 to 6 scale. Allowed values: `1`, `2`, `3`, `4`, `5`, `6`. | – |
| `tenue_type` | string | Tenure filter for occupancy or investment profile. Allowed values: `vacant_possession`, `tenanted_investment`. | – |
| `enrich_data` | boolean | When enabled, collects richer listing details such as descriptions, attributes, maps, photos, and agency contact information when available. | `false` |
| `limit` | integer | Maximum number of listings to save for each location input. Minimum: `1`. | – |

### Choosing Inputs

Use `deal_type` first because it defines the primary listing channel: properties for purchase, lease, sold results, or leased results. Use `location` to control market coverage; broader locations improve discovery, while suburb-level inputs create more targeted datasets. Add `property_type`, `keyword`, price, floor area, land area, parking, NABERS rating, and tenure filters when you need more specific qualification criteria. Narrow filters usually produce cleaner, more targeted records, while broader filters are better for market discovery and inventory monitoring. Use `sort_by` to align collection order with your workflow, such as newest listings for monitoring or price ordering for valuation review. Start with a small `limit` for validation, then increase it after confirming that the dataset shape and coverage are appropriate.

### Example Inputs

#### Location and Category Discovery

```json
{
  "deal_type": "buy",
  "sort_by": "featured",
  "location": ["Brisbane QLD"],
  "property_type": ["industrial warehouse", "offices"],
  "enrich_data": false,
  "limit": 50
}
````

#### Recently Listed Leasing Monitor

```json
{
  "deal_type": "lease",
  "sort_by": "listing-date-newest-first",
  "location": ["Melbourne VIC", "Richmond VIC"],
  "keyword": "showroom",
  "property_type": ["showrooms bulky goods"],
  "limit": 75
}
```

#### Targeted Investment Search

```json
{
  "deal_type": "sold",
  "sort_by": "price-descending",
  "location": ["Sydney NSW"],
  "min_price": 1000000,
  "max_price": 10000000,
  "tenue_type": "tenanted_investment",
  "enrich_data": true,
  "limit": 100
}
```

### Output

#### Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, this README documents each shape separately based on the provided Example Output.

#### Record Envelope and Stable Identifiers

Each dataset item represents a RealCommercial.com.au listing record. The strongest recommended idempotency key is `id`; if your storage layer requires a globally scoped key, use `url` or a composite key such as `id` plus `source_context.seed_value`.

Use the recommended key for deduplication and upserts when storing results across repeated runs. Stable identifiers make records easier to merge, deduplicate, and sync across warehouses, CRMs, search indexes, and monitoring systems.

The `source_context.fingerprint` field can be used as an additional run-level or collection-context identifier, especially when you need to compare records collected from different input scopes.

#### Examples

##### Example: Listing Record

```json
{
  "id": "500123456",
  "url": "https://www.realcommercial.com.au/for-sale/property-12-18-example-road-port-melbourne-vic-3207-500123456",
  "title": "Modern Industrial Facility with Office and Secure Yard",
  "price": "CONTACT AGENT",
  "area": "2450 m²",
  "property_types": [
    "Industrial/Warehouse"
  ],
  "location": {
    "street_address": "12-18 Example Road",
    "suburb_address": "Port Melbourne, VIC 3207",
    "suburb": "Port Melbourne",
    "state": "VIC",
    "postcode": "3207",
    "marketing": {
      "region": "vic_melbourne___region,vic_inner_melbourne___region",
      "suburb": "port_melbourne"
    },
    "coordinates": {
      "latitude": -37.832104,
      "longitude": 144.921418,
      "precision": "street"
    },
    "map_thumbnail_url": "https://www.realcommercial.com.au/example-assets/map-thumbnail-500123456.png",
    "map_zoom_level": 16
  },
  "contacts": {
    "agents": [
      {
        "name": "Jordan Smith",
        "image_url": "https://www.realcommercial.com.au/example-assets/agents/jordan-smith.jpg"
      },
      {
        "name": "Priya Nguyen",
        "image_url": "https://www.realcommercial.com.au/example-assets/agents/priya-nguyen.jpg"
      }
    ],
    "agencies": [
      {
        "id": "EXMELB",
        "name": "Example Commercial - Melbourne",
        "salespeople": [
          {
            "id": "900001",
            "name": "Jordan Smith",
            "enquiry_url": "https://www.realcommercial.com.au/contact/example-listing-500123456/jordan-smith",
            "image_url": "https://www.realcommercial.com.au/example-assets/agents/jordan-smith-large.jpg",
            "image_url_template": "https://www.realcommercial.com.au/example-assets/agents/{options}/jordan-smith.jpg",
            "phone": {
              "display": "03 9000 1000",
              "dial": "+61390001000"
            },
            "social_links": {
              "facebook": "https://www.facebook.com/examplecommercialmelbourne/",
              "linkedin": "https://www.linkedin.com/in/jordan-smith-example/"
            }
          },
          {
            "id": "900002",
            "name": "Priya Nguyen",
            "enquiry_url": "https://www.realcommercial.com.au/contact/example-listing-500123456/priya-nguyen",
            "image_url": "https://www.realcommercial.com.au/example-assets/agents/priya-nguyen-large.jpg",
            "image_url_template": "https://www.realcommercial.com.au/example-assets/agents/{options}/priya-nguyen.jpg",
            "phone": {
              "display": "03 9000 1001",
              "dial": "+61390001001"
            },
            "social_links": {
              "facebook": "https://www.facebook.com/examplecommercialmelbourne/",
              "linkedin": "https://www.linkedin.com/in/priya-nguyen-example/"
            }
          }
        ],
        "additional_branding": true,
        "address": {
          "street_address": "Level 5, 100 Collins Street",
          "suburb_address": "MELBOURNE, VIC 3000"
        },
        "branding": {
          "color": "#1f5f8b",
          "logo": {
            "alt": "Example Commercial - Melbourne",
            "url": "https://www.realcommercial.com.au/example-assets/agencies/example-commercial-logo.jpg",
            "url_template": "https://www.realcommercial.com.au/example-assets/agencies/{options}/example-commercial-logo.jpg"
          }
        },
        "phone": {
          "display": "03 9000 1100",
          "dial": "+61390001100"
        }
      }
    ]
  },
  "media": {
    "photos": [
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image0.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image0.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 1"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image1.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image1.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 2"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image2.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image2.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 3"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image3.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image3.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 4"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image4.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image4.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 5"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image5.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image5.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 6"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image6.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image6.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 7"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image7.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image7.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 8"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image8.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image8.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 9"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image9.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image9.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 10"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image10.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image10.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 11"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image11.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image11.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 12"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image12.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image12.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 13"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image13.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image13.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 14"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image14.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image14.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 15"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image15.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image15.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 16"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image16.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image16.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 17"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image17.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image17.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 18"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image18.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image18.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 19"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image19.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image19.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 20"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image20.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image20.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 21"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image21.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image21.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 22"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image22.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image22.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 23"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image23.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image23.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 24"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image24.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image24.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 25"
      },
      {
        "url": "https://www.realcommercial.com.au/example-assets/listings/500123456/image25.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/listings/500123456/{size}/image25.jpg",
        "alt": "12-18 Example Road Port Melbourne VIC 3207 - Image 26"
      }
    ],
    "video": {
    "youtube_id": "AbC123XyZ90"
    },
    "has_tour": false
  },
  "details": {
    "days_active": 42,
    "branding": {
      "color": "#1f5f8b",
      "logo": {
        "alt": "Example Commercial - Melbourne",
        "url": "https://www.realcommercial.com.au/example-assets/agencies/example-commercial-logo.jpg",
        "url_template": "https://www.realcommercial.com.au/example-assets/agencies/{options}/example-commercial-logo.jpg"
      }
    },
    "product": "premium",
    "description": "Modern industrial facility with clear-span warehouse space, refurbished office accommodation, secure yard, multiple roller doors, and convenient access to major arterial routes. The property is suitable for logistics, storage, light manufacturing, or owner-occupier use. Available for sale with vacant possession. For further information or to arrange an inspection, contact the appointed agents. All areas and measurements are approximate.",
    "description_html": "Modern industrial facility with clear-span warehouse space, refurbished office accommodation, secure yard, multiple roller doors, and convenient access to major arterial routes.<br/><br/>The property is suitable for logistics, storage, light manufacturing, or owner-occupier use.<br/><br/>Available for sale with vacant possession.<br/><br/>For further information or to arrange an inspection, contact the appointed agents.<br/><br/>All areas and measurements are approximate.",
    "available_channels": [
      "for-sale",
      "for-lease"
    ],
    "multiple_properties": false,
    "high_quality_listing": false,
    "attributes": [
      {
        "id": "land-area",
        "label": "Land area",
        "value": "6200 m²"
      },
      {
        "id": "floor-area",
        "label": "Floor area",
        "value": "2450 m²"
      },
      {
        "id": "building",
        "label": "Property extent",
        "value": "Whole"
      }
    ],
    "land_area": "6200 m²",
    "floor_area": "2450 m²",
    "last_updated_at": "2026-05-01T04:15:00Z",
    "similar_listings": [
      {
        "id": "500123457",
        "url": "https://www.realcommercial.com.au/for-sale/property-20-sample-street-southbank-vic-3006-500123457",
        "title": "City Fringe Warehouse and Office",
        "price": "For Sale by EOI",
        "area": "980 m²",
        "property_types": [
          "Industrial/Warehouse",
          "Offices"
        ],
        "location": {
          "street_address": "20 Sample Street",
          "suburb_address": "Southbank, VIC 3006"
        },
        "main_photo": {
          "url": "https://www.realcommercial.com.au/example-assets/listings/500123457/image0.jpg",
          "alt": "20 Sample Street Southbank VIC 3006 - Image 1"
        },
        "branding": {
          "color": "#1f5f8b",
          "logo": {
            "alt": "Example Commercial - Melbourne",
            "url": "https://www.realcommercial.com.au/example-assets/agencies/example-commercial-logo.jpg",
            "url_template": "https://www.realcommercial.com.au/example-assets/agencies/{options}/example-commercial-logo.jpg"
          }
        },
        "product": "premium"
      },
      {
        "id": "500123458",
        "url": "https://www.realcommercial.com.au/for-sale/property-8-demo-court-tullamarine-vic-3043-500123458",
        "title": "Functional Warehouse with Hardstand",
        "price": "Indicative pricing $2,850,000 plus GST",
        "area": "1250 m²",
        "property_types": [
          "Industrial/Warehouse"
        ],
        "location": {
          "street_address": "8 Demo Court",
          "suburb_address": "Tullamarine, VIC 3043"
        },
        "main_photo": {
          "url": "https://www.realcommercial.com.au/example-assets/listings/500123458/image0.jpg",
          "alt": "8 Demo Court Tullamarine VIC 3043 - Image 1"
        },
        "branding": {
          "color": "#1f5f8b",
          "logo": {
            "alt": "Example Commercial - Melbourne",
            "url": "https://www.realcommercial.com.au/example-assets/agencies/example-commercial-logo.jpg",
            "url_template": "https://www.realcommercial.com.au/example-assets/agencies/{options}/example-commercial-logo.jpg"
          }
        },
        "product": "enhanced"
      }
    ]
  },
  "source_context": {
    "source_url": "https://www.realcommercial.com.au/for-sale/commercial-real-estate-in-port+melbourne,+vic+3207/list-1",
    "seed_id": "example-seed-001",
    "seed_type": "location",
    "seed_value": "Port Melbourne VIC 3207",
    "page_index": 1,
    "detail_source_url": "https://www.realcommercial.com.au/for-sale/property-12-18-example-road-port-melbourne-vic-3207-500123456",
    "is_enriched": true,
    "domain": "www.realcommercial.com.au",
    "fingerprint": "example-fingerprint-500123456",
    "scraped_at": "2026-05-08T20:34:42.683856+00:00"
  },
  "pricing": {
    "raw": {
      "for_sale": {
        "display_price": "CONTACT AGENT",
        "is_price_hidden": true
      },
      "for_lease": {
        "display_price": "CONTACT AGENT",
        "is_price_hidden": true
      }
    }
  }
}
```

### Field Reference

#### Listing Record

**id** *(string, required)*: Stable listing identifier.

**url** *(string, required)*: Public listing URL.

**title** *(string, optional)*: Listing headline.

**price** *(string, optional)*: Display price or price guidance text.

**area** *(string, optional)*: Display area value as shown for the listing.

**property\_types** *(array of strings, optional)*: Commercial property categories associated with the listing.

**location.street\_address** *(string, optional)*: Street address.

**location.suburb\_address** *(string, optional)*: Suburb, state, and postcode display address.

**location.suburb** *(string, optional)*: Suburb name.

**location.state** *(string, optional)*: Australian state or territory abbreviation.

**location.postcode** *(string, optional)*: Postal code.

**location.marketing.region** *(string, optional)*: Marketing region identifiers when available.

**location.marketing.suburb** *(string, optional)*: Marketing suburb identifier when available.

**location.coordinates.latitude / location.coordinates.longitude** *(number, optional)*: Geographic coordinates.

**location.coordinates.precision** *(string, optional)*: Coordinate precision label.

**location.map\_thumbnail\_url** *(string, optional)*: Map thumbnail URL.

**location.map\_zoom\_level** *(number, optional)*: Map zoom level.

**contacts.agents** *(array, optional)*: Summary agent records associated with the listing.

**contacts.agents.name** *(string, optional)*: Agent name.

**contacts.agents.image\_url** *(string, optional)*: Agent image URL.

**contacts.agencies** *(array, optional)*: Agency records associated with the listing.

**contacts.agencies.id** *(string, optional)*: Agency identifier.

**contacts.agencies.name** *(string, optional)*: Agency name.

**contacts.agencies.salespeople** *(array, optional)*: Salespeople associated with the agency and listing.

**contacts.agencies.salespeople.id** *(string, optional)*: Salesperson identifier.

**contacts.agencies.salespeople.name** *(string, optional)*: Salesperson name.

**contacts.agencies.salespeople.enquiry\_url** *(string, optional)*: Public enquiry destination when available in the record.

**contacts.agencies.salespeople.image\_url** *(string, optional)*: Salesperson image URL.

**contacts.agencies.salespeople.image\_url\_template** *(string, optional)*: Templated image URL when provided.

**contacts.agencies.salespeople.phone.display** *(string, optional)*: Display phone number.

**contacts.agencies.salespeople.phone.dial** *(string, optional)*: Dial-ready phone number.

**contacts.agencies.salespeople.social\_links.facebook** *(string, optional)*: Facebook profile or page URL.

**contacts.agencies.salespeople.social\_links.linkedin** *(string, optional)*: LinkedIn profile URL.

**contacts.agencies.additional\_branding** *(boolean, optional)*: Indicates whether additional branding metadata is present.

**contacts.agencies.address.street\_address** *(string, optional)*: Agency street address.

**contacts.agencies.address.suburb\_address** *(string, optional)*: Agency suburb, state, and postcode display address.

**contacts.agencies.branding.color** *(string, optional)*: Agency branding color.

**contacts.agencies.branding.logo.alt** *(string, optional)*: Logo alt text.

**contacts.agencies.branding.logo.url** *(string, optional)*: Logo URL.

**contacts.agencies.branding.logo.url\_template** *(string, optional)*: Templated logo URL when provided.

**contacts.agencies.phone.display** *(string, optional)*: Agency display phone number.

**contacts.agencies.phone.dial** *(string, optional)*: Agency dial-ready phone number.

**media.photos** *(array, optional)*: Listing photo records.

**media.photos.url** *(string, optional)*: Photo URL.

**media.photos.url\_template** *(string, optional)*: Templated photo URL when provided.

**media.photos.alt** *(string, optional)*: Photo alt text.

**media.video.youtube\_id** *(string, optional)*: YouTube video identifier.

**media.has\_tour** *(boolean, optional)*: Indicates whether the record reports a tour.

**details.days\_active** *(number, optional)*: Number of days the listing has been active.

**details.branding.color** *(string, optional)*: Listing branding color.

**details.branding.logo.alt** *(string, optional)*: Listing logo alt text.

**details.branding.logo.url** *(string, optional)*: Listing logo URL.

**details.branding.logo.url\_template** *(string, optional)*: Templated listing logo URL when provided.

**details.product** *(string, optional)*: Listing product or presentation tier label.

**details.description** *(string, optional)*: Plain-text listing description.

**details.description\_html** *(string, optional)*: HTML-formatted listing description.

**details.available\_channels** *(array of strings, optional)*: Listing channels associated with the property.

**details.multiple\_properties** *(boolean, optional)*: Indicates whether the listing represents multiple properties.

**details.high\_quality\_listing** *(boolean, optional)*: Listing quality indicator when available.

**details.attributes** *(array, optional)*: Structured property attributes.

**details.attributes.id** *(string, optional)*: Attribute identifier.

**details.attributes.label** *(string, optional)*: Attribute label.

**details.attributes.value** *(string, optional)*: Attribute value.

**details.land\_area** *(string, optional)*: Display land area.

**details.floor\_area** *(string, optional)*: Display floor area.

**details.last\_updated\_at** *(string, optional)*: Last updated timestamp in ISO 8601 format when available.

**details.similar\_listings** *(array, optional)*: Similar listing summaries.

**details.similar\_listings.id** *(string, optional)*: Similar listing identifier.

**details.similar\_listings.url** *(string, optional)*: Similar listing public URL.

**details.similar\_listings.title** *(string, optional)*: Similar listing title.

**details.similar\_listings.price** *(string, optional)*: Similar listing display price.

**details.similar\_listings.area** *(string, optional)*: Similar listing display area.

**details.similar\_listings.property\_types** *(array of strings, optional)*: Similar listing property categories.

**details.similar\_listings.location.street\_address** *(string, optional)*: Similar listing street address.

**details.similar\_listings.location.suburb\_address** *(string, optional)*: Similar listing suburb, state, and postcode display address.

**details.similar\_listings.main\_photo.url** *(string, optional)*: Similar listing main photo URL.

**details.similar\_listings.main\_photo.alt** *(string, optional)*: Similar listing main photo alt text.

**details.similar\_listings.branding.color** *(string, optional)*: Similar listing branding color.

**details.similar\_listings.branding.logo.alt** *(string, optional)*: Similar listing logo alt text.

**details.similar\_listings.branding.logo.url** *(string, optional)*: Similar listing logo URL.

**details.similar\_listings.branding.logo.url\_template** *(string, optional)*: Similar listing templated logo URL when provided.

**details.similar\_listings.product** *(string, optional)*: Similar listing product or presentation tier label.

**source\_context.source\_url** *(string, optional)*: Source URL recorded for traceability.

**source\_context.seed\_id** *(string, optional)*: Identifier for the configured input scope.

**source\_context.seed\_type** *(string, optional)*: Input scope type, such as `location`.

**source\_context.seed\_value** *(string, optional)*: Input value that produced the record.

**source\_context.page\_index** *(number, optional)*: Result page index associated with the record.

**source\_context.detail\_source\_url** *(string, optional)*: Detail source URL recorded for traceability.

**source\_context.is\_enriched** *(boolean, optional)*: Indicates whether richer listing details were collected.

**source\_context.domain** *(string, optional)*: Source domain recorded for traceability.

**source\_context.fingerprint** *(string, optional)*: Stable collection-context fingerprint.

**source\_context.scraped\_at** *(string, optional)*: Timestamp when the record was collected, in ISO 8601 format.

**pricing.raw.for\_sale.display\_price** *(string, optional)*: Raw sale display price when available.

**pricing.raw.for\_sale.is\_price\_hidden** *(boolean, optional)*: Indicates whether sale price is hidden.

**pricing.raw.for\_lease.display\_price** *(string, optional)*: Raw lease display price when available.

**pricing.raw.for\_lease.is\_price\_hidden** *(boolean, optional)*: Indicates whether lease price is hidden.

### Data Quality, Guarantees, and Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, source presentation, or marketplace experiments.
- **Optional fields:** null-check optional fields in downstream code, especially contact, media, pricing, map, and enrichment fields.
- **Deduplication:** use `id` as the strongest stable key; use `url` or `id` plus `source_context.seed_value` when your workflow needs source-scope separation.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, search indexes, or monitoring systems.

### Tips for Best Results

- Start with a small `limit` to validate the output shape before scaling up.
- Use one geography, property category, or deal type per run when you need cleaner segmentation.
- Leave optional filters empty when the goal is broad discovery.
- Add filters gradually to understand how each field changes coverage.
- Use `sort_by` with `listing-date-newest-first` for monitoring workflows focused on new inventory.
- Enable `enrich_data` when you need descriptions, media, attributes, and richer agency context.
- Use stable identifiers for deduplication when storing results over time.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Configure the available input fields for the target scope.
3. Set the maximum number of outputs to collect with `limit`.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and review the first records.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Schedule runs to keep commercial property datasets fresh for reporting, monitoring, and enrichment workflows. Recurring runs are especially useful when tracking new listings, pricing changes, geographic availability, or recently sold and leased records.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **BI dashboards:** monitor pricing, availability, property type movement, and geographic coverage over time.
- **Data warehouses:** store historical listing snapshots for reporting, modeling, and longitudinal analysis.
- **CRM enrichment:** sync public listing, agency, and agent attributes into account or lead records.
- **Google Sheets or Airtable:** review smaller market samples, qualification lists, and operational exports.
- **Webhooks:** trigger validation, notification, or ingestion workflows after each completed run.
- **Alerts and reporting:** notify teams when new listings match target locations, price ranges, categories, or tenure profiles.

### Export Formats and Downstream Use

Apify datasets can be exported or consumed by downstream systems for reporting, review, and automated ingestion.

- **JSON:** for APIs, applications, and data pipelines.
- **CSV or Excel:** for spreadsheet workflows and manual review.
- **API access:** for automated ingestion into internal systems.
- **BI and warehouses:** for reporting, dashboards, and historical analysis.

### Performance

Estimated run times:

- **Small runs (< 1,000 outputs):** ~3–5 minutes
- **Medium runs (1,000–5,000 outputs):** ~5–15 minutes
- **Large runs (5,000+ outputs):** ~15–30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what [RealCommercial.com.au](https://www.realcommercial.com.au) publicly exposes at run time.
- Some optional fields may be missing on sparse records or listings with limited public detail.
- Very broad searches may take longer or require higher `limit` values to capture the desired coverage.
- Target-side changes can affect field availability, naming, or presentation.
- Regional, account, or availability differences may change visible results.
- Pricing text can vary because some listings display guidance, ranges, or contact-only pricing rather than numeric values.

### Troubleshooting

- **No results returned:** check filters, location spelling, property category selection, and whether the target has matching public records.
- **Fewer results than expected:** broaden filters, raise `limit`, or verify that the selected location and deal type contain enough matching records.
- **Some fields are empty:** optional fields depend on what each record publicly provides.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public RealCommercial.com.au commercial property listing data, including titles, prices, property types, areas, locations, contacts, agencies, media, descriptions, attributes, source context, and pricing details when available.

#### Can I filter by location, category, date, price, or other criteria?

You can filter by deal type, location, keyword, property type, price range, floor area, land area, parking, NABERS energy rating, tenure type, and result order. The schema does not include a direct date-window input, but `sort_by` supports newest-first and oldest-first listing order.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum, not a guarantee. A run may return fewer records when the selected location, deal type, or filters have fewer matching public listings.

#### Can I schedule recurring runs?

Yes. Use Apify Schedules to run the actor daily, weekly, or on a custom cron schedule.

#### How do I avoid duplicates across runs?

Use `id` as the primary idempotency key. If you need to preserve separate records by input scope, use a composite key such as `id` plus `source_context.seed_value`.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support exports in JSON, CSV, Excel, and other formats supported by the Apify platform.

#### Does this actor collect private data?

The actor is intended to collect publicly available listing information from RealCommercial.com.au. Users are responsible for ensuring their use of the data complies with applicable laws, regulations, and platform terms.

#### When should I enable enrichment?

Enable `enrich_data` when your workflow needs richer listing details such as descriptions, media, property attributes, map context, and agency contact information. Keep it disabled for faster validation runs or lighter datasets.

#### What should I include when reporting an issue?

Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when it helps explain the issue.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available **commercial property listing** information from **https://www.realcommercial.com.au** for legitimate business purposes, including:

- **Commercial real estate** research and market analysis
- Listing monitoring, valuation review, and operational reporting
- CRM enrichment, lead qualification, and market intelligence workflows

Users are responsible for ensuring that their use of collected data complies with applicable laws, regulations, and the target site's terms. This section is informational and not legal advice.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, such as GDPR and CCPA

### Support

For help, use the actor page or Issues section. Include the input used with sensitive values redacted, the run ID, expected versus actual behavior, and a small output sample when available.

# Actor input Schema

## `deal_type` (type: `string`):

Choose whether to collect properties listed for purchase, for lease, sold, or leased. This setting defines the main result set before optional filters are applied.

## `location` (type: `array`):

Enter one location per row, such as a suburb, city, region, or state-level search area supported by Realcommercial.au. Broader locations can discover more listings; specific locations keep the dataset more targeted.

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

Enter a word or phrase to focus results on relevant listing text, such as a business use, feature, tenant type, or location qualifier. A precise keyword can reduce noise, while leaving it blank keeps the search broader.

## `property_type` (type: `array`):

Select one or more commercial property categories to include. Leave empty when you want to collect all available property types for the selected locations and listing channel.

## `min_price` (type: `integer`):

Enter the lowest acceptable listing price. Leave empty if there is no lower price requirement.

## `max_price` (type: `integer`):

Enter the highest acceptable listing price. Leave empty if there is no upper price requirement.

## `min_floor_area` (type: `integer`):

Enter the smallest floor area to include, in square meters. Leave empty when smaller spaces should remain eligible.

## `max_floor_area` (type: `integer`):

Enter the largest floor area to include, in square meters. Leave empty when larger spaces should remain eligible.

## `min_land_area` (type: `integer`):

Enter the smallest land area to include, in square meters. Leave empty when smaller sites should remain eligible.

## `max_land_area` (type: `integer`):

Enter the largest land area to include, in square meters. Leave empty when larger sites should remain eligible.

## `min_parking` (type: `string`):

Choose the minimum number of parking spaces a listing should offer. Leave empty when parking should not narrow the results.

## `nabers_energy_rating` (type: `string`):

Choose the minimum NABERS energy rating to include. Leave empty when energy rating should not affect which listings are collected.

## `tenue_type` (type: `string`):

Choose a tenure type to focus the dataset on a specific occupancy or investment profile. Leave empty to include listings regardless of tenure.

## `sort_by` (type: `string`):

Select the order used when browsing matching listings. Featured sorting is useful for a default marketplace view, while price and date sorting help prioritize specific review workflows.

## `enrich_data` (type: `boolean`):

Enable this for more complete property listings. This may make the run slower because the actor may spend more time collecting details for each result. Turn it off for faster runs when the standard result fields are enough.

## `limit` (type: `integer`):

Enter the maximum number of listings to save for each location input. Leave empty to collect all available matching results for each configured search.

## Actor input object example

```json
{
  "deal_type": "buy",
  "sort_by": "featured",
  "enrich_data": false,
  "limit": 100
}
```

# 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 = {
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/realcommercial-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 = { "limit": 100 }

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

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

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

```

## CLI example

```bash
echo '{
  "limit": 100
}' |
apify call fatihtahta/realcommercial-au-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RealCommercial.com.AU Scraper | Enterprise Grade",
        "description": "Extract Australian commercial real estate listings from RealCommercial.com.au at scale with rich property detail, agent contacts, deep listing metadata, market insights and more. Built for enterprise-grade real estate intelligence, lead enrichment, and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "rrqQfW7yvI0c6isn5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~realcommercial-au-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-realcommercial-au-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/fatihtahta~realcommercial-au-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-realcommercial-au-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/fatihtahta~realcommercial-au-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-realcommercial-au-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "deal_type": {
                        "title": "Choose Deal Type",
                        "enum": [
                            "buy",
                            "lease",
                            "sold",
                            "leased"
                        ],
                        "type": "string",
                        "description": "Choose whether to collect properties listed for purchase, for lease, sold, or leased. This setting defines the main result set before optional filters are applied.",
                        "default": "buy"
                    },
                    "location": {
                        "title": "Add Locations to Search",
                        "type": "array",
                        "description": "Enter one location per row, such as a suburb, city, region, or state-level search area supported by Realcommercial.au. Broader locations can discover more listings; specific locations keep the dataset more targeted.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keyword": {
                        "title": "Filter by Keyword",
                        "type": "string",
                        "description": "Enter a word or phrase to focus results on relevant listing text, such as a business use, feature, tenant type, or location qualifier. A precise keyword can reduce noise, while leaving it blank keeps the search broader."
                    },
                    "property_type": {
                        "title": "Filter by Property Types",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Select one or more commercial property categories to include. Leave empty when you want to collect all available property types for the selected locations and listing channel.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "industrial warehouse",
                                "retail",
                                "offices",
                                "land development",
                                "showrooms bulky goods",
                                "hotel leisure",
                                "medical consulting",
                                "commercial farming",
                                "other"
                            ],
                            "enumTitles": [
                                "Warehouse, Factory & Industrial",
                                "Shops & Retail",
                                "Offices",
                                "Development Sites & Land",
                                "Showrooms & Large Format Retail",
                                "Hotel, Motel & Leisure",
                                "Medical & Consulting",
                                "Commercial Farming & Rural",
                                "Other"
                            ]
                        }
                    },
                    "min_price": {
                        "title": "Set Minimum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the lowest acceptable listing price. Leave empty if there is no lower price requirement."
                    },
                    "max_price": {
                        "title": "Set Maximum Price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the highest acceptable listing price. Leave empty if there is no upper price requirement."
                    },
                    "min_floor_area": {
                        "title": "Set Minimum Floor Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the smallest floor area to include, in square meters. Leave empty when smaller spaces should remain eligible."
                    },
                    "max_floor_area": {
                        "title": "Set Maximum Floor Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the largest floor area to include, in square meters. Leave empty when larger spaces should remain eligible."
                    },
                    "min_land_area": {
                        "title": "Set Minimum Land Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the smallest land area to include, in square meters. Leave empty when smaller sites should remain eligible."
                    },
                    "max_land_area": {
                        "title": "Set Maximum Land Area",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Enter the largest land area to include, in square meters. Leave empty when larger sites should remain eligible."
                    },
                    "min_parking": {
                        "title": "Set Minimum Parking Spaces",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6",
                            "7",
                            "8",
                            "9",
                            "10",
                            "25",
                            "50",
                            "100",
                            "250",
                            "500",
                            "1000"
                        ],
                        "type": "string",
                        "description": "Choose the minimum number of parking spaces a listing should offer. Leave empty when parking should not narrow the results."
                    },
                    "nabers_energy_rating": {
                        "title": "Set Minimum NABERS Rating",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "4",
                            "5",
                            "6"
                        ],
                        "type": "string",
                        "description": "Choose the minimum NABERS energy rating to include. Leave empty when energy rating should not affect which listings are collected."
                    },
                    "tenue_type": {
                        "title": "Choose Tenure Type",
                        "enum": [
                            "vacant_possession",
                            "tenanted_investment"
                        ],
                        "type": "string",
                        "description": "Choose a tenure type to focus the dataset on a specific occupancy or investment profile. Leave empty to include listings regardless of tenure."
                    },
                    "sort_by": {
                        "title": "Choose Result Order",
                        "enum": [
                            "featured",
                            "price-descending",
                            "price-ascending",
                            "listing-date-newest-first",
                            "listing-date-oldest-first"
                        ],
                        "type": "string",
                        "description": "Select the order used when browsing matching listings. Featured sorting is useful for a default marketplace view, while price and date sorting help prioritize specific review workflows.",
                        "default": "featured"
                    },
                    "enrich_data": {
                        "title": "Collect Richer Property Listing Details",
                        "type": "boolean",
                        "description": "Enable this for more complete property listings. This may make the run slower because the actor may spend more time collecting details for each result. Turn it off for faster runs when the standard result fields are enough.",
                        "default": false
                    },
                    "limit": {
                        "title": "Set Maximum Results per Input",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the maximum number of listings to save for each location input. Leave empty to collect all available matching results for each configured search."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
