{
  "openapi": "3.0.1",
  "info": {
    "title": "AngoCasa Property Scraper — Angola Real Estate",
    "description": "Angolan property adverts from AngoCasa: asking price in kwanzas or dollars, typology, floor and plot area, province and Luanda zone, photos, and the advertiser's phone and WhatsApp number on every row. Search 18 provinces and 39 Luanda zones, or open single adverts for the full amenity block and dat",
    "version": "1.0",
    "x-build-id": "oTU6bNgdRfRF39T3p"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~angocasa-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-angocasa-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~angocasa-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-angocasa-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~angocasa-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-angocasa-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 to do",
            "enum": [
              "search",
              "detail"
            ],
            "type": "string",
            "description": "Property Search walks the portal's result grid and returns 50 adverts per request, each already carrying a phone and WhatsApp number. Property Detail takes advert addresses you already have and opens each one for the amenity block, every photo and the publication date. One operation per run.",
            "default": "search"
          },
          "dealType": {
            "title": "🤝 For sale or for rent",
            "enum": [
              "listar-todos",
              "venda",
              "arrenda"
            ],
            "type": "string",
            "description": "Sale adverts carry an asking price, rent adverts a monthly rent, and every row is labelled either way. Roughly three adverts in five are for sale. These are the only two deal types the portal's search actually honours — its short-stay section is not reachable from the search grid, so it is not offered here.",
            "default": "listar-todos"
          },
          "propertyType": {
            "title": "🏠 Property type",
            "enum": [
              "all",
              "apartamento",
              "vivenda",
              "terreno",
              "escritorio",
              "loja",
              "armazem",
              "empreendimento",
              "guest-house",
              "hotel",
              "estaleiro",
              "restaurante",
              "quinta",
              "quarto-suite",
              "outro"
            ],
            "type": "string",
            "description": "Apartments and villas are the two deep sections and together are about four adverts in five. Land plots are sale-only. The long tail — hotels, rooms, restaurants, farms, builders' yards — holds a few dozen adverts each nationally, so pair those with All of Angola rather than a single Luanda zone.",
            "default": "all"
          },
          "location": {
            "title": "📍 Where",
            "enum": [
              "angola",
              "angola-bengo",
              "angola-benguela",
              "angola-bie",
              "angola-cabinda",
              "angola-cuando_cubango",
              "angola-cunene",
              "angola-huambo",
              "angola-huila",
              "angola-kwanza_norte",
              "angola-kwanza_sul",
              "angola-luanda",
              "angola-lunda_norte",
              "angola-lunda_sul",
              "angola-malange",
              "angola-moxico",
              "angola-namibe",
              "angola-uige",
              "angola-zaire",
              "angola-luanda-alvalade",
              "angola-luanda-bairro_azul",
              "angola-luanda-bairro_popular",
              "angola-luanda-barra_do_kwanza",
              "angola-luanda-benfica_inclui_lar_do_patriota_",
              "angola-luanda-cacuaco",
              "angola-luanda-camama",
              "angola-luanda-cassenda",
              "angola-luanda-cazenga",
              "angola-luanda-chicala",
              "angola-luanda-comandante_valodia_combatentes_",
              "angola-luanda-coqueiros",
              "angola-luanda-corimba",
              "angola-luanda-cruzeiro",
              "angola-luanda-futungo_de_belas",
              "angola-luanda-icolo_e_bengo",
              "angola-luanda-ilha_do_cabo",
              "angola-luanda-ingombota",
              "angola-luanda-kilamba",
              "angola-luanda-kinaxixi",
              "angola-luanda-maculusso",
              "angola-luanda-maianga",
              "angola-luanda-martires_do_kifangondo",
              "angola-luanda-miramar",
              "angola-luanda-morro_bento",
              "angola-luanda-mussulo",
              "angola-luanda-nova_vida_golfe",
              "angola-luanda-palanca",
              "angola-luanda-praia_do_bispo",
              "angola-luanda-quicama",
              "angola-luanda-ramiro",
              "angola-luanda-rangel",
              "angola-luanda-samba",
              "angola-luanda-sambizanga",
              "angola-luanda-sao_paulo",
              "angola-luanda-talatona",
              "angola-luanda-viana",
              "angola-luanda-vila_alice_nelito_soares_",
              "angola-luanda-zango",
              "portugal",
              "namibia"
            ],
            "type": "string",
            "description": "Angola as a whole, one of its 18 provinces, or one of the 39 named Luanda zones. Luanda holds about 10,250 of the roughly 10,500 adverts on the portal, and inside it Talatona, Benfica and Ingombota are the deep ones. Portugal and Namibia carry the portal's small diaspora stock. Every value in this list was checked against the live site and narrows the result set; the portal's own country menu also shows South Africa, Mozambique, Guinea-Bissau, São Tomé and the UAE, but its search returns the…",
            "default": "angola-luanda"
          },
          "maxItems": {
            "title": "🔢 How many adverts",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stops the sweep once this many adverts have been returned. The portal serves 50 per request, so 100 is two requests. Set it above the slice's own size to drain it completely — All of Angola is about 10,350 adverts, Luanda about 10,250, Talatona about 2,650.",
            "default": 100
          },
          "propertyUrl": {
            "title": "🔗 Advert address",
            "type": "string",
            "description": "Used by Property Detail. Paste the full address of an AngoCasa advert, exactly as it appears in your browser. An advert number on its own will not work: AngoCasa has no page that an ID alone opens, so the address is the only way in. Ignored by Property Search.",
            "default": ""
          },
          "propertyUrls": {
            "title": "🔗 Several advert addresses",
            "type": "array",
            "description": "Used by Property Detail for more than one advert at a time. One full AngoCasa advert address per line. Duplicates are removed before anything is charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}