{
  "openapi": "3.0.1",
  "info": {
    "title": "Bayut Scraper [Just 💰$0.8] — UAE Property Listings & Agents",
    "description": "💰 $0.80 per 1,000 rows across the UAE, Saudi Arabia, Qatar, Oman and Jordan. Scrape Bayut property listings plus agents and agencies from one actor — every row arrives structured with price, location and direct agent contact including email, ready to use.",
    "version": "0.1",
    "x-build-id": "0kqteIHEM00DWetBg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/blackfalcondata~bayut-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-blackfalcondata-bayut-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/blackfalcondata~bayut-scraper/runs": {
      "post": {
        "operationId": "runs-sync-blackfalcondata-bayut-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/blackfalcondata~bayut-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-blackfalcondata-bayut-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": {
          "startUrls": {
            "title": "🔗 Bayut search URLs",
            "type": "array",
            "description": "Paste Bayut URLs from any country site (.com/.sa/.qa/.om/.jo) — property search URLs, single listing URLs (/property/details-12345678.html), /companies/ or /brokers/ URLs. Each becomes its own search; every row is tagged rowType (listing/company/broker). These replace the location, purpose, type, price and bedroom filters below; the extra filters (max bedrooms/bathrooms, area, amenities, posted within, verified, video, 360° tour, floor plan) still apply on top.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "country": {
            "title": "🌍 Country",
            "enum": [
              "ae",
              "sa",
              "qa",
              "om",
              "jo"
            ],
            "type": "string",
            "description": "Which Bayut country site to search with the structured filters below. Ignored for Start URLs (they pick their country from the URL host).",
            "default": "ae"
          },
          "instantDatabase": {
            "title": "👥 Agent database (UAE & Saudi)",
            "type": "boolean",
            "description": "Return agents (brokers) with name, agency, email, phone and WhatsApp — no URL needed. Uses the Country above (UAE or Saudi only).",
            "default": false
          },
          "dbAgencyName": {
            "title": "🏢 Agency name filter",
            "type": "string",
            "description": "Only agents at agencies matching this name (e.g. \"Betterhomes\"; all branches)."
          },
          "dbHasEmail": {
            "title": "✉️ Only agents with email",
            "type": "boolean",
            "description": "Keep only agents with an email.",
            "default": false
          },
          "dbHasPhone": {
            "title": "📞 Only agents with phone",
            "type": "boolean",
            "description": "Keep only agents with a phone.",
            "default": false
          },
          "dbHasWhatsapp": {
            "title": "💬 Only agents with WhatsApp",
            "type": "boolean",
            "description": "Keep only agents with WhatsApp.",
            "default": false
          },
          "location": {
            "title": "📍 Location",
            "type": "string",
            "description": "Emirate, city or community — e.g. \"Dubai\", \"Dubai Marina\", \"Business Bay\". Matched to Bayut's location list; covers all sub-communities. Accepts an exact slug like \"/dubai/dubai-marina\", or a JSON array for several areas."
          },
          "query": {
            "title": "🔍 Keyword (optional)",
            "type": "string",
            "description": "Optional free-text keyword to narrow results within the selected location — e.g. \"sea view\", \"maids room\", a building or project name. Leave empty to return all listings for the filters."
          },
          "purpose": {
            "title": "🎯 Purpose",
            "enum": [
              "for-sale",
              "for-rent"
            ],
            "type": "string",
            "description": "For-sale or for-rent listings.",
            "default": "for-rent"
          },
          "propertyType": {
            "title": "🏠 Property type",
            "enum": [
              "",
              "apartments",
              "villas",
              "townhouses",
              "penthouses",
              "villa-compound",
              "hotel-apartments",
              "residential-plots",
              "residential-floors",
              "residential-building",
              "offices",
              "shops",
              "warehouses",
              "commercial-plots",
              "commercial-villas",
              "commercial-buildings",
              "labour-camps",
              "commercial-floors",
              "factories",
              "showrooms"
            ],
            "type": "string",
            "description": "Restrict to one property type. Leave empty for all types.",
            "default": ""
          },
          "priceMin": {
            "title": "💰 Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price, in the selected country's local currency (AED, SAR, QAR, OMR or JOD). For rentals this is per the selected rent frequency."
          },
          "priceMax": {
            "title": "💰 Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price, in the selected country's local currency."
          },
          "bedsMin": {
            "title": "🛏️ Min bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bedrooms (0 = studio)."
          },
          "bedsMax": {
            "title": "🛏️ Max bedrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bedrooms (0 = studio)."
          },
          "bathsMin": {
            "title": "🛁 Min bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum number of bathrooms."
          },
          "bathsMax": {
            "title": "🛁 Max bathrooms",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of bathrooms."
          },
          "areaMinSqft": {
            "title": "📐 Min area (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum built-up area in square feet (1 m² = 10.76 sq ft)."
          },
          "areaMaxSqft": {
            "title": "📐 Max area (sq ft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum built-up area in square feet."
          },
          "furnishingStatus": {
            "title": "🛋️ Furnishing",
            "enum": [
              "any",
              "furnished",
              "unfurnished"
            ],
            "type": "string",
            "description": "Filter by furnishing status.",
            "default": "any"
          },
          "rentFrequency": {
            "title": "🗓️ Rent frequency",
            "enum": [
              "",
              "yearly",
              "monthly",
              "weekly",
              "daily"
            ],
            "type": "string",
            "description": "Rentals only — filter by contract frequency.",
            "default": ""
          },
          "completionStatus": {
            "title": "🏗️ Completion",
            "enum": [
              "",
              "ready",
              "off-plan"
            ],
            "type": "string",
            "description": "Ready (completed) or off-plan (under construction).",
            "default": ""
          },
          "offplanSaleType": {
            "title": "🏗️ Off-plan sale type",
            "enum": [
              "",
              "new",
              "resale"
            ],
            "type": "string",
            "description": "For off-plan listings: sold by the developer (new) or by an owner (resale). Leave on Any to include everything.",
            "default": ""
          },
          "postedWithinDays": {
            "title": "🗓️ Posted within (days)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only listings first posted within this many days (e.g. 7 for the last week). Leave empty for all."
          },
          "amenities": {
            "title": "✨ Amenities",
            "type": "array",
            "description": "Only listings that have ALL of these amenities, using Bayut's own names, e.g. \"swimming pool\", \"balcony or terrace\", \"gym or health club\", \"covered parking\", \"maids room\", \"private garden\", \"pets allowed\", \"study room\", \"waterfront\". Case does not matter.",
            "items": {
              "type": "string"
            }
          },
          "verifiedOnly": {
            "title": "✅ Verified listings only",
            "type": "boolean",
            "description": "Only listings Bayut has verified (TruCheck).",
            "default": false
          },
          "truBrokerOnly": {
            "title": "🏅 TruBroker agents only",
            "type": "boolean",
            "description": "Only listings posted by a TruBroker agent.",
            "default": false
          },
          "hasVideo": {
            "title": "🎬 Has video",
            "type": "boolean",
            "description": "Only listings with a video.",
            "default": false
          },
          "has360Tour": {
            "title": "🔄 Has 360° tour",
            "type": "boolean",
            "description": "Only listings with a 360° virtual tour.",
            "default": false
          },
          "hasFloorPlan": {
            "title": "📋 Has floor plan",
            "type": "boolean",
            "description": "Only listings with a floor plan.",
            "default": false
          },
          "agents": {
            "title": "🧑‍💼 Listing agent",
            "type": "array",
            "description": "Only listings posted by these agents. Type the agent's name as Bayut shows it, their Bayut profile URL, or their agent id. Several agents with the same name are all included; use the profile URL to pick one. UAE and Saudi Arabia only. Works with or without a location.",
            "items": {
              "type": "string"
            }
          },
          "agencies": {
            "title": "🏢 Agency",
            "type": "array",
            "description": "Only listings from these agencies. Type the agency name (e.g. \"Betterhomes\" includes every Betterhomes branch), its Bayut profile URL, or its id. Works with or without a location.",
            "items": {
              "type": "string"
            }
          },
          "developers": {
            "title": "🏗️ Developer",
            "type": "array",
            "description": "Only listings in projects by these developers, e.g. \"Emaar\", \"Binghatti\", \"DAMAC\". Type the developer name, its Bayut profile URL, or its id. Works with or without a location.",
            "items": {
              "type": "string"
            }
          },
          "includeAgentEmail": {
            "title": "📧 Include agent email",
            "type": "boolean",
            "description": "Add the listing agent's email (agentEmail) from Bayut's agent directory. UAE and Saudi Arabia only. No extra charge.",
            "default": true
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "default",
              "newest",
              "price-asc",
              "price-desc"
            ],
            "type": "string",
            "description": "Ordering of results.",
            "default": "default"
          },
          "language": {
            "title": "🌐 Language",
            "enum": [
              "en",
              "ar",
              "zh",
              "ru"
            ],
            "type": "string",
            "description": "Language of titles and localized fields. Falls back to English where Bayut does not offer the chosen language for a country.",
            "default": "en"
          },
          "lat": {
            "title": "🌐 Latitude",
            "minimum": -90,
            "maximum": 90,
            "type": "number",
            "description": "GPS latitude of the search centre. Pair with Longitude and Search radius to get only listings within that radius of this point (a location is optional)."
          },
          "lon": {
            "title": "🌐 Longitude",
            "minimum": -180,
            "maximum": 180,
            "type": "number",
            "description": "GPS longitude of the search centre. Pair with Latitude."
          },
          "radiusKm": {
            "title": "📏 Search radius (km)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Only listings within this many kilometres of the (Latitude, Longitude) centre. Works on its own (no location needed) or together with a location."
          },
          "maxResults": {
            "title": "💯 Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum listings to return (0 = as many as available). A single filter combination can return up to ~50,000 listings; narrow by community or price to go deeper.",
            "default": 100
          },
          "compact": {
            "title": "📦 Compact output",
            "type": "boolean",
            "description": "Return only the core fields (id, title, price, beds/baths, location, contact) instead of the full record.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Omit fields that are null or empty from each record.",
            "default": false
          },
          "incrementalMode": {
            "title": "🔄 Incremental mode",
            "type": "boolean",
            "description": "Only emit listings that are new or changed since the previous run with the same filters. Tracks state across runs.",
            "default": false
          },
          "stateKey": {
            "title": "🔑 State key",
            "type": "string",
            "description": "Advanced: override the automatic incremental state key. Leave empty to derive it from the filters."
          },
          "emitUnchanged": {
            "title": "♻️ Emit unchanged",
            "type": "boolean",
            "description": "In incremental mode, also emit listings that were seen before and are unchanged.",
            "default": false
          },
          "emitExpired": {
            "title": "⚰️ Emit expired",
            "type": "boolean",
            "description": "In incremental mode, emit a record for listings that disappeared since the last full run.",
            "default": false
          },
          "skipReposts": {
            "title": "Skip reposts",
            "type": "boolean",
            "description": "In incremental mode, skip listings detected as reposts of an earlier one.",
            "default": false
          },
          "telegramToken": {
            "title": "Telegram bot token",
            "type": "string",
            "description": "Optional — send new listings to Telegram."
          },
          "telegramChatId": {
            "title": "💬 Telegram chat ID",
            "type": "string",
            "description": "Chat ID to deliver Telegram notifications to."
          },
          "discordWebhookUrl": {
            "title": "Discord webhook URL",
            "type": "string",
            "description": "Optional — post new listings to a Discord channel."
          },
          "slackWebhookUrl": {
            "title": "Slack webhook URL",
            "type": "string",
            "description": "Optional — post new listings to a Slack channel."
          },
          "webhookUrl": {
            "title": "Custom webhook URL",
            "type": "string",
            "description": "Optional — POST new listings as JSON to your own endpoint."
          },
          "notificationLimit": {
            "title": "Notification limit",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum listings to include per notification batch.",
            "default": 5
          },
          "notifyOnlyChanges": {
            "title": "Notify only changes",
            "type": "boolean",
            "description": "Only send notifications for new/changed listings (incremental mode).",
            "default": false
          },
          "appConnector": {
            "title": "Send results to Notion (or another connected app)",
            "type": "string",
            "description": "Optional. Pick a connected app under Settings → API & Integrations to receive your results. Notion is supported today (a run-summary page); other connectors are best-effort as Apify expands its catalog."
          },
          "mcpIssueTeam": {
            "title": "Issue tracker team",
            "type": "string",
            "description": "Only when the connected app is an issue tracker: the team (name or ID) the summary is created under, if that app requires one."
          },
          "whatsappAccessToken": {
            "title": "📱 WhatsApp Access Token",
            "type": "string",
            "description": "WhatsApp Cloud API access token from Meta Business Manager. The recipient must have messaged your business number within the last 24 hours."
          },
          "whatsappPhoneNumberId": {
            "title": "📞 WhatsApp Phone Number ID",
            "type": "string",
            "description": "WhatsApp Business phone number ID (numeric, from Meta dashboard). Required when whatsappAccessToken is set."
          },
          "whatsappTo": {
            "title": "📲 WhatsApp Recipient",
            "type": "string",
            "description": "Recipient phone number in E.164 format without + (e.g. \"33612345678\"). Recipient must have messaged your business number within the last 24 hours."
          },
          "webhookHeaders": {
            "title": "📋 Webhook Headers",
            "type": "object",
            "description": "Optional JSON object of custom HTTP headers for the webhook POST (e.g. {\"Authorization\":\"Bearer ...\"})."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}