{
  "openapi": "3.0.1",
  "info": {
    "title": "Dubizzle UAE $1💰 Property, Motors & Agent Listings",
    "description": "From $1/1K. Scrape dubizzle.com across the UAE for property, motors, and agent listings. Search by filters or URLs with auto pagination. Returns price, beds, baths, area, agent/agency contacts, WhatsApp, email, GPS, photos, amenities, verification, and Dubai Land Department history.",
    "version": "1.0",
    "x-build-id": "MKeNuLMyg3ziiZsEO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~dubizzle-com-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-dubizzle-com-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/abotapi~dubizzle-com-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-dubizzle-com-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/abotapi~dubizzle-com-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-dubizzle-com-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "Search mode = pick city + section + filters below and the scraper builds the URL for you. URL mode = paste any dubizzle.com listing URL(s) you already refined in a browser. URL mode supports multiple URLs.",
            "default": "search"
          },
          "locations": {
            "title": "Cities / areas to search",
            "type": "array",
            "description": "One or more UAE city slugs as Dubizzle writes them in the URL: 'dubai', 'abu-dhabi', 'sharjah', 'ras-al-khaimah', 'ajman', 'fujairah', 'umm-al-quwain', 'al-ain'. For sub-areas use the city slug; refine further with neighborhood in URL mode.",
            "items": {
              "type": "string"
            }
          },
          "section": {
            "title": "Section to scrape (Search mode)",
            "enum": [
              "property-for-sale",
              "property-for-rent",
              "motors",
              "property-agents"
            ],
            "type": "string",
            "description": "Which Dubizzle vertical to search. Property for sale / rent, used motors (cars), or property agents directory.",
            "default": "property-for-sale"
          },
          "propertyType": {
            "title": "Property type (Search mode, property sections)",
            "enum": [
              "residential",
              "apartment",
              "villa",
              "townhouse",
              "penthouse",
              "compound",
              "duplex",
              "land",
              "floor",
              "building",
              "commercial"
            ],
            "type": "string",
            "description": "Property sub-type. 'residential' includes everything residential. Applies only to the property sections.",
            "default": "residential"
          },
          "minPrice": {
            "title": "Min price (AED)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum price filter in AED. Leave empty for no minimum. Search mode only."
          },
          "maxPrice": {
            "title": "Max price (AED)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum price filter in AED. Leave empty for no maximum. Search mode only."
          },
          "minBedrooms": {
            "title": "Min bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Minimum bedrooms (0 = studio). Property sections only."
          },
          "maxBedrooms": {
            "title": "Max bedrooms",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Maximum bedrooms. Property sections only."
          },
          "minArea": {
            "title": "Min area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Minimum built-up area in square feet. Property sections only."
          },
          "maxArea": {
            "title": "Max area (sqft)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum built-up area in square feet. Property sections only."
          },
          "furnishing": {
            "title": "Furnishing (Search mode)",
            "enum": [
              "any",
              "furnished",
              "unfurnished"
            ],
            "type": "string",
            "description": "Furnishing filter. Property sections only.",
            "default": "any"
          },
          "completionStatus": {
            "title": "Completion status (Search mode)",
            "enum": [
              "any",
              "completed",
              "off-plan"
            ],
            "type": "string",
            "description": "Completed = ready to move in. Off-plan = under construction / pre-launch. Property sections only.",
            "default": "any"
          },
          "sortBy": {
            "title": "Sort order (Search mode)",
            "enum": [
              "popular",
              "newest",
              "oldest",
              "price-asc",
              "price-desc",
              "verified"
            ],
            "type": "string",
            "description": "How to order results. Search mode only - in URL mode the sort is taken from your pasted URL.",
            "default": "popular"
          },
          "urls": {
            "title": "Dubizzle URLs (URL mode)",
            "type": "array",
            "description": "One or more full dubizzle.com URLs (property, motors, or agents). Multi-URL supported. Filter-mode fields (city, section, price, beds, etc.) are ignored in URL mode - paste the URL exactly as Dubizzle produced it, including any filters. A URL ending with `?page=N` starts from that page.",
            "items": {
              "type": "string"
            }
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional bound on result pages walked per location / URL. Dubizzle returns ~35 listings per page. Default 0 = walk as deep as the source serves: the run stops on its own once the storefront's reported total is reached or a page returns no new listings. This does NOT cap the number of listings; use Max listings for that.",
            "default": 0
          },
          "maxListings": {
            "title": "Max total listings",
            "minimum": 0,
            "type": "integer",
            "description": "The single cap on this run. Default 20 keeps first runs cheap and fast. Set 0 for unlimited (then the run stops at the storefront total / Max pages).",
            "default": 20
          },
          "fetchDetails": {
            "title": "Include listing details",
            "type": "boolean",
            "description": "Adds the full description, categorized amenities, agent email + agency license, the full photo gallery (vs SERP cover photo only), RERA/Trakheesi permit, off-plan payment plans, and (for Dubai property) the Dubai Land Department transaction history. Turn off for a faster, cheaper run with just the SERP fields (which already include lat/lng, agent phone, WhatsApp, and basic agency info). Each detail page is an extra fetch, so this run costs a per-item surcharge when enabled.",
            "default": false
          },
          "includeDldHistory": {
            "title": "Include Dubai Land Department history (detail mode)",
            "type": "boolean",
            "description": "When detail mode is on, also pull the Dubai Land Department transaction history for Dubai property listings (past sale prices and dates for the building). Ignored when detail mode is off or for non-Dubai listings.",
            "default": true
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (delta)",
            "type": "string",
            "description": "Optional. ID of a previous run of this actor (or a dataset ID). Listings already in that dataset are skipped, so this run returns only NEW listings not seen before. Combine both runs' datasets for the full set. Max listings then counts only the new listings. The actor also checkpoints its own progress automatically, so a platform migration or a Resurrect of a FAILED/ABORTED run continues that same run without re-collecting or re-charging what it already pushed. For a recurring/scheduled monitoring campaign against the SAME search instead, use Incremental mode below - the two are complementary, not interchangeable, and combining them on a search with no prior incremental state bootstraps that state from this resumed dataset."
          },
          "incrementalMode": {
            "title": "Incremental mode (recurring updates)",
            "type": "boolean",
            "description": "For a scheduled/recurring run against the SAME search. When on, the actor remembers the previous run's listings itself (keyed on your filters, see State key) and classifies every listing as NEW, UPDATED, REAPPEARED, or UNCHANGED - UNCHANGED listings are skipped (not pushed, not charged) unless Emit unchanged is on. This is different from Resume above, which continues one specific interrupted run from a pasted run/dataset ID rather than remembering state itself.",
            "default": false
          },
          "stateKey": {
            "title": "State key (Incremental mode)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign so it keeps its own baseline regardless of which caps you happen to pass. Leave empty to auto-derive one from your search filters (city, section, price, bedrooms, etc. - Max pages/Max listings never affect it, so raising or lowering those does not fork a new baseline or re-bill your whole search). Only relevant when Incremental mode is on."
          },
          "emitUnchanged": {
            "title": "Emit unchanged listings (Incremental mode)",
            "type": "boolean",
            "description": "When off (default), a listing identical to the last incremental run is skipped entirely - not pushed, not charged. Turn on to also emit UNCHANGED rows in the dataset (still marked changeType: UNCHANGED). This returns and bills every listing every run, defeating the point of incremental mode for most users - leave off unless you specifically need the full set every time. Only relevant when Incremental mode is on.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired listings (Incremental mode)",
            "type": "boolean",
            "description": "When on, a listing tracked by a previous incremental run that no longer appears is emitted once as changeType: EXPIRED (this returns and bills one extra row per delisted listing). Only fires after a run that reached the natural end of every search/URL with no cap hit and no Resume - a capped or resumed run cannot tell \"delisted\" apart from \"not reached yet\", so it is skipped that run and retried next time. Only relevant when Incremental mode is on.",
            "default": false
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify residential proxy with country=AE is strongly recommended. Datacenter proxies and free-tier accounts often return empty pages; residential UAE IPs give the most reliable results. The scraper rotates the exit IP and refreshes its session automatically on rejection."
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON - the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}