POST /api/house591/sale_listings/search
Price: 5 credits
Search resale homes for sale on 591 in one Taiwanese city or county: by district, keyword, asking price, floor area, building age, bedrooms and building type. Each row carries price, price per ping, area, layout, floor, age, address, community, parking, photos and the listing agent.
Get a listing's land records, area breakdown, description and agent with house591/sale_listings. New-build projects are in house591/new_projects/search.
access-token string requiredtimeout integer — Max scrapping execution timeout (in seconds) (default: 300; min: 20; max: 1500)count integer required — Max number of listings to return (min: 1; max: 3000)region string required — City or county (one of: "taipei", "keelung", "new_taipei", "hsinchu_city", "hsinchu_county", "taoyuan", "miaoli", "taichung", "changhua", "nantou", "chiayi_city", "chiayi_county", "yunlin", "tainan", "kaohsiung", "pingtung", "yilan", "taitung", "hualien", "penghu", "kinmen", "lienchiang")district_ids array nullable — District ids within the region, as returned in district_id (examples: ["5","7"])keyword string nullable — Words to find in listings (examples: "捷運"; minLength: 1)price_min number nullable — Minimum asking price, TWD (examples: 10000000; min: 0)price_max number nullable — Maximum asking price, TWD (examples: 20000000; min: 0)area_min number nullable — Minimum floor area, ping (examples: 20; min: 0)area_max number nullable — Maximum floor area, ping (examples: 40; min: 0)age_max integer nullable — Maximum building age, years (examples: 5; min: 1)bedrooms integer nullable — Number of bedrooms, 5 meaning five or more (examples: 3; min: 1; max: 5)building_type string nullable — Type of building (one of: "apartment", "elevator_building", "townhouse", "villa", "mid_rise")@type string (default: "House591SaleListing")id string requiredurl string requiredkind_name string nullablebuilding_type string nullableprice number nullableunit_price_per_ping number nullablearea_ping number nullablemain_area_ping number nullablelayout string nullablefloor string nullableage_years number nullableaddress string nullableregion_id string nullableregion_name string nullabledistrict_id string nullabledistrict_name string nullablecommunity_id string nullablecommunity_name string nullablehas_parking boolean nullableparking_type string nullabletags array (default: [])image string nullableimage_count integer nullablevideo_url string nullablecontact_name string nullableposter string nullableagency string nullablephone string nullableagent_note string nullableview_count integer nullablecall_count integer nullableis_price_reduced boolean nullableposted_at integer nullablerefreshed_at integer nullable422 — Unknown region or building type, a non-numeric district id, or an inverted range 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.