Skip to content
Scrappa Get API key
591 House API 1 credit/request

591 Sale Search API Documentation

GET https://scrappa.co/api/591/sale/search

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.

591 Sale Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/591/sale/search
Auth header
x-api-key
Cost
1 credit/request
region_id = 1234567890
Response preview
200 OK
{
    "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,
...

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.

region_id integer Required

City or county id from the locations route. 1 is Taipei City, 3 is New Taipei City, 17 is Kaohsiung City.

Example value 1234567890
section_ids string Optional

Comma separated district ids of the chosen region, from the locations route. Example: 5,7.

Example value example
kind 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.

Example value 10
price_min integer Optional

Minimum total price in TWD.

Example value 10
price_max integer Optional

Maximum total price in TWD.

Example value 10
area_min number Optional

Minimum size in ping.

Example value 10
area_max number Optional

Maximum size in ping.

Example value 10
shape string Optional

Comma separated: 1 apartment, 2 elevator building, 3 townhouse, 4 villa, 5 mid-rise. Kinds 6, 9, 10, 12 only.

Example value example
layout string Optional

Comma separated room count: 1, 2, 3, 4 or 5 (five or more). Kinds 6, 9, 10, 12 only.

Example value example
bathrooms integer Optional

Bathroom count 1 to 4 (4 means four or more).

Example value 10
age_max integer Optional

Maximum building age in years.

Example value 10
keywords string Optional

Free text such as a street, station or community name. 591 applies it on its side.

Example value running shoes
sort string Optional

price_asc, unit_price_asc, newest or area_asc. Leave empty for the 591 order.

Example value relevance
cursor integer Optional

Row offset. Start at 0 and send next_cursor from the previous answer. Sale pages are irregular, so do not compute offsets.

Example value 0

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

data meta success
JSON Response
200 OK
{
    "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.

422

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"
}
503

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.