{
  "openapi": "3.0.1",
  "info": {
    "title": "PropertyFinder Scraper & New-Listing Monitor - Dubai & UAE",
    "description": "Turn monitoring on and every later run returns only the listings it has not returned before, so you are never charged for the same property twice. Every PropertyFinder listing as clean JSON: price with its meaning, bedrooms, bathrooms, area, community, furnishing, coordinates. Unofficial.",
    "version": "0.1",
    "x-build-id": "QDCf5NfEhcYyg35qz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~propertyfinder-listings/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-propertyfinder-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/neverempty~propertyfinder-listings/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-propertyfinder-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/neverempty~propertyfinder-listings/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-propertyfinder-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": {
          "searchUrl": {
            "title": "PropertyFinder search URL (optional)",
            "type": "string",
            "description": "Paste a PropertyFinder listing page, for example https://www.propertyfinder.ae/en/buy/dubai/villas-for-sale.html, and the settings below are ignored. Any query string you paste is dropped: PropertyFinder's robots.txt disallows filter parameters, so filtering happens here instead, on the rows already fetched."
          },
          "offeringType": {
            "title": "Sale or rent",
            "enum": [
              "buy",
              "rent",
              "commercial-buy",
              "commercial-rent"
            ],
            "type": "string",
            "description": "Residential sale, residential rent, or the commercial equivalents.",
            "default": "buy"
          },
          "city": {
            "title": "Emirate or city",
            "type": "string",
            "description": "dubai, abu-dhabi, sharjah, ajman, ras-al-khaimah, fujairah, umm-al-quwain or al-ain. Leave empty to search the whole UAE (188,000+ properties for sale at the time of writing).",
            "default": "dubai"
          },
          "propertyType": {
            "title": "Property type",
            "type": "string",
            "description": "properties (all types), apartments, villas, townhouses, penthouses, or a commercial type such as offices, shops or warehouses. It has to be the plural word PropertyFinder itself uses in the address.",
            "default": "apartments"
          },
          "maxListings": {
            "title": "Maximum properties",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many properties to return. You are charged for the rows you actually receive.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum listing pages to open",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "A hard stop on how many pages are requested, whatever the filters do. 0 lets the run work it out from the number of properties you asked for.",
            "default": 0
          },
          "includeDescription": {
            "title": "Include the full description",
            "type": "boolean",
            "description": "The advert text as plain text. Turn it off for a smaller dataset.",
            "default": true
          },
          "useProxy": {
            "title": "Use an Apify proxy",
            "type": "boolean",
            "description": "Off by default because PropertyFinder answers Apify's own network directly, which is faster and costs you no proxy traffic. If PropertyFinder ever starts blocking, the run switches to a proxy on its own.",
            "default": false
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Keep only properties whose title, description, type, location, amenities or brokerage contain these words. No extra requests are made: the words are matched against rows already fetched.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Keyword match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "any: at least one keyword. all: every keyword.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop properties containing any of these words.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "brokerNames": {
            "title": "Brokerages",
            "type": "array",
            "description": "Keep only properties listed by these brokerages. Partial names work.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Minimum price (AED)",
            "minimum": 0,
            "type": "integer",
            "description": "Sale prices are totals; rents are per year, the way PropertyFinder publishes them.",
            "default": 0
          },
          "maxPrice": {
            "title": "Maximum price (AED)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum.",
            "default": 0
          },
          "requirePrice": {
            "title": "Only properties with a published price",
            "type": "boolean",
            "description": "Off by default: a property with no price is not treated as a cheap one, it is simply kept.",
            "default": false
          },
          "minBedrooms": {
            "title": "Minimum bedrooms",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "0 keeps studios and up. -1 turns the filter off.",
            "default": -1
          },
          "maxBedrooms": {
            "title": "Maximum bedrooms",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "minBathrooms": {
            "title": "Minimum bathrooms",
            "minimum": -1,
            "maximum": 20,
            "type": "integer",
            "description": "-1 turns the filter off.",
            "default": -1
          },
          "minAreaSqft": {
            "title": "Minimum size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no minimum.",
            "default": 0
          },
          "maxAreaSqft": {
            "title": "Maximum size (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum.",
            "default": 0
          },
          "furnishing": {
            "title": "Furnishing",
            "enum": [
              "any",
              "YES",
              "NO",
              "PARTLY"
            ],
            "type": "string",
            "description": "PropertyFinder publishes exactly three values: YES, NO and PARTLY.",
            "default": "any"
          },
          "verifiedOnly": {
            "title": "Verified listings only",
            "type": "boolean",
            "description": "PropertyFinder marks listings it has verified with the brokerage. 105 of 111 properties measured carried the mark.",
            "default": false
          },
          "completionStatus": {
            "title": "Completion status",
            "enum": [
              "any",
              "completed",
              "off_plan"
            ],
            "type": "string",
            "description": "Sale listings carry this; rental listings do not publish it, so this filter leaves rentals alone.",
            "default": "any"
          },
          "listedWithinDays": {
            "title": "Listed within the last N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "0 means no date filter. A property whose date cannot be read is kept, not dropped.",
            "default": 0
          },
          "monitoringMode": {
            "title": "Only return listings that are new since the last run",
            "type": "boolean",
            "description": "Turn this on and schedule the Actor: each run returns only the properties it has never returned before, so you are charged for new stock rather than for the same pages again. The first run returns everything and remembers it.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Forget what was already returned",
            "type": "boolean",
            "description": "Clears the memory for this search, so the next monitoring run starts from scratch.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}