{
  "openapi": "3.0.1",
  "info": {
    "title": "Hall Portugal Scraper - Real Estate Listings",
    "description": "Scrape property listings from Hall Rede Imobiliária (hall.pt), Portugal. Price, typology, useful, gross and land area, photos, energy certificate, coordinates, district, municipality, parish and agent details. Sale, rent and business transfer. No login.",
    "version": "0.1",
    "x-build-id": "U2ghirDehUCzUOVE6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/studio-amba~hall-pt-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-studio-amba-hall-pt-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/studio-amba~hall-pt-scraper/runs": {
      "post": {
        "operationId": "runs-sync-studio-amba-hall-pt-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/studio-amba~hall-pt-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-studio-amba-hall-pt-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": {
          "transactionTypes": {
            "title": "Transaction type",
            "maxItems": 3,
            "uniqueItems": true,
            "type": "array",
            "description": "Sale (Compra), rent (Arrendamento) or business transfer (Trespasse). Leave empty for all three.",
            "items": {
              "type": "string",
              "enum": [
                "sale",
                "rent",
                "transfer"
              ],
              "enumTitles": [
                "Sale (Compra)",
                "Rent (Arrendamento)",
                "Business transfer (Trespasse)"
              ]
            }
          },
          "propertyTypes": {
            "title": "Property type",
            "maxItems": 14,
            "uniqueItems": true,
            "type": "array",
            "description": "Only these property types. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "house",
                "house-floor",
                "farm",
                "garage",
                "building",
                "office",
                "warehouse",
                "shop",
                "business",
                "land",
                "multipurpose-space",
                "laundry",
                "restaurant"
              ],
              "enumTitles": [
                "Apartment (Apartamento)",
                "House (Moradia)",
                "House floor (Andar moradia)",
                "Farm / estate (Quinta/Herdade)",
                "Garage (Garagem)",
                "Building (Prédio)",
                "Office (Escritório)",
                "Warehouse (Armazém)",
                "Shop (Loja)",
                "Business for transfer (Com negócio)",
                "Land (Terreno)",
                "Multipurpose space (Espaço Multiusos)",
                "Laundry (Lavandaria)",
                "Restaurant (Restaurante)"
              ]
            }
          },
          "district": {
            "title": "District (distrito)",
            "type": "string",
            "description": "Portuguese district, e.g. Setúbal, Beja, Évora, Lisboa. Accents optional. The run fails with the list of available districts if hall.pt has no listings there."
          },
          "municipality": {
            "title": "Municipality (concelho)",
            "type": "string",
            "description": "Municipality, e.g. Palmela, Barreiro, Montijo, Montemor-o-Novo. Accents optional."
          },
          "parish": {
            "title": "Parish (freguesia)",
            "type": "string",
            "description": "Parish, e.g. Pinhal Novo. Accents optional. Setting a municipality too makes the lookup faster."
          },
          "bedrooms": {
            "title": "Typology / bedrooms",
            "maxItems": 10,
            "type": "array",
            "description": "Number of bedrooms as a JSON list, e.g. [2, 3] (T0 = 0, T1 = 1 ... 9 means T9 or more). Leave empty for any.",
            "items": {
              "type": "integer"
            }
          },
          "minPrice": {
            "title": "Minimum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum asking price or monthly rent in EUR. Listings without a published price are kept."
          },
          "maxPrice": {
            "title": "Maximum price (EUR)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum asking price or monthly rent in EUR. Listings without a published price are kept."
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "newest",
              "price_asc",
              "price_desc"
            ],
            "type": "string",
            "description": "Order in which listings are collected. Matters when Max items is lower than the number of matching listings.",
            "default": "newest"
          },
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 50,
            "type": "array",
            "description": "Optional hall.pt search result URLs (https://www.hall.pt/pt-PT/Imoveis/...) or listing URLs (https://www.hall.pt/pt-PT/Imovel/...). When set, the filters above are only used to check the results. Max 50.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Maximum number of listings to save. hall.pt has a few hundred listings in total, so 1000 covers the full catalogue.",
            "default": 1000
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "hall.pt has no anti-bot wall (see recon), so Apify's automatic proxy is enough.",
            "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}