{
  "openapi": "3.0.1",
  "info": {
    "title": "PropertyFinder Scraper — UAE & MENA Real Estate + Agents",
    "description": "PropertyFinder scraper for UAE, Saudi, Qatar & Egypt — paste any search URL for property listings, agents and brokers. Plus an instant agent database: 8,500+ UAE & Qatar agents with email, phone, WhatsApp and deal stats, filterable by city, brokerage or language. JSON/CSV. Pure HTTP.",
    "version": "0.0",
    "x-build-id": "EeUtcqW0wG7Hjbi9E"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~apify-propertyfinder-cheerio-ppe/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-apify-propertyfinder-cheerio-ppe",
        "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/memo23~apify-propertyfinder-cheerio-ppe/runs": {
      "post": {
        "operationId": "runs-sync-memo23-apify-propertyfinder-cheerio-ppe",
        "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/memo23~apify-propertyfinder-cheerio-ppe/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-apify-propertyfinder-cheerio-ppe",
        "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": {
          "instantDatabase": {
            "title": "Use Instant Database (no scraping)",
            "type": "boolean",
            "description": "Serve matching agents from the pre-collected database instead of live-scraping. Auto-enabled if you set any of the filters below.",
            "default": false
          },
          "dbCountry": {
            "title": "Country",
            "enum": [
              "ae",
              "sa",
              "qa",
              "eg"
            ],
            "type": "string",
            "description": "Which PropertyFinder market to serve agents from."
          },
          "dbCity": {
            "title": "City / Emirate (optional)",
            "type": "string",
            "description": "Filter agents by their office city/emirate, e.g. Dubai, Abu Dhabi, Sharjah, Ajman, Riyadh."
          },
          "dbBrokerage": {
            "title": "Brokerage contains (optional)",
            "type": "string",
            "description": "Filter to a brokerage whose name contains this text, e.g. Betterhomes, Allsopp, fam Properties."
          },
          "dbLanguage": {
            "title": "Language (optional)",
            "type": "string",
            "description": "Filter to agents who speak this language, e.g. Arabic, Russian, French, Hindi."
          },
          "dbNationality": {
            "title": "Nationality (optional)",
            "type": "string",
            "description": "Filter by agent nationality, e.g. United Kingdom, India, Egypt."
          },
          "dbHasEmail": {
            "title": "Only agents with an email",
            "type": "boolean",
            "description": "Return only agents that have an email address on file.",
            "default": false
          },
          "dbHasPhone": {
            "title": "Only agents with a phone",
            "type": "boolean",
            "description": "Return only agents that have a phone number on file.",
            "default": false
          },
          "dbHasWhatsapp": {
            "title": "Only agents with WhatsApp",
            "type": "boolean",
            "description": "Return only agents that have a WhatsApp number on file.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "URLs to start with. Supports PropertyFinder search URLs (e.g. `https://www.propertyfinder.ae/en/search?c=2&fu=0&ob=mr&page=1`), property detail pages, agent profiles (`/en/agent/{slug}-{id}`), and broker/agent-directory pages (`/en/find-agent`). Works across ae / sa / qa / eg.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum number of items",
            "type": "integer",
            "description": "Maximum number of agents (database mode) or listings/agents (live scrape) to return.",
            "default": 1000
          },
          "monitoringMode": {
            "title": "Monitoring mode (only new listings)",
            "type": "boolean",
            "description": "Live scrape only: scrape only listings that are new compared to previous runs.",
            "default": false
          },
          "enrichDld": {
            "title": "DLD match: building, land number and unit candidates (Dubai)",
            "type": "boolean",
            "description": "When ON, each Dubai listing is matched against Dubai Land Department (DLD) open records: building, project, land number and the registered units that fit its bedrooms and size (`dldCandidateUnits`, `dldCandidateCount`), narrowed by any floor the listing mentions. An exact unit number (`dldUnitNumber`) is returned only when exactly one registered unit fits. In towers the same layout repeats on most floors, so that is rare (about 2 in 100 listings in our tests) and most rows get the candidate list instead. Listings outside Dubai are skipped, and villas and townhouses (not in the DLD unit records) come back without a match. No extra charge. No owner personal data. Default: off.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 10
          },
          "minConcurrency": {
            "title": "Min Concurrency",
            "type": "integer",
            "description": "Minimum number of pages that will be processed at the same time.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "type": "integer",
            "description": "Number of times the crawler will retry a failed request before giving up.",
            "default": 5
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Specifies proxy servers used for live scraping (not needed in Instant Database mode).",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}