{
  "openapi": "3.0.1",
  "info": {
    "title": "View.com.au – Australia Property Listings, Sold & Rental Data",
    "description": "Scrape Australian property listings from view.com.au across sale, rent, and recently sold. Search by suburb, city, state, or URL. Extract prices, full addresses, agent and agency contacts, photos, GPS coordinates, market insights, and structured property details.",
    "version": "1.0",
    "x-build-id": "pOVr7qEUQIdlS6Ty4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~view-com-au-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-view-com-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/abotapi~view-com-au-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-view-com-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/abotapi~view-com-au-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-view-com-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Search Mode",
            "enum": [
              "location",
              "url",
              "detail"
            ],
            "type": "string",
            "description": "Search by Location builds URLs from suburb/state. Search List URLs lets you paste view.com.au search result page URLs directly. Property Detail URLs scrapes individual property pages you paste (one record per URL).",
            "default": "location"
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Locations to search. State is required. Suburb and postcode are optional - omit for broader searches.",
            "items": {
              "type": "object",
              "properties": {
                "suburb": {
                  "title": "Suburb (Optional)",
                  "type": "string",
                  "description": "Suburb or city name, e.g. Melbourne, Kew East. Leave empty for state-wide search.",
                  "editor": "textfield"
                },
                "state": {
                  "title": "State",
                  "type": "string",
                  "description": "Australian state or territory",
                  "enum": [
                    "NSW",
                    "VIC",
                    "QLD",
                    "SA",
                    "WA",
                    "TAS",
                    "NT",
                    "ACT"
                  ],
                  "editor": "select"
                },
                "postcode": {
                  "title": "Postcode (Optional)",
                  "type": "string",
                  "description": "4-digit postcode for suburb-level precision, e.g. 3000",
                  "editor": "textfield",
                  "pattern": "^[0-9]{4}$"
                }
              },
              "required": [
                "state"
              ]
            }
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "buy",
              "rent",
              "sold"
            ],
            "type": "string",
            "description": "Type of property listings to scrape",
            "default": "buy"
          },
          "propertyTypes": {
            "title": "Property Types (Optional)",
            "type": "array",
            "description": "Filter by property type. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "apartment",
                "townhouse",
                "land",
                "studio",
                "villa",
                "rural"
              ],
              "enumTitles": [
                "House",
                "Apartment & Unit",
                "Townhouse",
                "Land",
                "Studio",
                "Villa",
                "Rural"
              ]
            }
          },
          "priceMin": {
            "title": "Minimum Price (Optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum property price in AUD"
          },
          "priceMax": {
            "title": "Maximum Price (Optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum property price in AUD"
          },
          "bedroomsMin": {
            "title": "Minimum Bedrooms (Optional)",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum number of bedrooms"
          },
          "bathroomsMin": {
            "title": "Minimum Bathrooms (Optional)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of bathrooms"
          },
          "carsMin": {
            "title": "Minimum Car Spaces (Optional)",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Minimum number of car spaces"
          },
          "sort": {
            "title": "Sort Order (Optional)",
            "enum": [
              "default",
              "date-desc",
              "updatedAt-desc",
              "price-asc",
              "price-desc"
            ],
            "type": "string",
            "description": "Sort order for search results",
            "default": "date-desc"
          },
          "urls": {
            "title": "Search List URLs",
            "type": "array",
            "description": "Paste view.com.au search result page URLs (listing pages). These are URLs that show multiple properties, e.g. https://www.view.com.au/for-sale/vic/in-melbourne-3000/. Do NOT use individual property detail URLs (e.g. /property/vic/...).",
            "items": {
              "type": "string"
            }
          },
          "detailUrls": {
            "title": "Property Detail URLs",
            "type": "array",
            "description": "Paste individual view.com.au property detail page URLs, e.g. https://www.view.com.au/property/vic/melbourne-3000/123-example-street-12345678/. One record is scraped per URL with full detail-page data. Only used when Search Mode is 'Property Detail URLs'.",
            "items": {
              "type": "string"
            }
          },
          "maxListings": {
            "title": "Maximum Listings",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after scraping this many listings. Leave empty for no limit.",
            "default": 25
          },
          "maxPages": {
            "title": "Maximum Pages per Location",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum search result pages per location. Each page has ~25 results.",
            "default": 2
          },
          "includeDetailPage": {
            "title": "Include Detail Page Data",
            "type": "boolean",
            "description": "Fetch each property detail page for full data (description, all images, floor plans, sale history). Slower but more complete.",
            "default": false
          },
          "outputFormat": {
            "title": "Output Formats",
            "type": "array",
            "description": "Export data in these formats",
            "items": {
              "type": "string",
              "enum": [
                "json",
                "csv"
              ],
              "enumTitles": [
                "JSON",
                "CSV"
              ]
            },
            "default": [
              "json"
            ]
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Configure proxy for reliable access. Residential AU proxies recommended.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AU"
            }
          },
          "resumeFromCheckpoint": {
            "title": "Resume from Checkpoint",
            "type": "boolean",
            "description": "Continue from the last saved checkpoint within the SAME run if it was interrupted (platform migration or a manual Resurrect). Distinct from resumeFromRunId (continues a specific PREVIOUS run by id) and incrementalMode (remembers this search across scheduled runs) below.",
            "default": true
          },
          "resumeFromRunId": {
            "title": "Resume from run ID (Optional)",
            "type": "string",
            "description": "Paste a previous run ID (or its dataset ID) to continue ONE interrupted crawl — listing ids already collected in that run are skipped so this run only adds new ones. For a same-run interruption use resumeFromCheckpoint instead; for ongoing scheduled monitoring of this search use incrementalMode below."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring monitoring)",
            "type": "boolean",
            "description": "Turn on when you run this same search on a schedule (e.g. daily) and only want to know what's new or changed since last time. The actor remembers this search's listings itself — no need to paste a run ID. Adds changeType (NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED), changedFields, firstSeenAt, and lastSeenAt to every row. Off by default so existing scheduled runs are unaffected. See stateKey, emitUnchanged, and emitExpired below.",
            "default": false
          },
          "stateKey": {
            "title": "State key for incremental mode (Optional)",
            "type": "string",
            "description": "Optional label for the incrementalMode baseline. Leave empty to auto-derive one from your search settings (mode/locations/urls/detailUrls/listingType/property types/price/bedrooms/bathrooms/cars/sort) — a different filter setup automatically gets its own baseline, never sharing one by accident. Set this only if you want multiple differently-configured runs to intentionally share one baseline."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings (incremental mode)",
            "type": "boolean",
            "description": "When incrementalMode is on, also output listings that are UNCHANGED since the last run (changeType=UNCHANGED, changedFields=[]). Off by default: unchanged listings are silently skipped, so you only see and pay for what's new or different. Turning this on bills extra dataset-item rows for listings that haven't changed.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings (incremental mode)",
            "type": "boolean",
            "description": "When incrementalMode is on, also output a row for previously-tracked listings that are no longer found (changeType=EXPIRED), so you can detect delistings. Only emitted after a run that scans the full tracked search with no cap hit and no resumeFromRunId — a partial run never marks a still-live listing as expired. Off by default. Turning this on bills extra dataset-item rows.",
            "default": false
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. Notion gets a page per item; 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)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}