{
  "openapi": "3.0.1",
  "info": {
    "title": "Domain.com.au – Buy, Rent, Sold & Price History",
    "description": "Extract enriched Domain.com.au property listings across buy, rent, and sold, with AI-enhanced content and deep structured data including descriptions, features, photos, GPS, agent contacts, suburb insights, school catchments, and complete sold and leased price history timelines.",
    "version": "2.0",
    "x-build-id": "ADad5EdtCxSLFdkL4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~domain-com-au-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-domain-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~domain-com-au-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-domain-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~domain-com-au-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-domain-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": "🎯 Start here: pick your search mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "search = build the query from filters below. url = paste Domain.com.au search or listing URLs and let the actor walk them.",
            "default": "search"
          },
          "locations": {
            "title": "🔎 Suburbs / locations (search mode)",
            "type": "array",
            "description": "Only used when mode = search. One search runs per location. Accepts 'Suburb State Postcode' or a Domain slug, e.g. 'Sydney NSW 2000', 'Bondi Beach NSW 2026', 'richmond-vic-3121'.",
            "items": {
              "type": "string"
            }
          },
          "listingType": {
            "title": "Listing type",
            "enum": [
              "buy",
              "rent",
              "sold"
            ],
            "type": "string",
            "description": "buy = for sale, rent = for rent, sold = sold listings. Applies in Search mode (selects which listings to search); also narrows a pasted URL's results to sold/leased listings when set to Sold.",
            "default": "buy"
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "default",
              "price-asc",
              "price-desc",
              "date-desc",
              "date-asc",
              "suburb-asc"
            ],
            "type": "string",
            "description": "Order results server-side. 'Default' keeps Domain's native order. For sold listings, 'Newest/Oldest' sorts by sale date; for buy/rent it sorts by date listed. Applies in Search mode. Does not sort a pasted URL's results by this key — leave it at Default in URL mode.",
            "default": "default"
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Optional. Leave empty for all; selecting more than one keeps a listing that matches any of them. Applies in Search mode and to a pasted URL.",
            "items": {
              "type": "string",
              "enum": [
                "house",
                "apartment-unit-flat",
                "town-house",
                "villa",
                "vacant-land",
                "acreage",
                "rural",
                "block-of-units",
                "new-apartments",
                "retirement"
              ],
              "enumTitles": [
                "House",
                "Apartment / Unit / Flat",
                "Townhouse",
                "Villa",
                "Vacant land",
                "Acreage / Semi-rural",
                "Rural",
                "Block of units",
                "New apartments / Off the plan",
                "Retirement"
              ]
            },
            "default": []
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Optional minimum bedrooms. Applies in Search mode and to a pasted URL."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Optional maximum bedrooms. Applies in Search mode and to a pasted URL."
          },
          "minBathrooms": {
            "title": "Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Optional minimum bathrooms. Applies in Search mode and to a pasted URL."
          },
          "minPrice": {
            "title": "Min price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional minimum price. For rent this is the weekly rent. Applies in Search mode and to a pasted URL."
          },
          "maxPrice": {
            "title": "Max price (AUD)",
            "minimum": 0,
            "type": "integer",
            "description": "Optional maximum price. For rent this is the weekly rent. Applies in Search mode and to a pasted URL."
          },
          "excludeUnderOffer": {
            "title": "Exclude under offer / under contract",
            "type": "boolean",
            "description": "When on, hides listings marked under offer / under contract. Applies in Search mode and to a pasted URL.",
            "default": false
          },
          "inspectionsOnly": {
            "title": "Open for inspection only (search mode)",
            "type": "boolean",
            "description": "When on, return only listings with a scheduled inspection in the next 7 days. In URL mode, paste an inspection-times URL (path ending in /inspection-times/) instead.",
            "default": false
          },
          "auctionsOnly": {
            "title": "Auctions only (search mode)",
            "type": "boolean",
            "description": "When on, return only listings going to auction in the next 7 days. Best used with listing type 'For sale'. Domain has no auction URL to paste, so this toggle is the only way to filter auctions.",
            "default": false
          },
          "urls": {
            "title": "🔗 Domain.com.au URLs (url mode)",
            "type": "array",
            "description": "Only used when mode = url. Paste Domain search URLs (e.g. https://www.domain.com.au/sale/melbourne-vic-3000/) or individual listing URLs. Multi-URL supported. Listing type, property types, bedrooms, bathrooms, price and exclude-under-offer above still apply to these results; sort order and the inspection/auction toggles do not. Pagination starts at the page in the URL and walks forward.",
            "items": {
              "type": "string"
            }
          },
          "fetchPropertyHistory": {
            "title": "Fetch property price history",
            "type": "boolean",
            "description": "Also fetch each property's profile page for the full sold/leased price history timeline and rental estimate. Requires Fetch listing details. Adds one extra request per listing.",
            "default": true
          },
          "includePropertyInsights": {
            "title": "Include extra property insights (valuation, planning, NBN, built year)",
            "type": "boolean",
            "description": "Attach attributes Domain.com.au does not publish: a sale & rental valuation estimate (AVM with confidence range), suburb market growth (12-month price/rent change), planning overlays (bushfire / flood / heritage), local council, NBN connection type, school zoning, nearby childcare centres, built year, mobile coverage and media counts. Resolved per listing from its address. Off by default; adds a short delay per listing and needs a Residential proxy (country AU).",
            "default": false
          },
          "includeExtendedListing": {
            "title": "Include extended listing attributes (indoor / outdoor features, media, sizes)",
            "type": "boolean",
            "description": "Attach an extended set of attributes Domain itself does not publish, matched per address from the property's active listing elsewhere on the market: the indoor and outdoor feature split (e.g. Air Conditioning, Built-in Wardrobes, Pool, Courtyard), floor plan / video / 3D-tour availability flags, building size, study count, numeric price range, plus rent/sold/auction details. De-duplicated against the fields already on each listing so nothing is repeated. Off by default; adds extra lookups per suburb and needs a Residential proxy (country AU). Coverage is partial: only properties also listed elsewhere are matched.",
            "default": false
          },
          "maxListings": {
            "title": "Max listings (0 = no limit)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on total listings across all searches. Default 20. Set to 0 for no limit (bounded by Max pages, or by the real inventory size when Max pages is also 0).",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Domain.com.au accepts Australian (and New Zealand) residential connections. Keep Residential + country AU (NZ also works).",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AU"
            }
          },
          "maxPages": {
            "title": "Max pages per search (0 = no limit)",
            "minimum": 0,
            "type": "integer",
            "description": "Coarse output cap. Each page is ~30 listings. 0 means no limit (walk every page Domain reports for the search). Use Max listings for a finer cap; if both are set, Max listings wins.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (optional)",
            "type": "string",
            "description": "Paste a previous run ID (or its dataset ID) to continue a large pull across separate runs. Listings already saved by that run are skipped, so this run only appends new ones. Leave empty for a normal, fresh run. For recurring monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily/weekly recurring monitoring of the same search. The first run returns all matching listings as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED listings — a repriced or relisted property, not an unchanged one. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those listings returned (and billed). State is kept separately per location/URL/listingType/filter/enrichment setup; use State key to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "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 locations/URLs, listing type, filters, and enrichment toggles — different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings (incremental mode only)",
            "type": "boolean",
            "description": "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.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return listings that were present in a previous run but are no longer found, marked EXPIRED — e.g. sold, leased, or delisted. Only produced once a run has fully scanned the tracked search — not when Max listings/Max pages capped it, or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "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)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which listing pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max listings to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on how many listings are written to each selected connector per run (protects against very large writes). 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}