Commercial Property AU Scraper at a glance
Commercial Property AU Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, type, property types, tenure and tenure display, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Real Estate, Developer Tools, Automation
- Region
- Oceania
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 26 options
Scrape Australian commercial property listings with detailed property data. Extract descriptions, highlights, property attributes, GPS coordinates, nearby places, agent contacts, agency details, images and rich listing metadata for real estate research and market analysis.
What Commercial Property AU Scraper can do
- Two ways to search. Pick a suburb, state, postcode or region, or paste a realcommercial.com.au search link already filtered in a browser.
- Every listing type. For sale, for lease, recently sold and recently leased commercial properties.
- Commercial filters built in. Property type, price range, floor or land area, keywords and sort order, without building query strings by hand.
- Detail-page enrichment. Each listing is opened on its own page for the full description, highlights, detailed attributes, images, nearby places, demographics and downloadable documents.
- Agent and agency contacts. Names, phone numbers and enquiry links for every listed agent, plus the primary agency and any other agencies on the listing.
- Built for schedules. Incremental mode returns only new, updated and reappeared listings on recurring runs, and a bad input fails loudly instead of silently returning nothing.
Choose what to collect
These inputs let you configure Commercial Property AU Scraper - Listings & Agents. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Location mode = pick suburb + state + filters below. URL mode = paste any commercial property search URL already refined in a browser (recommended for complex filters or multi-suburb queries). |
locationsarray | Locations to search. State is required. Suburb and postcode are optional. |
listingTypestring | Type of property listings to scrape. Location mode only. |
propertyTypesarray | Filter by property type (leave empty for all). Only applies in location mode. |
sortBystring | Sort order for search results. Only applies in location mode. |
priceMininteger | Minimum property price (AUD). Only applies in location mode. |
priceMaxinteger | Maximum property price (AUD). Only applies in location mode. |
Show 19 more inputs
| Input | What it controls |
|---|---|
areaMininteger | Minimum floor/land area in square metres. Only applies in location mode. |
areaMaxinteger | Maximum floor/land area in square metres. Only applies in location mode. |
landAreaMininteger | Minimum land (site) area in square metres, separate from floor area. Only applies in location mode. |
landAreaMaxinteger | Maximum land (site) area in square metres. Only applies in location mode. |
tenurestring | Only vacant-possession or only tenanted-investment listings (leave empty for both). Only applies in location mode. |
keywordsstring | Keywords to search (e.g. co-working, warehouse). Only applies in location mode. |
urlsarray | Search result page URLs to scrape (for-sale, for-lease, sold or leased searches, with or without a property type, location path or ?locations= query). A single property page link is skipped with a warning. The ?page=N query param sets the starting page; pagination then continues forward up to Maximum Pages. Tip: open the site, apply your filters, then paste the resulting URL here. In URL mode, all the filter fields above are ignored. Leaving this untouched scrapes the two example searches. |
maxListingsinteger | Stop after scraping this many listings. Set to 0 for the maximum of 1,000,000. |
fetchDetailsboolean | On by default. Each result is enriched from its own property page: the full description, downloadable documents (floor plans, disclosures), video/3D tours, land-area and tenure rows, agent phone/email/profile links, agency contact details and the complete photo set. Each delivered enriched listing is charged as one detail-page event on top of the per-result charge; rows the site does not serve, or rows incremental mode suppresses as unchanged, are not charged. Turn this off for a much faster, lower-compute run that returns the search-card fields only (title, address, price, area, agents, images) - every row is then stamped detailFetched: false. |
maxPagesinteger | Maximum search result pages to process per location. Each page has ~25 results. Set to 0 (default) for no limit; a hard cap of 100 pages per location always applies. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large crawl of listings without returning or charging for listings already collected there. Use this after an interrupted run, or when continuing a listing catalogue pull in another run. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching listings as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings. A listing is UPDATED when any of its fields changes (price, status, area, description, agents added or removed, images and so on); changedFields lists which. Never compared: scrapedAt and lastUpdatedAt, the order agents are listed in, and anything you add under Ignore fields when detecting changes. Those stay in the output. Turn on "Emit unchanged" or "Emit expired" only when you also want those listings returned (and billed). State is kept separately for each mode/location/URL and filter setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode/locations/URLs and filters, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return listings that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max listings/Max pages capped it when Resume was used, or when a pasted URL started at page 2 or later. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Field names that must not make a listing count as UPDATED, one per entry. Use dots for nested fields, for example agents.phone or price.display. Arrays are searched automatically. Ignored fields stay in the output; they are only left out of the comparison and out of changedFields. Changing this list does not cause a one-time wave of UPDATED rows. Incremental mode only. |
mcpConnectorsarray | Optionally send the scraped listings into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → API & Integrations, then select it here. Notion gets a rich page-per-listing export; other connectors receive a best-effort write/digest. Leave empty to skip, this never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which listing pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on how many listings are written to each selected connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
propertyIdID (text)listingTypeType (text)propertyTypesProperty Types (object)tenureTypeTenure (text)tenureTypeDisplayTenure Display (text)addressAddress (object)pricePrice (object)attributesAttributes (object)titleTitle (text)latitudeLat (number)longitudeLng (number)urlURL (link)Show 23 more fields
changeTypeChange type (incremental mode) (text)changedFieldsChanged fields (incremental mode) (array)firstSeenAtFirst seen (incremental mode) (date)lastSeenAtLast seen (incremental mode) (date)mediaMedia (object)agentsAgents (object)agencyAgency (object)conjunctionalAgenciesConjunctional Agencies (object)otherAgenciesOther Agencies (object)descriptionDescription (text)descriptionMetadataDescription Metadata (object)downloadableDocumentsDocuments (object)toursTours (object)spacesSpaces (object)websitesWebsites (object)nearbyPlacesNearby Places (object)canonicalPathCanonical Path (text)lastUpdatedAtLast Updated (text)highQualityListingHigh Quality (boolean)propertyTypeObjectsProperty Type Objects (object)mapMap (object)demographicDataDemographics (object)detailFetcheddetailFetchedExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"propertyId": "505197008",
"url": "https://www.realcommercial.com.au/for-sale/offices/in-melbourne,vic+3000/property-505197008",
"listingType": "for-sale",
"propertyTypes": [
"offices"
],
"tenureType": "vacant",
"tenureTypeDisplay": "Vacant Possession",
"title": "Prime CBD Office Suite",
"description": "A well presented office suite in the heart of the CBD, close to transport and amenities.",
"highlights": [
"Prime CBD location",
"Recently refurbished",
"Secure basement parking"
],
"status": "New",
"daysActive": 12,
"hasTour": true,
"product": "elite",
"address": {
"street": "123 Example Street",
"suburb": "Melbourne",
"state": "VIC",
"postcode": "3000",
"full": "123 Example Street, Melbourne VIC 3000"
},
"price": {
"display": "$2,400,000",
"value": 2400000,
"min": 2400000,
"max": 2400000,
"isRange": false
},
"attributes": {
"area": "367 m²",
"areaValue": 367,
"areaUnit": "m²",
"carSpaces": 4
},
"media": {
"imageCount": 18,
"images": [
{
"url": "https://www.realcommercial.com.au/image/800x600/sample-listing-1.jpg",
"alt": "Building exterior"
}
]
},
"agents": [
{
"name": "Jordan Smith",
"phone": {
"display": "0400 000 000",
"dial": "0400000000"
},
"enquiryUri": "/for-sale/offices/in-melbourne,vic+3000/property-505197008/enquiry"
}
],
"agency": {
"name": "Example Realty Group",
"phone": {
"display": "03 9000 0000",
"dial": "0390000000"
},
"address": "Level 1, 123 Example Street, Melbourne VIC 3000"
},
"latitude": -37.8136,
"longitude": 144.9631,
"detailFetched": true,
"scrapedAt": "2026-09-28T02:00:00.000Z"
}Ways to use this data
- Commercial property investors and analysts: track new listings, price ranges and floor areas across suburbs or an entire state.
- PropTech platforms and brokerages: build an internal Australian commercial listings database with agent and agency contact details.
- Site selection teams: compare warehouse, retail, office and land availability by suburb, property type and price band.
- Valuers and researchers: pull recently sold and recently leased comparables for a suburb or property type.
- Market monitoring teams: watch a saved search on a schedule and get only the listings that are new, changed or gone.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Commercial Property AU Scraper return?
The documented output for Commercial Property AU Scraper includes id, type, property types, tenure, tenure display, address, price and attributes. Availability of each field depends on the source page and the selected mode.
How much does Commercial Property AU Scraper cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then classifies every listing as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED against the previous run for that same search, and unchanged listings are not billed unless you turn on Emit unchanged.
Why does url mode ignore my location and filter fields?
Location mode and url mode are two different ways to describe the same search. Location mode builds the search from the location and filter fields in this input. Url mode reads an already-filtered realcommercial.com.au search link instead, and ignores the location and filter fields entirely. Pick one mode for a run; check which mode is selected before assuming a filter "didn't work".
Why did my run fail instead of returning an empty dataset?
A run fails when its input can't be used at all: a minimum price or area set above the matching maximum, no valid locations or URLs configured for the selected mode, a Resume from a previous run ID or dataset ID this Apify account can't read, or incremental mode with saved state for the search while Resume is also set. If the input is valid but a search matches nothing, the run finishes with a warning. If not a single results page could be loaded (see Plan Requirement), the run fails rather than reporting an empty result.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
