591 Sale Search API searches properties for sale in Taiwan. Each item has the id (S and digits), URL, kind, shape, total price in TWD, unit price per ping in TWD, size and main size in ping, rooms, halls, bathrooms, floor, age, street, district ids, community, parking, photos, posting time and owner or agent type. Paging uses a cursor: pages are irregular, so send next_cursor from the answer. When next_cursor is null there are no more rows. A cursor past the end gives an empty list. Filters are always honoured: a row that breaks a filter is never returned (see meta.filtered_out). New-project cards are dropped. With sort, or with age, bathrooms or an open-ended size, the answer comes from the 591 list page and carries more fields (main size, bathrooms, age). If that page cannot be read, the request fails with 503 and is not billed: you never get an unsorted list under a sort label. Rows that 591 boosts (boosted: true) and a few promoted rows can sit out of order. Without those options the default list is used. It has no age or bathroom count, so those fields are null. Unofficial: Scrappa is not affiliated with 591. Chinese text stays as 591 returns it; numeric fields are parsed next to it, and a value 591 does not give is null, never 0. Failed requests are not billable.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
1 required parameter needed before sending a request.
13 optional filters available.
integer
Required
City or county id from the locations route. 1 is Taipei City, 3 is New Taipei City, 17 is Kaohsiung City.
1234567890
string
Optional
Comma separated district ids of the chosen region, from the locations route. Example: 5,7.
example
integer
Optional
5 shop, 6 office, 7 factory, 8 parking, 9 home, 10 suite, 11 land, 12 home office. One value. Leave empty for all kinds. Shops (5) and land (11) cannot be combined with sort, age_max, bathrooms or an open-ended size.
10
integer
Optional
Minimum total price in TWD.
10
integer
Optional
Maximum total price in TWD.
10
number
Optional
Minimum size in ping.
10
number
Optional
Maximum size in ping.
10
string
Optional
Comma separated: 1 apartment, 2 elevator building, 3 townhouse, 4 villa, 5 mid-rise. Kinds 6, 9, 10, 12 only.
example
string
Optional
Comma separated room count: 1, 2, 3, 4 or 5 (five or more). Kinds 6, 9, 10, 12 only.
example
integer
Optional
Bathroom count 1 to 4 (4 means four or more).
10
integer
Optional
Maximum building age in years.
10
string
Optional
Free text such as a street, station or community name. 591 applies it on its side.
running shoes
string
Optional
price_asc, unit_price_asc, newest or area_asc. Leave empty for the 591 order.
relevance
integer
Optional
Row offset. Start at 0 and send next_cursor from the previous answer. Sale pages are irregular, so do not compute offsets.
0
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
data
meta
success
{
"data": {
"items": [
{
"id": "S21096373",
"url": "https://sale.591.com.tw/home/house/detail/2/21096373.html",
"kind": 9,
"tags": [
"AI\u56de\u8986",
"\u5f71\u7247\u8cde\u5c4b",
"\u660e\u661f\u5b78\u5340",
"\u8fd1\u6377\u904b"
],
"floor": 5,
"halls": 2,
"rooms": 2,
"title": "\u6771\u9580\u751f\u6d3b\u5708\ud83d\ude4f\u6771\u9580\u7ad9\ud83d\ude4f\u7cbe\u7f8e\u98a8\u683c",
"photos": [
"https://img1.591.com.tw/house/2026/10/19/179240012476085802.jpg!1000x.water2.jpg"
],
"region": "\u53f0\u5317\u5e02",
"street": "\u6c38\u5eb7\u8857",
"address": "\u53f0\u5317\u5e02\u5927\u5b89\u5340\u6c38\u5eb7\u8857",
"boosted": false,
"section": "\u5927\u5b89\u5340",
"age_years": null,
"area_ping": 53.4,
"bathrooms": null,
"has_video": true,
"kind_name": "\u4f4f\u5b85",
"posted_at": "2026-10-17T08:38:34+00:00",
"region_id": 1,
"owner_type": "agent",
"price_text": "6,999\u842c\u5143",
"section_id": 5,
"shape_name": "\u96fb\u68af\u5927\u6a13",
"has_parking": null,
"layout_text": "2\u623f2\u5ef3",
"price_value": 69990000,
"community_id": 6788,
"total_floors": 9,
"community_name": "\u5927\u5b89\u6c38\u5eb7",
"main_area_ping": null,
"refreshed_text": "3\u5c0f\u6642\u524d",
"unit_price_per_ping": 1424000,
"price_includes_parking": true
},
{
"id": "S21107027",
"url": "https://sale.591.com.tw/home/house/detail/2/21107027.html",
"kind": 9,
"tags": [
"7\u65e5\u4e0a\u65b0",
"\u660e\u661f\u5b78\u5340",
"\u8fd1\u6377\u904b"
],
"floor": -1,
"halls": 3,
"rooms": 5,
"title": "\u5927\u5b89\u6211\u6700\u4fd7\u26f5\u4e2d\u6b63\u91d1\u83ef\u5b78\u5340\u26f5\u5ead\u9662\u5927\u8eca\u5eab",
"photos": [
"https://img1.591.com.tw/house/2026/10/19/179240338628180108.jpeg!400x300.jpeg"
],
"region": "\u53f0\u5317\u5e02",
"street": "\u548c\u5e73\u6771\u8def\u4e00\u6bb5",
"address": "\u53f0\u5317\u5e02\u5927\u5b89\u5340\u548c\u5e73\u6771\u8def\u4e00\u6bb5",
"boosted": false,
"section": "\u5927\u5b89\u5340",
"age_years": null,
"area_ping": 60.9,
"bathrooms": null,
"has_video": false,
"kind_name": "\u4f4f\u5b85",
"posted_at": "2026-10-19T09:43:40+00:00",
"region_id": 1,
"owner_type": "agent",
"price_text": "5,988\u842c\u5143",
"section_id": 5,
"shape_name": "\u516c\u5bd3",
"has_parking": null,
"layout_text": "5\u623f3\u5ef3",
"price_value": 59880000,
"community_id": null,
"total_floors": 5,
"community_name": "\u548c\u5e73\u6771\u8def\u4e00\u6bb5",
"main_area_ping": null,
"refreshed_text": "7\u5929\u524d",
"unit_price_per_ping": 984000,
"price_includes_parking": false
}
],
"pagination": {
"total": 710,
"cursor": 0,
"has_next": true,
"next_cursor": 24
},
"filters_applied": {
"kind": 9,
"region_id": 1,
"section_ids": [
5
]
}
},
"meta": {
"billable": true,
"endpoint_family": "sale_search"
},
"success": true
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
Validation Error
A required parameter is missing or a value or combination is not allowed. This response is not billable.
{
"errors": {
"region_id": [
"The region id field is required."
]
},
"message": "The request validation failed"
}Upstream Unavailable
591 could not be reached or returned data that does not match the request. This response is not billable and is retryable.
{
"meta": {
"billable": false,
"retryable": true,
"endpoint_family": "search"
},
"error": {
"code": "UPSTREAM_UNAVAILABLE",
"message": "591 could not be reached. Please retry shortly."
},
"success": false
}Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.