{
  "openapi": "3.0.1",
  "info": {
    "title": "Property24 Scraper - South Africa Property Data",
    "description": "Scrape Property24 listings across South Africa, Namibia, Botswana, Zambia, Zimbabwe, Mozambique and Kenya: price, beds, baths, erf and floor size, levies, rates, suburb, agency and agent. For sale and to rent. JSON, CSV or Excel.",
    "version": "1.0",
    "x-build-id": "9Hvmh3xeRaRvINdHL"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~property24-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-property24-property-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/sian.agency~property24-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-property24-property-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/sian.agency~property24-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-property24-property-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": {
          "operation": {
            "title": "🎯 What do you want to scrape?",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Pick one per run. Property Search sweeps results pages and is where the value is — around 21 rows per request. Listing Detail opens a single property page for the full description, every photo, the agency and named agents, levies, rates and taxes, and price per square metre; it is billed as an add-on because it costs one request per property.",
            "default": "search"
          },
          "country": {
            "title": "🌍 Property24 edition",
            "enum": [
              "za",
              "na",
              "bw",
              "zm",
              "zw",
              "mz",
              "ke"
            ],
            "type": "string",
            "description": "Which Property24 country site to search. South Africa is by far the largest, advertising roughly 222,000 listings for sale and 86,000 to rent; Kenya's index reports about 157,000 and Namibia about 6,000. Prices come back in that country's own currency and the currency is stamped on every row, so results from two editions can be told apart after export.",
            "default": "za"
          },
          "listingType": {
            "title": "🏷️ For sale or to rent",
            "enum": [
              "for-sale",
              "to-rent"
            ],
            "type": "string",
            "description": "Whether to search properties for sale or properties to rent. Rental prices are per month. Both are available on all seven editions.",
            "default": "for-sale"
          },
          "locations": {
            "title": "📍 Areas to search",
            "type": "array",
            "description": "Plain place names — Cape Town, Sandton, Durban, Pretoria, Stellenbosch, or Windhoek and Nairobi on the other editions. Each name is matched against Property24's own browse index before the search runs, so you never need the numeric area id the site uses in its URLs. Write 'Suburb, City' to go one level deeper, e.g. 'Sea Point, Cape Town' or 'Umhlanga, Durban'. A whole province works too — type Western Cape or Gauteng. Leave the list empty to sweep the entire country. One search runs per name,…",
            "default": [
              "Cape Town"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxResults": {
            "title": "🔢 Max properties",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many properties across all areas. Each results page returns about 21 rows, so the run stops at the first page that crosses your limit.",
            "default": 100
          },
          "includeDetails": {
            "title": "📄 Add descriptions, photos, agents, levies and rates",
            "type": "boolean",
            "description": "Open each property's own page to add the full advert text, the complete photo set, the agency and every named agent, the listing date, levies, rates and taxes, and price per square metre. Costs one extra request per property and bills the Listing Detail event on top of the search row.",
            "default": false
          },
          "minPrice": {
            "title": "💵 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest price to include, in the edition's own currency. For rentals this is the monthly amount. 0 means no lower bound.",
            "default": 0
          },
          "maxPrice": {
            "title": "💰 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Highest price to include, in the edition's own currency. For rentals this is the monthly amount. 0 means no upper bound.",
            "default": 0
          },
          "minBedrooms": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Fewest bedrooms to include. Property24 lists studios as 0.5 bedrooms, so 1 excludes them. 0 means no lower bound.",
            "default": 0
          },
          "maxBedrooms": {
            "title": "🛌 Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Most bedrooms to include. 0 means no upper bound.",
            "default": 0
          },
          "minBathrooms": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Fewest bathrooms to include. 0 means no lower bound.",
            "default": 0
          },
          "propertyType": {
            "title": "🏡 Property type",
            "enum": [
              "",
              "House",
              "Apartment / Flat",
              "Townhouse",
              "Vacant Land",
              "Farm",
              "Commercial Property",
              "Industrial Property"
            ],
            "type": "string",
            "description": "Keep only this property type. The list is Property24's own category set, taken from the type breakdown it prints on every area page. Leave on Any type to include everything.",
            "default": ""
          },
          "sortBy": {
            "title": "↕️ Sort order",
            "enum": [
              "default",
              "newest",
              "price-low",
              "price-high",
              "size"
            ],
            "type": "string",
            "description": "How Property24 should order the results before this actor reads them. Most recent first is the one to use on a schedule: run it daily and the new ads are on page one.",
            "default": "default"
          },
          "searchUrls": {
            "title": "🌐 Property24 search URLs",
            "type": "array",
            "description": "Paste Property24 results URLs instead of filling in the fields above, e.g. https://www.property24.com/for-sale/cape-town/western-cape/432. Every filter already on the URL is kept exactly as you built it on the site, and the country and for-sale/to-rent are read off the link itself, so URLs from different editions can be mixed in one run.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "listingUrls": {
            "title": "🔗 Property URLs",
            "type": "array",
            "description": "Used by the Listing Detail operation: Property24 property URLs to expand, e.g. https://www.property24.com/for-sale/cape-town-city-centre/cape-town/western-cape/9138/117401013. Any of the seven editions works.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}