{
  "openapi": "3.0.1",
  "info": {
    "title": "Property Finder & Bayut Scraper - UAE, KSA, Qatar Listings",
    "description": "Property listings in one clean schema: Property Finder (UAE, Saudi Arabia, Qatar, Bahrain, Egypt) and Bayut (Qatar, Oman, Jordan). Price, beds, area, location, agency, photos, dates. Tracks new listings and price drops between runs.",
    "version": "0.1",
    "x-build-id": "GgYfo8eBlGe7zcVlV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/dottti~gulf-property-listings/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-dottti-gulf-property-listings",
        "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/dottti~gulf-property-listings/runs": {
      "post": {
        "operationId": "runs-sync-dottti-gulf-property-listings",
        "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/dottti~gulf-property-listings/run-sync": {
      "post": {
        "operationId": "run-sync-dottti-gulf-property-listings",
        "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": {
          "startUrls": {
            "title": "Search URLs (optional)",
            "type": "array",
            "description": "Search result pages copied from bayut.com, bayut.sa, bayut.qa, bayut.om, bayut.jo or propertyfinder.ae / .sa / .qa / .bh / .eg, with any filters you set on the site. Each URL becomes its own search with its own free status row. When you add URLs, the simple filters below are ignored.",
            "items": {
              "type": "string"
            }
          },
          "sites": {
            "title": "Sites",
            "type": "array",
            "description": "Used when no search URLs are given. Pick one or both sites. Each site runs its own search with the same filters. Bayut works for Qatar, Oman and Jordan; Bayut UAE and Saudi Arabia currently show a browser check and return a free blocked status row.",
            "items": {
              "type": "string",
              "enum": [
                "propertyfinder",
                "bayut"
              ],
              "enumTitles": [
                "Property Finder",
                "Bayut"
              ]
            },
            "default": [
              "propertyfinder"
            ]
          },
          "country": {
            "title": "Country",
            "enum": [
              "ae",
              "sa",
              "qa",
              "bh",
              "eg",
              "om",
              "jo"
            ],
            "type": "string",
            "description": "Property Finder covers UAE, Saudi Arabia, Qatar, Bahrain and Egypt. Bayut covers UAE, Saudi Arabia, Qatar, Oman and Jordan. A site that does not cover the country returns a free status row.",
            "default": "ae"
          },
          "city": {
            "title": "City or area",
            "type": "string",
            "description": "A city, community or building name as the site spells it, for example Dubai, Dubai Marina, Abu Dhabi, Riyadh, Jeddah, Doha, Muscat, Amman. Leave empty for the whole country.",
            "default": "Dubai"
          },
          "purpose": {
            "title": "Rent or buy",
            "enum": [
              "rent",
              "buy"
            ],
            "type": "string",
            "description": "Listings for rent or for sale.",
            "default": "rent"
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "For example apartment, villa, townhouse, penthouse, duplex, land, office, shop, warehouse. Use any for all types.",
            "default": "any"
          },
          "minBeds": {
            "title": "Minimum bedrooms",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "0 means studio. Leave empty for no minimum."
          },
          "maxBeds": {
            "title": "Maximum bedrooms",
            "minimum": 0,
            "maximum": 8,
            "type": "integer",
            "description": "Leave empty for no maximum."
          },
          "minPrice": {
            "title": "Minimum price",
            "minimum": 0,
            "type": "integer",
            "description": "In the local currency of the country (AED, SAR, QAR, BHD, EGP, OMR, JOD). For rent this is the rent for the rent period the site shows, usually yearly in the UAE."
          },
          "maxPrice": {
            "title": "Maximum price",
            "minimum": 0,
            "type": "integer",
            "description": "In the local currency of the country."
          },
          "furnished": {
            "title": "Furnishing",
            "enum": [
              "any",
              "furnished",
              "unfurnished"
            ],
            "type": "string",
            "description": "Only furnished or only unfurnished listings.",
            "default": "any"
          },
          "rentFrequency": {
            "title": "Rent period",
            "enum": [
              "any",
              "yearly",
              "monthly",
              "weekly",
              "daily"
            ],
            "type": "string",
            "description": "For rentals only: yearly, monthly, weekly or daily rent.",
            "default": "any"
          },
          "maxItems": {
            "title": "Max listings per search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Stop each search (each URL, or each site) after this many listings. Newest listings come first. Bayut allows at most 1,000 listings per search.",
            "default": 20
          },
          "onlyNew": {
            "title": "Only new listings",
            "type": "boolean",
            "description": "Return only listings not seen in earlier runs of the same watch list. The first run returns everything and saves it as the baseline. Best with a daily schedule.",
            "default": false
          },
          "onlyChanged": {
            "title": "Only price changes",
            "type": "boolean",
            "description": "Return only listings whose price changed since the last run of the same watch list. With both options on, you get new listings and price changes.",
            "default": false
          },
          "watchListName": {
            "title": "Watch list name (optional)",
            "type": "string",
            "description": "A name to keep tracking state under, for example dubai-marina-2br. Use the same name on every scheduled run. Leave empty to use a name made from your searches, which changes when you change the searches."
          },
          "includeDescription": {
            "title": "Include listing description",
            "type": "boolean",
            "description": "Add the full description text (Property Finder only; Bayut search results have no description). Off keeps rows small.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave empty: the actor starts without a proxy and moves to Apify datacenter, then residential proxy only if a site blocks it. Set a proxy here to force one."
          },
          "autoProxyFallback": {
            "title": "Automatic proxy fallback",
            "type": "boolean",
            "description": "When a site blocks a request, retry on Apify datacenter proxy and then residential proxy.",
            "default": true
          },
          "allowResidentialFallback": {
            "title": "Allow residential proxy",
            "type": "boolean",
            "description": "Allow the last step of the fallback to use residential proxy. Turn off to never use it.",
            "default": true
          },
          "requestDelayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 150,
            "maximum": 30000,
            "type": "integer",
            "description": "Pause between requests to the same site. Higher is gentler.",
            "default": 400
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}