{
  "openapi": "3.0.1",
  "info": {
    "title": "Property Finder Scraper - UAE Real Estate, Agents & Leads",
    "description": "Scrape Property Finder UAE & GCC listings for sale & rent: price, beds/baths, size, geo, RERA permit, completion status, off-plan projects (developer, payment plans), photos — plus agent & brokerage leads (email, phone, WhatsApp). New-listing & price-drop monitoring. No browser.",
    "version": "0.1",
    "x-build-id": "B6jD786zH80jMZMVh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~property-finder-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-property-finder-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/scrapesage~property-finder-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-property-finder-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/scrapesage~property-finder-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-property-finder-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": {
          "dealType": {
            "title": "Deal type",
            "enum": [
              "buy",
              "rent"
            ],
            "type": "string",
            "description": "Scrape properties **for sale** (buy) or **to rent**. Applies to the `searchLocations` below — start URLs keep their own type.",
            "default": "buy"
          },
          "country": {
            "title": "Property Finder country site",
            "enum": [
              "ae",
              "qa",
              "sa",
              "bh",
              "eg"
            ],
            "type": "string",
            "description": "Which Property Finder site to search. UAE (propertyfinder.ae) is the flagship; Qatar, Saudi, Bahrain and Egypt are also supported.",
            "default": "ae"
          },
          "searchLocations": {
            "title": "Locations",
            "type": "array",
            "description": "Places to search. Use plain names — emirates/cities (`Dubai`, `Abu Dhabi`, `Sharjah`) or communities (`Dubai Marina`, `Business Bay`, `Jumeirah Village Circle`). Each is auto-resolved via Property Finder's own SEO pages. You can also paste a numeric PF location id or a full PF search URL.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs (search / property / broker pages)",
            "type": "array",
            "description": "Optional. Paste Property Finder **search URLs** (`/en/search?...` or `/en/buy/dubai/...html`), individual **property URLs** (`/en/plp/...html`), or **broker/agency URLs** (`/en/broker/<slug>`). Search URLs are paginated with their filters baked in; property URLs are scraped in full detail; broker URLs return the full agent roster as leads.",
            "items": {
              "type": "string"
            }
          },
          "brokerUrls": {
            "title": "Broker / agency URLs (agent leads)",
            "type": "array",
            "description": "Optional. Property Finder broker/agency page URLs (`https://www.propertyfinder.ae/en/broker/<slug>`). Each returns the brokerage details plus every agent's contact (name, email, phone, WhatsApp, languages) as a `type: \"agent\"` lead.",
            "items": {
              "type": "string"
            }
          },
          "propertyTypes": {
            "title": "Property types",
            "type": "array",
            "description": "Restrict to specific property types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "apartment",
                "villa",
                "townhouse",
                "penthouse",
                "duplex",
                "compound",
                "hotel-apartment",
                "land",
                "floor",
                "building"
              ],
              "enumTitles": [
                "Apartment / flat",
                "Villa",
                "Townhouse",
                "Penthouse",
                "Duplex",
                "Compound",
                "Hotel apartment",
                "Land / plot",
                "Whole floor",
                "Whole building"
              ]
            },
            "default": []
          },
          "minPrice": {
            "title": "Min price (AED)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price. For rentals this is the listing's annual/period price as published by Property Finder. Leave empty for no minimum."
          },
          "maxPrice": {
            "title": "Max price (AED)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price. Leave empty for no maximum."
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms (use 0 for studios)."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms."
          },
          "furnished": {
            "title": "Furnishing",
            "enum": [
              "",
              "furnished",
              "unfurnished"
            ],
            "type": "string",
            "description": "Restrict by furnishing. Leave as Any for all.",
            "default": ""
          },
          "completionStatus": {
            "title": "Completion status",
            "enum": [
              "",
              "ready",
              "off-plan"
            ],
            "type": "string",
            "description": "Ready (completed) properties, off-plan (under construction), or any.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort order",
            "enum": [
              "newest",
              "price-asc",
              "price-desc",
              "verified",
              "featured"
            ],
            "type": "string",
            "description": "How Property Finder orders results before they are collected. Newest first is ideal for fresh-stock monitoring.",
            "default": "newest"
          },
          "includePropertyDetails": {
            "title": "Include full property details",
            "type": "boolean",
            "description": "Open each property page for extra detail: full amenities list, community price trends, mortgage products and community insights. The listing card already carries 40+ rich fields (price, beds/baths, size, geo, RERA, agent & broker email/phone/WhatsApp, description, photos), so leave this OFF for a faster, cheaper run. Adds one page fetch per property.",
            "default": false
          },
          "includeAgentLeads": {
            "title": "Also output agent leads",
            "type": "boolean",
            "description": "Emit one extra **lead record per unique agent** found across the results (`type: \"agent\"`) — agent name, email, phone, WhatsApp, languages, brokerage name/email/phone and a sample listing. Perfect for B2B prospecting (proptech, mortgage, conveyancing, photography, staging, CRM).",
            "default": false
          },
          "maxResults": {
            "title": "Max properties (whole run)",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Global cap on the total number of properties emitted in this run.",
            "default": 100
          },
          "monitorMode": {
            "title": "Monitoring mode — only new & changed",
            "type": "boolean",
            "description": "Remember the properties already returned and emit ONLY ones that are **new** or whose **price changed** since the last run (tagged `changeType` = `new` | `price_changed`, with `previousPrice` and `priceDelta`). Ideal for tracking fresh stock and price drops in a community. Pairs with Apify Schedules — schedule the run, this flag handles the de-duplication.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that holds the 'already seen' properties for monitoring mode. Use a different name per tracked search to keep histories separate (lowercase letters, digits and hyphens).",
            "default": "property-finder-monitor"
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "Maximum parallel requests. Keep it moderate to stay friendly to Property Finder's servers and avoid rate limiting.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings. Property Finder serves clean pages to datacenter IPs, so the default Apify Proxy works well and keeps costs low. If you hit rate limiting on very large runs, switch to Residential.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}