{
  "openapi": "3.0.1",
  "info": {
    "title": "Property24 Scraper: Real Estate Listings, Prices & Broker Leads",
    "description": "Extract property listings, asking prices, locations, bedrooms, bathrooms, floor sizes, real estate agencies, and WhatsApp agent contact links across 10 African countries from Property24.com. Download clean tables of property listings automatically for investment research.",
    "version": "0.1",
    "x-build-id": "NyetODoHSaXCOcc1l"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~property24-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-property24-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/getascraper~property24-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-property24-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/getascraper~property24-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-property24-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": [
          "proxyConfiguration"
        ],
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Property24 search, category, or direct listing URLs. Overrides country, listingType, and searchLocations when provided.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchLocations": {
            "title": "Search Locations",
            "type": "array",
            "description": "One or more location names to search (e.g. 'Cape Town', 'Sandton', 'Nairobi CBD'). Each becomes a ?SearchString= query.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Location Filters (Alias)",
            "type": "array",
            "description": "Additional city, suburb, or region names to match in returned listings. Search Locations remains the URL seed field.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Target Country Site",
            "enum": [
              "south_africa",
              "namibia",
              "kenya",
              "botswana",
              "zimbabwe",
              "zambia",
              "nigeria",
              "tanzania",
              "mozambique"
            ],
            "type": "string",
            "description": "Select which Property24 country subdomain to scrape. Used when no startUrls are provided.",
            "default": "south_africa"
          },
          "countries": {
            "title": "Target Country Sites",
            "type": "array",
            "description": "Run the same listing search across multiple Property24 country subdomains. Ignored when Start URLs are provided.",
            "items": {
              "type": "string",
              "enum": [
                "south_africa",
                "namibia",
                "kenya",
                "botswana",
                "zimbabwe",
                "zambia",
                "nigeria",
                "tanzania",
                "mozambique"
              ],
              "enumTitles": [
                "South Africa",
                "Namibia",
                "Kenya",
                "Botswana",
                "Zimbabwe",
                "Zambia",
                "Nigeria",
                "Tanzania",
                "Mozambique"
              ]
            },
            "default": [
              "south_africa"
            ]
          },
          "listingType": {
            "title": "Listing Type",
            "enum": [
              "sale",
              "rent",
              "sold"
            ],
            "type": "string",
            "description": "Select whether to scrape properties for sale, to rent, or recently sold.",
            "default": "sale"
          },
          "propertyType": {
            "title": "Property Type",
            "enum": [
              "any",
              "house",
              "apartment",
              "townhouse",
              "vacant-land",
              "farm",
              "commercial"
            ],
            "type": "string",
            "description": "Filter results to a specific property category. Uses title-text matching on listing cards.",
            "default": "any"
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum total property listings to scrape across all search URLs.",
            "default": 100
          },
          "minPrice": {
            "title": "Min Price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings with prices at or above this value (e.g. 500000)."
          },
          "maxPrice": {
            "title": "Max Price",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings with prices at or below this value (e.g. 10000000)."
          },
          "bedrooms": {
            "title": "Min Bedrooms",
            "minimum": 1,
            "type": "integer",
            "description": "Only return listings with at least this many bedrooms."
          },
          "bathroomsMin": {
            "title": "Min Bathrooms",
            "minimum": 1,
            "type": "integer",
            "description": "Only return listings with at least this many bathrooms."
          },
          "minFloorSize": {
            "title": "Min Floor Size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings where the floor size is at least this many square meters. Requires deepScrape to be accurate."
          },
          "maxFloorSize": {
            "title": "Max Floor Size (m²)",
            "minimum": 0,
            "type": "integer",
            "description": "Only return listings where the published floor size is at or below this value."
          },
          "sortBy": {
            "title": "Sort Order",
            "enum": [
              "default",
              "newest",
              "price-asc",
              "price-desc",
              "size"
            ],
            "type": "string",
            "description": "Control the order in which Property24 returns listings for search URLs.",
            "default": "default"
          },
          "deepScrape": {
            "title": "Deep Scrape (Property Details)",
            "type": "boolean",
            "description": "Fetch individual listing pages to extract agent contacts, WhatsApp links, full descriptions, amenities, levies, rates, and accurate floor/erf sizes.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor Mode",
            "enum": [
              "snapshot",
              "changes"
            ],
            "type": "string",
            "description": "Snapshot returns the current matching listings. Changes compares complete scans with the state stored under stateKey and emits only transitions plus failures.",
            "default": "snapshot"
          },
          "stateKey": {
            "title": "State Key",
            "pattern": "^[A-Za-z0-9._:-]{1,120}$",
            "type": "string",
            "description": "Explicit Key-Value Store key for this monitoring cohort. Keep it stable for the same countries, locations, and filters.",
            "default": "property24-default"
          },
          "emitUnchanged": {
            "title": "Emit Unchanged",
            "type": "boolean",
            "description": "In changes mode, also emit listings whose source-backed fields did not change.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Residential proxies recommended for South African domains. For other countries, datacenter proxies typically work.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}