{
  "openapi": "3.0.1",
  "info": {
    "title": "Dubizzle Property Scraper — Dubai/UAE + DLD Deed Data",
    "description": "Scrape Dubizzle Dubai/UAE property listings — 6 search modes (location, coordinates, polygon, URL, ID), bilingual EN+AR, agents, and the unique Dubai Land Department deed/building data layer no other Apify actor exposes. Sale + rent. RERA permit lookup. Market KPIs.",
    "version": "1.0",
    "x-build-id": "sT7bxCmahAJ6t3TTa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sian.agency~dubizzle-property-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sian.agency-dubizzle-property-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/sian.agency~dubizzle-property-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sian.agency-dubizzle-property-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/sian.agency~dubizzle-property-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sian.agency-dubizzle-property-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": {
          "purpose": {
            "title": "🏠 Listing Purpose",
            "enum": [
              "for-sale",
              "for-rent",
              "both"
            ],
            "type": "string",
            "description": "Which side of the market to scrape.\n\n• **for-sale** — buy listings (apartments, villas, townhouses)\n• **for-rent** — rental listings\n• **both** — runs each query twice, once for sale and once for rent (PAID — doubles the query count)",
            "default": "for-sale"
          },
          "searchMode": {
            "title": "🧭 Search Mode",
            "enum": [
              "bylocation",
              "bylocationid",
              "bycoordinates",
              "bypolygon",
              "byurl",
              "byid",
              "agents"
            ],
            "type": "string",
            "description": "How to specify what to scrape.\n\n• **bylocation** — by location name (e.g. 'Dubai Marina')\n• **bylocationid** — by numeric location ID (use autocomplete to find IDs)\n• **bycoordinates** — by lat/long + radius (km)\n• **bypolygon** — by polygon vertices (JSON array)\n• **byurl** — by a full Dubizzle search URL\n• **byid** — direct listing lookup by listing_id + category_id\n• **agents** — agent profile (name, email, bio, agency, languages) + full listing portfolio, by agent slug or numeric ID from any listing's `agent` field",
            "default": "bylocation"
          },
          "maxResults": {
            "title": "📊 Max results per query",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Hard cap on listings returned per query. Auto-paginates until cap is reached or search is fully drained. Default 50. FREE tier is always capped at 25 listings per run.",
            "default": 50
          },
          "locationName": {
            "title": "📍 Location Name (used when Search Mode = bylocation)",
            "type": "string",
            "description": "Free-text location like 'Dubai Marina', 'JBR', 'Downtown Dubai', 'Business Bay'. Resolved server-side.",
            "default": "Dubai Marina"
          },
          "locationNames": {
            "title": "📋 Bulk Location Names (PAID)",
            "uniqueItems": true,
            "type": "array",
            "description": "Array of location names. PAID tier only.",
            "items": {
              "type": "string"
            }
          },
          "locationId": {
            "title": "🆔 Location ID (used when Search Mode = bylocationid)",
            "type": "integer",
            "description": "Numeric Dubizzle location ID. Examples: 63 = Dubai Marina, 199 = Dubai (city). Use the autocomplete endpoint or check Dubizzle URL.",
            "default": 63
          },
          "locationIds": {
            "title": "📋 Bulk Location IDs (PAID)",
            "uniqueItems": true,
            "type": "array",
            "description": "Array of numeric location IDs. PAID tier only.",
            "items": {
              "type": "string"
            }
          },
          "latitude": {
            "title": "🗺 Latitude (used when Search Mode = bycoordinates)",
            "type": "string",
            "description": "Latitude in decimal degrees. Example: 25.0805 (Dubai Marina).",
            "default": "25.0805"
          },
          "longitude": {
            "title": "🗺 Longitude (used when Search Mode = bycoordinates)",
            "type": "string",
            "description": "Longitude in decimal degrees. Example: 55.1403 (Dubai Marina).",
            "default": "55.1403"
          },
          "radius": {
            "title": "🧭 Radius (km)",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Search radius in kilometers around the centre point.",
            "default": 2
          },
          "polygon": {
            "title": "🔷 Polygon vertices (used when Search Mode = bypolygon)",
            "type": "string",
            "description": "JSON array of [lat,lng] points. Minimum 3 points. Example: [[25.08,55.14],[25.10,55.14],[25.10,55.18]]"
          },
          "searchUrl": {
            "title": "🔗 Dubizzle Search URL (used when Search Mode = byurl)",
            "type": "string",
            "description": "Paste a Dubizzle search results URL (e.g. https://www.dubizzle.com/property-for-sale/residential/dubai/)."
          },
          "listingId": {
            "title": "🆔 Listing ID (used when Search Mode = byid)",
            "type": "string",
            "description": "Numeric Dubizzle listing_id. Must be combined with categoryId."
          },
          "categoryId": {
            "title": "🏷 Category ID (used when Search Mode = byid)",
            "type": "integer",
            "description": "Numeric Dubizzle category_id (e.g. 31 = Apartment for Sale, 30 = Villa for Sale). Available in any search response."
          },
          "agentSlugs": {
            "title": "👤 Agent Slugs (used when Search Mode = agents)",
            "uniqueItems": true,
            "type": "array",
            "description": "Agent slugs like `lewis-dady-105732` — copy them from the `agent.slug` field of any listing row, or paste the agent's profile page URL. Each slug yields the agent's full profile (name, email, bio, photo, agency, languages, specialities) plus their complete listing portfolio.",
            "items": {
              "type": "string"
            }
          },
          "agentIds": {
            "title": "🆔 Agent IDs (used when Search Mode = agents)",
            "uniqueItems": true,
            "type": "array",
            "description": "Numeric agent IDs like `105732` — the `agent.id` field of any listing row. ID-only inputs fetch the listing portfolio; the agent profile (email, bio) requires the slug instead.",
            "items": {
              "type": "string"
            }
          },
          "includeAgentListings": {
            "title": "🏠 Include agent listing portfolio",
            "type": "boolean",
            "description": "When ON (default), fetches each agent's full active listing portfolio alongside their profile. Turn OFF for profile-only runs (contact + agency data).",
            "default": true
          },
          "includeDld": {
            "title": "🏛️ Include DLD deed data (PAID)",
            "type": "boolean",
            "description": "When ON, fetches Dubai Land Department (DLD) deed/building data for each listing — building registry, floor count, parking spaces, off-plan project metadata, validation URL. Adds 1 extra API call + a DldDeedEnriched charge per listing. Disabled on FREE tier.",
            "default": false
          },
          "includeSimilar": {
            "title": "🔁 Include similar listings (PAID)",
            "type": "boolean",
            "description": "When ON, fetches up to 12 similar listings for each result. Adds 1 extra API call + a SimilarEnriched charge per listing. Disabled on FREE tier.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}