POST /api/propertyfinder/properties/search
Price: 20 credits
Search Property Finder listings with rich filters: location, category (buy/rent/commercial), property type, beds, baths, price range, completion status, furnishing, area and price-per-area ranges, amenities, virtual viewings, listing recency, keywords and sort. Returns listing cards (id, title, type, price, beds/baths/area, agent, broker, verified and media flags) plus the total available count.
Search Property Finder real estate listings. Filter by location_id (numeric, resolved from a location name; omit to search the whole country), category (buy/rent/commercial/new_projects), property_type (apartment/villa/townhouse/...), beds and baths (lists), min/max price (AED), price_period for rent, completion_status (off_plan/ready), furnishing, min/max area (sqft), min/max price_per_area (AED/sqft), amenities (list), virtual_viewing, listed_within (recency window: 1/7/15/30/90 days), keywords and sort. count is required. Each result has id (use with propertyfinder/properties for full details), url, title, property_type, offering_type, completion_status, furnishing, price/price_period/currency (AED), price_per_area, bedrooms, bathrooms, area/area_unit, is_verified/is_premium/is_new_construction/is_high_demand/is_great_value, has_video/has_view_360, latitude/longitude, location_name, reference, listed_date, image, agent_name and broker_name. Use domain to select the country marketplace (ae/sa/qa/bh/eg).
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)location_id integer nullable — Numeric location id (city/community/building); omit to search the whole countrycategory string — Listing category (default: "1"; one of: "1", "2", "3", "4", "5")property_type string nullable — Property type (one of: "1", "35", "22", "20", "42", "24", "18", "29", "10", "5", "30", "31", "45")beds array nullable — Bedroom counts to include (one of: "0", "1", "2", "3", "4", "5", "6", "7", "8")baths array nullable — Bathroom counts to include (one of: "1", "2", "3", "4", "5", "6", "7", "8")min_price integer nullable — Minimum price (AED) (min: 0)max_price integer nullable — Maximum price (AED) (min: 0)price_period string nullable — Rent price period (rent categories only) (one of: "yearly", "monthly", "weekly", "daily")completion_status string nullable — Completion status (one of: "off_plan", "completed")furnishing string nullable — Furnishing status (one of: "0", "1", "2", "3")min_area integer nullable — Minimum area (sqft) (min: 0)max_area integer nullable — Maximum area (sqft) (min: 0)min_price_per_area integer nullable — Minimum price per area (AED/sqft) (min: 0)max_price_per_area integer nullable — Maximum price per area (AED/sqft) (min: 0)amenities array nullable — Required amenities (one of: "MR", "BA", "SP", "SS", "SY", "AC", "CS", "CP", "VW", "BL", "PA", "PR", "CO", "BR", "BW", "ST", "WC", "PJ")virtual_viewing string nullable — Virtual viewing availability (one of: "360_tours", "video", "live")listed_within string nullable — Only listings published within this recency window (one of: "86400", "604800", "1296000", "2592000", "7776000")keywords string nullable — Free-text keywords (e.g. 'beach, chiller free')sort string — Sort order (default: "mr"; one of: "mr", "nd", "pa", "pd", "ba", "bd", "da", "dd")count integer required — Max number of results to return (min: 1)domain string — Country marketplace (default: "ae"; one of: "ae", "sa", "qa", "bh", "eg")@type string (default: "PropertyfinderSearchResult")id string requiredurl string requiredproperty_type string nullableoffering_type string nullablecategory_id integer nullablecompletion_status string nullablefurnishing string nullableprice number nullableprice_period string nullablecurrency string nullableprice_per_area number nullablebedrooms string nullablebathrooms integer nullablearea number nullablearea_unit string nullableis_verified boolean nullableis_premium boolean nullableis_new_construction boolean nullableis_high_demand boolean nullableis_great_value boolean nullablehas_video boolean nullablehas_view_360 boolean nullablelatitude number nullablelongitude number nullablelocation_name string nullablereference string nullablelisted_date string nullableimage string nullableagent_name string nullablebroker_name string nullable422 — The request body did not validate Check the fields against this schema. A URN with the wrong prefix is the most common cause.408 — The request ran past its time limit Raise `timeout` in the request body, up to the maximum this endpoint documents. Lowering `count` or turning off the `with_*` flags also helps, because less work finishes sooner.412 — The entity was not found, or a precondition failed Retrying will not help: either the entity does not exist, or the input points at a different one.429 — Too many requests: a rate limit or a usage window is exhausted When the response carries an X-Retry-After header, wait that many seconds and retry: the same number is in the body as `detail.retry_after`, and the limit clears once that window passes. The message in the body names the limit that was hit.500 — Something broke on our side Retrying will not help. If it keeps happening, send us the X-Request-ID from the response headers.529 — Rate limit reached, or the endpoint is overloaded Wait at least 30 seconds, then retry.X-Error — Error message text (present only on error)X-Request-ID — Unique request identifierX-Execution-Time — Execution time in secondsX-Result-Count — How many records the body carries. 0 means an empty result, which is a normal answer and not by itself an error. A non-zero count can come back together with X-Error when the failure happened partway through — read this header and X-Error independently.X-Total-Available-Results — How many records exist for this query, when the endpoint can say. On a `dry_run` request this is the answer and the body is empty. It saturates: the endpoint's documented maximum means 'at least that many', any smaller number is exact.X-Warning — Present when the request body carried keys this endpoint does not document. They were ignored, so any filter you meant to apply through them did not apply. Check the spelling against this schema and retry.X-Retry-After — Seconds to wait before retrying. Present only on 429.