# 591.com.tw Scraper | Taiwan Real Estate Data (`fatihtahta/591-taiwan-scraper`) Actor

Extract commercial and residential property listings across Taiwan from 591.com.tw with unlimited coverage, rich listing detail, contact data, media, pricing, and community context. Built for enterprise-grade Taiwan real estate intelligence, deal sourcing and automated analytics pipelines.

- **URL**: https://apify.com/fatihtahta/591-taiwan-scraper.md
- **Developed by:** [Fatih Tahta](https://apify.com/fatihtahta) (community)
- **Categories:** Real estate, Automation, Agents
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## 591.com.tw Scraper | Taiwan Property Data

**Slug:** `fatihtahta/591-taiwan-scraper`

### Overview

591.com.tw Scraper | Taiwan Property Data collects structured Taiwan property records from 591 search result pages, including sale, rental, commercial, land, and community-oriented property data. It captures listing identifiers, titles, public listing URLs, pricing, location details, property attributes, media, contact information, amenities, metrics, flags, and source context when available. [591.com.tw](https://591.com.tw) is one of Taiwan's major property marketplaces, making its public listing data useful for property research, market monitoring, lead review, and operational reporting. The actor turns repeatable 591 search URLs into consistent JSON records that can be used in analytics, enrichment, monitoring, and downstream data acquisition workflows. It is designed for dependable recurring collection patterns while reflecting the public data available at the time each run is executed.

### Why Use This Actor

- **Market research and analytics teams:** build structured extraction workflows for pricing, availability, location coverage, property types, and market intelligence across Taiwan property segments.
- **Product and content teams:** maintain property catalogs, comparison experiences, local market pages, or internal review queues with normalized public listing records.
- **Developers and data engineering teams:** feed repeatable collection outputs into downstream systems, warehouses, search indexes, or enrichment pipelines with predictable JSON structure.
- **Lead generation and enrichment teams:** identify public listing opportunities, contact signals, location attributes, and property context for review and qualification workflows.
- **Monitoring and competitive tracking teams:** schedule recurring runs to observe listing movement, pricing changes, geographic coverage, and category-level activity over time.

### Common Use Cases

- **Market intelligence:** monitor property supply, asking prices, unit prices, floor plans, districts, media volume, and listing availability across selected 591 result pages.
- **Lead generation:** build targeted prospect lists from public property listings that include contact names, contact methods, listing URLs, and location context when available.
- **Competitive monitoring:** track changes across sale, rental, commercial, land, or community result pages for recurring reporting.
- **Catalog and directory building:** populate internal databases with structured public property records, media references, pricing fields, and address metadata.
- **Data enrichment:** add current public listing attributes to CRM, BI, risk, underwriting, or analytics datasets.
- **Recurring reporting:** schedule periodic runs for dashboards, alerts, segment summaries, or operational reporting.

### Quick Start

1. Open 591.com.tw and create the search result page that matches your target segment, such as sale, rent, commercial, land, or community data.
2. Copy the resulting 591 search URL and add it to `startUrls`.
3. Set a small `limit` for the first validation run, such as 10 or 25 records per URL.
4. Choose whether `enrich_data` should collect richer listing details, contact context, amenities, photos, and related fields when available.
5. Run the actor in Apify Console and inspect the first dataset records to confirm the shape matches your workflow.
6. Increase the limit, add additional URLs, or schedule the actor after the output is verified.

### Input Parameters

The input schema accepts 591 search result URLs, an optional per-URL result limit, and an enrichment toggle.

| Parameter | Type | Description | Default |
| --- | --- | --- | --- |
| `startUrls` | array of strings | Supported 591 result URLs to collect from. Add sale, rental, business, land, or community search pages as separate URLs. Use 591's public filters first, then paste the resulting search URLs here. | – |
| `limit` | integer | Maximum number of records to save for each URL. Minimum value is `1`. Leave empty to collect available results without a per-URL cap. | – |
| `enrich_data` | boolean | When enabled, records may include richer public details such as descriptions, layout information, amenities, scores, transaction history, contact details, and additional photos. Disable it when search-level fields are enough. | `true` |

### Choosing Inputs

Use `startUrls` as the primary way to define scope. Create the desired search on 591.com.tw first, including any public filters for location, segment, property category, price, area, or sort options, then add the resulting URL to the actor input. Narrower 591 search URLs produce more targeted datasets, while broader URLs improve discovery and may return a wider range of property records. For first runs, set a conservative `limit` so you can validate the output shape quickly before scaling collection. Use one segment or geography per URL when you need clean downstream segmentation; add multiple URLs when you want to collect several search scopes in one run.

### Example Inputs

#### Sale Listing Validation Run

```json
{
  "startUrls": [
    "https://sale.591.com.tw/?regionid=1&firstRow=0&shType=list"
  ],
  "limit": 25,
  "enrich_data": true
}
````

#### Rental Monitoring Run

```json
{
  "startUrls": [
    "https://rent.591.com.tw/list?region=1&section=5"
  ],
  "limit": 100,
  "enrich_data": false
}
```

#### Multi-Segment Discovery Run

```json
{
  "startUrls": [
    "https://business.591.com.tw/list?type=1&region=1&kind=5",
    "https://land.591.com.tw/list?region=21&type=2&kind=11",
    "https://market.591.com.tw/list?regionId=1&sectionId=5&shopId=74"
  ],
  "limit": 50,
  "enrich_data": true
}
```

### Output

#### 9.1 Output Destination

The actor writes results to an Apify dataset as JSON records. The dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs with minimal post-processing.

When multiple entity types or record shapes exist, this README documents each shape separately based on the provided Example Output.

#### 9.2 Record Envelope And Stable Identifiers

Each dataset item is a property listing record. The example record includes top-level identifiers, listing metadata, nested source context, pricing, location, property details, community details, media, contact information, metrics, amenities, flags, and listing attributes.

The recommended idempotency key is `id`. If your downstream system requires a numeric key, `listing_id` or `identifiers.house_id` can also be used for listing-level matching. For maximum traceability across repeated runs, keep `source_context.fingerprint` and `url` alongside the listing identifier. Deduplication and upserts should use `id` as the primary key, with `url` or `source_context.fingerprint` as supporting keys when reconciling historical records. Stable identifiers make records easier to merge, deduplicate, and sync across repeated runs.

#### 9.3 Examples

##### Example: sale listing (`listing_type = "sale"`)

```json
{
  "id": "20059610",
  "listing_id": 20059610,
  "listing_type": "sale",
  "url": "https://sale.591.com.tw/home/house/detail/2/20059610.html",
  "title": "全新/碧硯閣/24層SRC/大器落成/三房車位*<AGENT_NAME>",
  "description": "1，台北市區稀有新屋聚落。 2，方正基地有1400多坪，四面鄰路。 3，近捷運站，8~10分鐘。 4，知名建設公司，社區代表作。 5，氣派/24層樓，全新交屋。 6，方正/三房，衛浴有窗，特別通風，也有坡平車位。 7，有24小時管理，有健身房，瑜伽教室，兒童遊戲區，媽媽教室，空中花園，公設種類多。 8，基地退縮4米，棟距寬。 9，街道綠樹林立。 <BROKERAGE_NAME> 經紀人：<AGENT_NAME> 證照號碼：<LICENSE_NUMBER>",
  "source_context": {
    "seed_id": "1f94cb3feb36",
    "seed_type": "url",
    "seed_value": "https://sale.591.com.tw/?firstRow=0&regionid=1&shType=list",
    "page_index": 1,
    "source_url": "https://bff-house.591.com.tw/v1/web/sale/list?category=1&firstRow=0&regionid=1&shType=list&timestamp=1778688929809&type=2",
    "detail_url": "https://bff-house.591.com.tw/v1/web/sale/detail?__v__=1&id=20059610&timestamp=1778688939390",
    "fingerprint": "6cfc674cd69b6a2d52f0"
  },
  "identifiers": {
    "house_id": 20059610
  },
  "pricing": {
    "first_payment": 1799.7,
    "first_payment_ratio": 20,
    "monthly_payment": 155725,
    "mortgage_ratio": 0.8,
    "price": 5999,
    "show_price": "5,999",
    "taxes": 171.2,
    "unit_price": "127.58萬/坪"
  },
  "location": {
    "address": "<STREET_ADDRESS>",
    "latitude": "25.0555866",
    "longitude": "121.5638776",
    "region_id": 1,
    "region_name": "台北市",
    "section_id": 4,
    "section_name": "松山區"
  },
  "property": {
    "all_floors": 24,
    "area": 54.71,
    "balcony_area": 3.8,
    "balcony_count": 1,
    "bathroom_count": 2,
    "car_place": "10.51坪，平面式，已含售金內",
    "current_use": "住宅",
    "detail_info": {
      "layout": {
        "name": "格局",
        "value": "3房2廳2衛1陽台"
      },
      "house_age": {
        "name": "屋齡",
        "value": "10個月"
      },
      "area": {
        "name": "權狀坪數",
        "value": "54.71坪(含車位)"
      },
      "floor": {
        "name": "樓層",
        "value": "3F/24F"
      },
      "direction": {
        "name": "朝向",
        "value": "坐南朝北"
      },
      "community": {
        "name": "社區",
        "value": "鳴森大苑-碧硯閣"
      },
      "z_address": {
        "name": "地址",
        "value": "<FULL_ADDRESS>"
      },
      "kind": {
        "name": "現況",
        "value": "住宅"
      },
      "shape": {
        "name": "型態",
        "value": "電梯大樓"
      },
      "fitment": {
        "name": "裝潢程度",
        "value": "簡易裝潢"
      },
      "manage_price": {
        "name": "管理費",
        "value": "5000元/月"
      },
      "is_renting": {
        "name": "帶租約",
        "value": "否"
      },
      "purpose": {
        "name": "法定用途",
        "value": "住家用"
      },
      "car_place": {
        "name": "車位",
        "value": "10.51坪，平面式，已含售金內"
      },
      "ratio_rate": {
        "name": "公設比",
        "value": "30%"
      }
    },
    "fitment_name": "簡易裝潢",
    "floor": "3F/24F",
    "floor_info": "3F/24F",
    "ground_area": 5.78,
    "hall_count": 2,
    "house_age": 0,
    "kind": 9,
    "kind_name": "住宅",
    "layout": "3房2廳2衛1陽台",
    "main_area": 27.09,
    "public_area": 13.3,
    "room": "3房2廳2衛",
    "room_count": 3,
    "shape_name": "電梯大樓",
    "show_house_age": "10個月"
  },
  "community": {
    "community_link": "https://market.591.com.tw/5855864",
    "community_name": "鳴森大苑-碧硯閣"
  },
  "media": {
    "avatar_url": "<AGENT_AVATAR_URL>",
    "detail_photo_urls": [
      "https://img1.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
      "https://img1.591.com.tw/house/2026/04/19/177661006076395706.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881801435607.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881798892607.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881798897709.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881959479201.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881801454100.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881800106004.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881932887808.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881946718203.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881945644705.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881957983904.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882061938409.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659882089665109.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882091837802.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882115431403.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882120754102.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882203290102.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659882211245208.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882226858209.jpg!1000x.water2.jpg"
    ],
    "photo_count": 19,
    "photo_url": "https://img2.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
    "photo_urls": [
      "https://img1.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
      "https://img1.591.com.tw/house/2026/04/19/177661006076395706.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881801435607.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881798892607.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881798897709.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881959479201.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881801454100.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881800106004.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881932887808.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881946718203.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659881945644705.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659881957983904.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882061938409.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659882089665109.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882091837802.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882115431403.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882120754102.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882203290102.jpg!1000x.water2.jpg",
      "https://img2.591.com.tw/house/2026/04/19/177659882211245208.jpg!1000x.water2.jpg",
      "https://img1.591.com.tw/house/2026/04/19/177659882226858209.jpg!1000x.water2.jpg"
    ],
    "picture_details": [
      {
        "url": "https://img1.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
        "small_url": "https://img1.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
        "medium_url": "https://img1.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
        "source_url": "https://img1.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png"
      },
      {
        "id": 473989050,
        "url": "https://img1.591.com.tw/house/2026/04/19/177661006076395706.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177661006076395706.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177661006076395706.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177661006076395706.jpg!x.water2.jpg"
      },
      {
        "id": 473972414,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659881801435607.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659881801435607.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659881801435607.jpg!1000x.water2.jpg",
        "source_url": "https://img1.591.com.tw/house/2026/04/19/177659881801435607.jpg!x.water2.jpg"
      },
      {
        "id": 473972411,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659881798892607.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659881798892607.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659881798892607.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659881798892607.jpg!x.water2.jpg"
      },
      {
        "id": 473972413,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659881798897709.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659881798897709.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659881798897709.jpg!1000x.water2.jpg",
        "source_url": "https://img1.591.com.tw/house/2026/04/19/177659881798897709.jpg!x.water2.jpg"
      },
      {
        "id": 473972416,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659881959479201.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659881959479201.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659881959479201.jpg!1000x.water2.jpg",
        "source_url": "https://img1.591.com.tw/house/2026/04/19/177659881959479201.jpg!x.water2.jpg"
      },
      {
        "id": 473972412,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659881801454100.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659881801454100.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659881801454100.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659881801454100.jpg!x.water2.jpg"
      },
      {
        "id": 473972410,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659881800106004.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659881800106004.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659881800106004.jpg!1000x.water2.jpg",
        "source_url": "https://img1.591.com.tw/house/2026/04/19/177659881800106004.jpg!x.water2.jpg"
      },
      {
        "id": 473972415,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659881932887808.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659881932887808.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659881932887808.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659881932887808.jpg!x.water2.jpg"
      },
      {
        "id": 473972418,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659881946718203.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659881946718203.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659881946718203.jpg!1000x.water2.jpg",
        "source_url": "https://img1.591.com.tw/house/2026/04/19/177659881946718203.jpg!x.water2.jpg"
      },
      {
        "id": 473972419,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659881945644705.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659881945644705.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659881945644705.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659881945644705.jpg!x.water2.jpg"
      },
      {
        "id": 473972417,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659881957983904.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659881957983904.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659881957983904.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659881957983904.jpg!x.water2.jpg"
      },
      {
        "id": 473972421,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659882061938409.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659882061938409.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659882061938409.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882061938409.jpg!x.water2.jpg"
      },
      {
        "id": 473972422,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659882089665109.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659882089665109.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659882089665109.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882089665109.jpg!x.water2.jpg"
      },
      {
        "id": 473972423,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659882091837802.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659882091837802.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659882091837802.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882091837802.jpg!x.water2.jpg"
      },
      {
        "id": 473972424,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659882115431403.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659882115431403.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659882115431403.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882115431403.jpg!x.water2.jpg"
      },
      {
        "id": 473972425,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659882120754102.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659882120754102.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659882120754102.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882120754102.jpg!x.water2.jpg"
      },
      {
        "id": 473972427,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659882203290102.jpg!1000x.water2.jpg",
        "small_url": "https://img1.591.com.tw/house/2026/04/19/177659882203290102.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659882203290102.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882203290102.jpg!x.water2.jpg"
      },
      {
        "id": 473972426,
        "url": "https://img2.591.com.tw/house/2026/04/19/177659882211245208.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659882211245208.jpg!400x300.jpg",
        "medium_url": "https://img2.591.com.tw/house/2026/04/19/177659882211245208.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882211245208.jpg!x.water2.jpg"
      },
      {
        "id": 473972428,
        "url": "https://img1.591.com.tw/house/2026/04/19/177659882226858209.jpg!1000x.water2.jpg",
        "small_url": "https://img2.591.com.tw/house/2026/04/19/177659882226858209.jpg!400x300.jpg",
        "medium_url": "https://img1.591.com.tw/house/2026/04/19/177659882226858209.jpg!1000x.water2.jpg",
        "source_url": "https://img2.591.com.tw/house/2026/04/19/177659882226858209.jpg!x.water2.jpg"
      }
    ],
    "video_cover": "https://img2.591.com.tw/video/cover/2026-04-19/3046253.png!1000x.water2.png",
    "video_play_count": 130,
    "video_url": "https://video.591.com.tw/online/target/house/hls/2026-04-19/3046253/master.m3u8"
  },
  "contact": {
    "contact_mobile": "<CONTACT_PHONE>",
    "contact_name": "<CONTACT_NAME>",
    "preferred_contact_method": "mobile"
  },
  "metrics": {
    "browse_breakdown": {
      "mobile": "1455",
      "all": "1829",
      "computer": 374
    },
    "browse_count": 1829,
    "community_sale_count": 67,
    "post_days": 24
  },
  "amenities": {
    "condition_ids": [
      1,
      11,
      29,
      51
    ],
    "living_amenities": [
      "近便利商店",
      "近傳統市場",
      "近公園綠地",
      "近學校",
      "近醫療機構"
    ],
    "tags": [
      "含車位",
      "有陽台"
    ]
  },
  "flags": {
    "has_carport": true,
    "is_down_price": false,
    "is_new": false,
    "is_renting": "否",
    "is_vip": false
  },
  "attributes": {
    "refreshed_at": "25天前",
    "posted_at": 1776562918,
    "house_type": 3,
    "sale_type": 1,
    "operation_tag": {
      "type": 1,
      "title": "松山區 住宅收藏排名第6名"
    }
  }
}
```

### Field Reference

#### Sale Listing Record

**id** *(string, required)*: Stable listing identifier as a string.

**listing\_id** *(number, required)*: Numeric listing identifier.

**listing\_type** *(string, required)*: Listing segment, such as `sale` in the example record.

**url** *(string, required)*: Public listing page URL.

**title** *(string, optional)*: Listing title.

**description** *(string, optional)*: Public listing description or remarks.

**source\_context.seed\_id** *(string, optional)*: Identifier for the input source that produced the record.

**source\_context.seed\_type** *(string, optional)*: Source input type, such as `url`.

**source\_context.seed\_value** *(string, optional)*: Original input URL used for collection.

**source\_context.page\_index** *(number, optional)*: Result page index associated with the record.

**source\_context.source\_url** *(string, optional)*: Source URL captured for traceability.

**source\_context.detail\_url** *(string, optional)*: Detail source reference captured for traceability when enriched details are available.

**source\_context.fingerprint** *(string, optional)*: Stable fingerprint useful for deduplication and audit trails.

**identifiers.house\_id** *(number, optional)*: Source-specific house identifier.

**pricing.first\_payment** *(number, optional)*: First payment amount when available.

**pricing.first\_payment\_ratio** *(number, optional)*: First payment ratio as a percentage.

**pricing.monthly\_payment** *(number, optional)*: Estimated monthly payment.

**pricing.mortgage\_ratio** *(number, optional)*: Mortgage ratio as a decimal.

**pricing.price** *(number, optional)*: Listing price. For Taiwan sale listings, values are commonly represented in ten-thousand New Taiwan dollar units.

**pricing.show\_price** *(string, optional)*: Display-formatted price.

**pricing.taxes** *(number, optional)*: Tax amount when available.

**pricing.unit\_price** *(string, optional)*: Display-formatted unit price, commonly per ping.

**location.address** *(string, optional)*: Public address or street-level address text.

**location.latitude / location.longitude** *(string, optional)*: Geographic coordinates when available.

**location.region\_id / location.region\_name** *(number/string, optional)*: Region identifier and display name.

**location.section\_id / location.section\_name** *(number/string, optional)*: District or section identifier and display name.

**property.all\_floors** *(number, optional)*: Total floors in the building.

**property.area** *(number, optional)*: Property area, commonly in ping.

**property.balcony\_area** *(number, optional)*: Balcony area, commonly in ping.

**property.balcony\_count** *(number, optional)*: Number of balconies.

**property.bathroom\_count** *(number, optional)*: Number of bathrooms.

**property.car\_place** *(string, optional)*: Parking space description.

**property.current\_use** *(string, optional)*: Current use of the property.

**property.detail\_info.layout.name / property.detail\_info.layout.value** *(string, optional)*: Layout label and value.

**property.detail\_info.house\_age.name / property.detail\_info.house\_age.value** *(string, optional)*: House age label and display value.

**property.detail\_info.area.name / property.detail\_info.area.value** *(string, optional)*: Area label and display value.

**property.detail\_info.floor.name / property.detail\_info.floor.value** *(string, optional)*: Floor label and display value.

**property.detail\_info.direction.name / property.detail\_info.direction.value** *(string, optional)*: Orientation label and display value.

**property.detail\_info.community.name / property.detail\_info.community.value** *(string, optional)*: Community label and display value.

**property.detail\_info.z\_address.name / property.detail\_info.z\_address.value** *(string, optional)*: Address label and display value.

**property.detail\_info.kind.name / property.detail\_info.kind.value** *(string, optional)*: Property status label and display value.

**property.detail\_info.shape.name / property.detail\_info.shape.value** *(string, optional)*: Building type label and display value.

**property.detail\_info.fitment.name / property.detail\_info.fitment.value** *(string, optional)*: Decoration or fit-out label and display value.

**property.detail\_info.manage\_price.name / property.detail\_info.manage\_price.value** *(string, optional)*: Management fee label and display value.

**property.detail\_info.is\_renting.name / property.detail\_info.is\_renting.value** *(string, optional)*: Rental-status label and display value.

**property.detail\_info.purpose.name / property.detail\_info.purpose.value** *(string, optional)*: Legal-use label and display value.

**property.detail\_info.car\_place.name / property.detail\_info.car\_place.value** *(string, optional)*: Parking label and display value.

**property.detail\_info.ratio\_rate.name / property.detail\_info.ratio\_rate.value** *(string, optional)*: Shared-area ratio label and display value.

**property.fitment\_name** *(string, optional)*: Decoration or fit-out display name.

**property.floor / property.floor\_info** *(string, optional)*: Floor display text.

**property.ground\_area** *(number, optional)*: Land or ground area, commonly in ping.

**property.hall\_count** *(number, optional)*: Number of halls or living spaces.

**property.house\_age** *(number, optional)*: Numeric house age when available.

**property.kind / property.kind\_name** *(number/string, optional)*: Property kind identifier and display name.

**property.layout** *(string, optional)*: Full layout text.

**property.main\_area** *(number, optional)*: Main area, commonly in ping.

**property.public\_area** *(number, optional)*: Shared or public area, commonly in ping.

**property.room / property.room\_count** *(string/number, optional)*: Room layout text and room count.

**property.shape\_name** *(string, optional)*: Building shape or type display name.

**property.show\_house\_age** *(string, optional)*: Display-formatted house age.

**community.community\_link** *(string, optional)*: Public community page URL.

**community.community\_name** *(string, optional)*: Community or building name.

**media.avatar\_url** *(string, optional)*: Agent or account avatar image URL.

**media.detail\_photo\_urls** *(array of strings, optional)*: Detail photo URLs.

**media.photo\_count** *(number, optional)*: Number of photos reported for the listing.

**media.photo\_url** *(string, optional)*: Primary photo URL.

**media.photo\_urls** *(array of strings, optional)*: Listing photo URLs.

**media.picture\_details\[].id** *(number, optional)*: Image identifier when available.

**media.picture\_details\[].url** *(string, optional)*: Image URL.

**media.picture\_details\[].small\_url** *(string, optional)*: Small image URL.

**media.picture\_details\[].medium\_url** *(string, optional)*: Medium image URL.

**media.picture\_details\[].source\_url** *(string, optional)*: Source image URL.

**media.video\_cover** *(string, optional)*: Video cover image URL.

**media.video\_play\_count** *(number, optional)*: Public video play count.

**media.video\_url** *(string, optional)*: Public video URL when available.

**contact.contact\_mobile** *(string, optional)*: Public contact phone number when provided by the listing.

**contact.contact\_name** *(string, optional)*: Public contact name or account label.

**contact.preferred\_contact\_method** *(string, optional)*: Preferred contact method when available.

**metrics.browse\_breakdown.mobile / metrics.browse\_breakdown.computer / metrics.browse\_breakdown.all** *(string/number, optional)*: Browse count breakdown by device or total display value.

**metrics.browse\_count** *(number, optional)*: Total browse count.

**metrics.community\_sale\_count** *(number, optional)*: Number of sale listings associated with the community when available.

**metrics.post\_days** *(number, optional)*: Number of days since posting.

**amenities.condition\_ids** *(array of numbers, optional)*: Source-provided amenity or condition identifiers.

**amenities.living\_amenities** *(array of strings, optional)*: Nearby living amenity labels.

**amenities.tags** *(array of strings, optional)*: Listing tags.

**flags.has\_carport** *(boolean, optional)*: Indicates whether parking is included or available.

**flags.is\_down\_price** *(boolean, optional)*: Indicates whether the listing is marked as price-reduced.

**flags.is\_new** *(boolean, optional)*: Indicates whether the listing is marked as new.

**flags.is\_renting** *(string, optional)*: Display value for rental contract status.

**flags.is\_vip** *(boolean, optional)*: Indicates whether the listing is marked as VIP.

**attributes.refreshed\_at** *(string, optional)*: Display text for last refresh timing.

**attributes.posted\_at** *(number, optional)*: Posted timestamp when available.

**attributes.house\_type** *(number, optional)*: Source-provided house type identifier.

**attributes.sale\_type** *(number, optional)*: Source-provided sale type identifier.

**attributes.operation\_tag.type** *(number, optional)*: Source-provided operation tag type.

**attributes.operation\_tag.title** *(string, optional)*: Operation tag display text.

### Data Quality, Guarantees, And Handling

- **Structured records:** results are normalized into predictable JSON objects for downstream use.
- **Best-effort extraction:** fields may vary by region, session, availability, listing type, account visibility, and 591.com.tw interface changes.
- **Optional fields:** null-check optional fields in downstream code, especially media, contact, community, metric, and enriched detail fields.
- **Deduplication:** use `id` as the recommended stable key, with `url` or `source_context.fingerprint` as supporting keys when needed.
- **Freshness:** results reflect the publicly available data at run time.
- **Repeated runs:** use the recommended idempotency key when syncing data into warehouses, CRMs, or search indexes.

### Tips For Best Results

- Start with a small `limit` to validate output shape before scaling up.
- Use one geography, segment, or 591 search URL per run when you need cleaner segmentation.
- Leave the per-URL `limit` empty only when you are ready to collect available records without a cap.
- Create filters on 591.com.tw first, then paste the resulting URL into `startUrls`.
- Add additional URLs gradually so you can understand how each search scope changes coverage.
- Enable `enrich_data` when you need detailed listing context; disable it when search-level fields are sufficient.
- Use `id` for deduplication when storing results over time.

### How to Run on Apify

1. Open the Actor in Apify Console.
2. Configure `startUrls` with the 591 result pages you want to collect.
3. Set the maximum number of outputs to collect per URL with `limit`.
4. Choose whether to collect richer listing details with `enrich_data`.
5. Click **Start** and wait for the run to finish.
6. Download results in JSON, CSV, Excel, or other supported formats.

### Scheduling & Automation

#### Scheduling

**Automated Data Collection**

Use Apify schedules to run the actor on a recurring basis and keep property datasets fresh for monitoring, reporting, and enrichment workflows. Scheduled runs are useful for recurring market snapshots, lead review queues, and listing-change analysis.

- Navigate to **Schedules** in Apify Console
- Create a new schedule, such as daily, weekly, or custom cron
- Configure input parameters
- Enable notifications for run completion
- Add webhooks for automated processing

#### Integration Options

- **BI dashboards:** monitor pricing, availability, geographic coverage, listing volume, and property attributes over time.
- **Data warehouses:** store normalized property records for historical analysis, modeling, and operational reporting.
- **CRM enrichment:** sync public listing, location, contact, and property attributes into account or lead records.
- **Google Sheets or Airtable:** review selected listings, maintain lightweight research queues, or share curated datasets with non-technical teams.
- **Webhooks:** trigger validation, ingestion, notification, or enrichment workflows after each completed run.
- **Alerts and scheduled reports:** notify teams when new records, pricing movement, or segment changes appear in recurring collections.

### Export Formats And Downstream Use

Apify datasets can be exported from the run page or consumed by downstream systems. Use the format that matches your delivery and review workflow.

- **JSON:** for APIs, applications, and data pipelines
- **CSV or Excel:** for spreadsheet workflows and manual review
- **API access:** for automated ingestion into internal systems
- **BI and warehouses:** for reporting, dashboards, and historical analysis

### Performance

Estimated execution times:

- **Small runs (< 1,000 outputs):** ~3-5 minutes
- **Medium runs (1,000-5,000 outputs):** ~5-15 minutes
- **Large runs (5,000+ outputs):** ~15-30 minutes

Execution time varies based on filters, result volume, and how much information is returned per record. Highly filtered runs can finish faster, while broad discovery or detail-rich records may take longer.

### Limitations

- Availability depends on what <https://591.com.tw> publicly exposes at run time.
- Some optional fields may be missing on sparse records, older listings, or records without enriched public detail.
- Very broad searches may take longer or require higher limits.
- Target-side changes can affect field availability, naming, or visibility.
- Regional, account, listing type, or availability differences may change visible results.
- Contact, media, community, and metric fields should be treated as optional.

### Troubleshooting

- **No results returned:** check that each `startUrls` value is a supported 591 search result URL and that the target page has matching public records.
- **Fewer results than expected:** broaden the 591 filters, raise `limit`, or verify that the target contains enough matching records.
- **Some fields are empty:** optional fields depend on what each record publicly provides and whether enriched details are available.
- **Run takes longer than expected:** reduce scope, lower `limit` for validation, or split broad collection into smaller URL segments.
- **Output changed:** compare the current output with the field reference and report a small sample if support is needed.

### FAQ

#### What data does this actor collect?

It collects public 591.com.tw property records from supported search result URLs, including listing identifiers, titles, URLs, pricing, locations, property attributes, media, contacts, amenities, metrics, and enriched detail fields when available.

#### Can I filter by location, category, date, price, or other criteria?

Yes, when those filters are available on 591.com.tw. Apply the filters on 591 first, then paste the resulting search URL into `startUrls`.

#### Why did I receive fewer results than my limit?

The `limit` is a maximum per URL, not a guarantee. A run may return fewer records if the search page contains fewer matching public listings or if some records are unavailable at run time.

#### Can I schedule recurring runs?

Yes. Use Apify schedules to run the actor daily, weekly, or on a custom cron schedule for monitoring, reporting, and recurring enrichment workflows.

#### How do I avoid duplicates across runs?

Use `id` as the primary idempotency key. Keep `url` and `source_context.fingerprint` as supporting keys when syncing records into warehouses, CRMs, or search indexes.

#### Can I export the data to CSV, Excel, or JSON?

Yes. Apify datasets support exports in JSON, CSV, Excel, and other formats from the run page.

#### Does this actor collect private data?

The actor is intended to collect publicly available property listing information from 591.com.tw. Users are responsible for using collected data lawfully and responsibly.

#### Should I enable enrichment?

Enable `enrich_data` when you need richer property, media, contact, amenity, or community context. Disable it for faster runs when search-level fields are enough.

#### What should I include when reporting an issue?

Include the input used, the run ID, expected versus actual behavior, and a small output sample when relevant. Redact any sensitive workflow details before sharing.

### Compliance & Ethics

#### Responsible Data Collection

This actor collects publicly available Taiwan property listing information from <https://591.com.tw> for legitimate business purposes, including:

- **Real estate** research and market analysis
- **Property monitoring** and operational reporting
- **Lead review, enrichment, and data quality workflows**

This section is informational and not legal advice. Users are responsible for ensuring their use of the actor and collected data complies with applicable laws, regulations, contractual obligations, and platform terms.

#### Best Practices

- Use collected data in accordance with applicable laws, regulations, and the target site's terms
- Respect individual privacy and personal information
- Use data responsibly and avoid disruptive or excessive collection
- Do not use this actor for spamming, harassment, or other harmful purposes
- Follow relevant data protection requirements where applicable, including GDPR and CCPA

### Support

For help, use the actor page or Issues section. Include the input used with sensitive details redacted, the run ID, expected versus actual behavior, and a small output sample if it helps illustrate the issue.

# Actor input Schema

## `startUrls` (type: `array`):

Paste supported 591 result URLs, such as sale, rental, business, land, or community search pages. Use the filters on 591 first, then add the resulting URLs here to collect records that match those criteria.

## `limit` (type: `integer`):

Enter the maximum number of records to save for each URL. Leave this empty when you want the actor to continue collecting available results without a per-URL cap.

## `enrich_data` (type: `boolean`):

Turn this on to add available details such as descriptions, layout information, amenities, scores, transaction history, contact details, and additional photos. Leave it off for faster runs when search-level fields are enough.

## Actor input object example

```json
{
  "startUrls": [
    "https://sale.591.com.tw/?regionid=1&firstRow=0&shType=list"
  ],
  "limit": 100,
  "enrich_data": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://sale.591.com.tw/?regionid=1&firstRow=0&shType=list"
    ],
    "limit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fatihtahta/591-taiwan-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": ["https://sale.591.com.tw/?regionid=1&firstRow=0&shType=list"],
    "limit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fatihtahta/591-taiwan-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://sale.591.com.tw/?regionid=1&firstRow=0&shType=list"
  ],
  "limit": 100
}' |
apify call fatihtahta/591-taiwan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fatihtahta/591-taiwan-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "591.com.tw Scraper | Taiwan Real Estate Data",
        "description": "Extract commercial and residential property listings across Taiwan from 591.com.tw with unlimited coverage, rich listing detail, contact data, media, pricing, and community context. Built for enterprise-grade Taiwan real estate intelligence, deal sourcing and automated analytics pipelines.",
        "version": "0.0",
        "x-build-id": "897vjjXg4qYBFxCQr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fatihtahta~591-taiwan-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fatihtahta-591-taiwan-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/fatihtahta~591-taiwan-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fatihtahta-591-taiwan-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/fatihtahta~591-taiwan-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fatihtahta-591-taiwan-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",
                "properties": {
                    "startUrls": {
                        "title": "Add 591 Search URLs",
                        "type": "array",
                        "description": "Paste supported 591 result URLs, such as sale, rental, business, land, or community search pages. Use the filters on 591 first, then add the resulting URLs here to collect records that match those criteria.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "limit": {
                        "title": "Set Maximum Results per URL",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Enter the maximum number of records to save for each URL. Leave this empty when you want the actor to continue collecting available results without a per-URL cap."
                    },
                    "enrich_data": {
                        "title": "Collect Richer Listing Details",
                        "type": "boolean",
                        "description": "Turn this on to add available details such as descriptions, layout information, amenities, scores, transaction history, contact details, and additional photos. Leave it off for faster runs when search-level fields are enough.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
