{
  "openapi": "3.0.1",
  "info": {
    "title": "Dubai Property Leads Scraper",
    "description": "Scrapes Dubai property listings from PropertyFinder, Bayut, and Dubizzle by rent or buy category with filters for price, bedrooms, location, and furnishing. Returns each lead as a flat row with agent contact details.",
    "version": "0.1",
    "x-build-id": "8ysNwjfXRIDyfJNEZ"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parseforge~uae-dubai-property-leads-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parseforge-uae-dubai-property-leads-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/parseforge~uae-dubai-property-leads-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parseforge-uae-dubai-property-leads-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/parseforge~uae-dubai-property-leads-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parseforge-uae-dubai-property-leads-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",
        "required": [
          "category",
          "maxPages",
          "sources"
        ],
        "properties": {
          "propertiesUrls": {
            "title": "🔗 Individual Property URLs (Optional)",
            "type": "array",
            "description": "Extract data from specific individual property detail pages only. Supports PropertyFinder, Bayut, and Dubizzle URLs. When provided, the scraper will ONLY extract these specific properties and ignore all other settings (category/maxPages/sources). Leave empty to scrape listing pages normally. IMPORTANT: Only provide URLs to individual property detail pages, NOT listing/search pages.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "category": {
            "title": "Category",
            "enum": [
              "rent",
              "buy"
            ],
            "type": "string",
            "description": "Property category: rent or buy (only used when scraping listing pages)",
            "default": "rent"
          },
          "maxPages": {
            "title": "Max Pages per Source",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of pages to scrape from each source. Each page is roughly 25-30 listings. Deep pagination raises run time and cost sharply; prefer narrowing the filters.",
            "default": 2
          },
          "sources": {
            "title": "Sources",
            "uniqueItems": true,
            "type": "array",
            "description": "Which sites to scrape. PropertyFinder is the default: it needs no browser and no proxy, so it is far cheaper and faster and returns richer records. Add Bayut or Dubizzle only if you need their inventory — both require a stealth browser and residential proxy.",
            "items": {
              "type": "string",
              "enum": [
                "propertyfinder",
                "bayut",
                "dubizzle"
              ]
            },
            "default": [
              "propertyfinder"
            ]
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Free users: limited to 10 items (preview). Paid users: optional cap on the run. A run reaches at most ~4,000 listings (50 pages x ~28 listings x 3 sources)."
          },
          "minPrice": {
            "title": "Min Price (AED)",
            "type": "integer",
            "description": "Minimum property price in AED"
          },
          "maxPrice": {
            "title": "Max Price (AED)",
            "type": "integer",
            "description": "Maximum property price in AED"
          },
          "minBedrooms": {
            "title": "Min Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms (0 for studio)"
          },
          "maxBedrooms": {
            "title": "Max Bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms"
          },
          "minBathrooms": {
            "title": "Min Bathrooms",
            "minimum": 1,
            "type": "integer",
            "description": "Minimum number of bathrooms"
          },
          "maxBathrooms": {
            "title": "Max Bathrooms",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of bathrooms"
          },
          "minArea": {
            "title": "Min Area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum property area in square feet"
          },
          "maxArea": {
            "title": "Max Area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum property area in square feet"
          },
          "propertyTypes": {
            "title": "Property Types",
            "type": "array",
            "description": "Filter by property types. Leave empty for all types.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Filter by specific locations/areas in Dubai. Leave empty for all locations.",
            "items": {
              "type": "string"
            }
          },
          "furnishingStatus": {
            "title": "Furnishing Status",
            "enum": [
              "all",
              "furnished",
              "unfurnished",
              "partly-furnished"
            ],
            "type": "string",
            "description": "Filter by furnishing status",
            "default": "all"
          },
          "completionStatus": {
            "title": "Completion Status",
            "enum": [
              "all",
              "ready",
              "off-plan"
            ],
            "type": "string",
            "description": "Filter by completion status",
            "default": "all"
          },
          "amenities": {
            "title": "Required Amenities",
            "type": "array",
            "description": "Filter properties that have ALL of these amenities",
            "items": {
              "type": "string"
            }
          },
          "extractDetailedInfo": {
            "title": "Extract Detailed Info",
            "type": "boolean",
            "description": "Visit each property's own page to add fields the listing pages do not carry: official zone name, agency and agent licence numbers, project delivery date, the full amenity and spec list, and full-resolution images. Costs one extra request per property, so it makes runs slower and more expensive.",
            "default": false
          },
          "extractAgentContact": {
            "title": "Extract Agent Contact",
            "type": "boolean",
            "description": "Include agent contact information (name, phone, email)",
            "default": true
          },
          "proxyConfiguration": {
            "title": "🌍 Proxy",
            "type": "object",
            "description": "Proxy settings for reliable scraping. Apify Proxy with RESIDENTIAL group is recommended for Bayut and Dubizzle.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "AE"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}