# Taiwan Real Estate Transactions (實價登錄) — clean English data (`hill_man_coding/taiwan-real-estate-transactions`) Actor

Official Taiwan property sale, pre-sale and rental transaction prices from the Ministry of the Interior open data, converted to clean English JSON with ISO dates and price per ping.

- **URL**: https://apify.com/hill_man_coding/taiwan-real-estate-transactions.md
- **Developed by:** [Hill Man](https://apify.com/hill_man_coding) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Taiwan Real Estate Transactions (實價登錄) — clean English data

Get **official Taiwan property transaction prices** — sales, pre-sales and rentals in all 22 cities and counties — as clean, analysis-ready JSON/CSV/Excel.

The data comes straight from the Ministry of the Interior's real-price registration open data ([current release](https://data.gov.tw/dataset/25119), [past seasons](https://data.gov.tw/dataset/18703)), published under the [Open Government Data License, version 1.0](https://data.gov.tw/license) (commercial use allowed; attribution required). No login and no scraping of private pages.

**Privacy:** addresses are cut to road / lane level by this actor — house numbers, alleys, neighbourhood (鄰) numbers, floors and land lot numbers are removed. The free-text remarks column (備註) and the pre-sale unit number are not output, because they often repeat full addresses or names. Even so, transaction records can relate to individuals; you are responsible for using the data in line with Taiwan's Personal Data Protection Act and your own local law.

### Why use this instead of the raw files?

The official CSVs are Chinese-only, use ROC (Minguo) dates, full-width digits and Chinese floor numbers, and come as a zip of 200+ files. This actor gives you:

- **English field names** and English labels for property type, building type, main use, material and parking type (original Chinese values kept alongside).
- **ISO dates** (`2026-06-01`) instead of ROC dates (`1150601`).
- **Numbers as numbers**: prices, areas, floors (`十四層` → `14`), room counts.
- **Price per ping** (坪) added next to price per square metre.
- One clean dataset across all cities, with sale / pre-sale / rental fields mapped consistently.

### Input

| Field | Example | Notes |
|---|---|---|
| `season` | `latest` or `115S2` | `latest` = the most recent ~10-day government release only (each record gets a `releasePeriod`; it is `null` for a past quarter). For a full quarter use ROC year + `S` + quarter (115S2 = 2026 Q2); a quarter that is not published yet stops with a clear error. |
| `cities` | `["a","f"]` | Empty = all 22. `a` Taipei, `b` Taichung, `c` Keelung, `d` Tainan, `e` Kaohsiung, `f` New Taipei, `g` Yilan, `h` Taoyuan, `i` Chiayi City, `j` Hsinchu County, `k` Miaoli, `m` Nantou, `n` Changhua, `o` Hsinchu City, `p` Yunlin, `q` Chiayi County, `t` Pingtung, `u` Hualien, `v` Taitung, `w` Kinmen, `x` Penghu, `z` Lienchiang. |
| `types` | `["sale","presale","rental"]` | Default `sale`. Unknown values stop the run with an error. |
| `maxItems` | `1000` | 0 = no limit. |

### Output (one record)

```json
{
  "city": "Taipei City", "cityZh": "臺北市", "district": "中山區",
  "type": "presale", "target": "Land + building", "targetZh": "房地(土地+建物)",
  "address": "臺北市中山區新生北路二段68巷",
  "transactionDate": "2026-02-11",
  "floor": 10, "totalFloors": 23,
  "buildingType": "High-rise residential (11+ floors, elevator)",
  "buildingAreaSqm": 79.36, "rooms": 2, "livingRooms": 2, "bathrooms": 2,
  "totalPriceTwd": 32050000, "unitPriceTwdPerSqm": 403856, "unitPriceTwdPerPing": 1335061,
  "projectName": "中山麗池", "id": "RPXNMLNKKHLGFCA08CB",
  "season": "latest", "releasePeriod": { "from": "2026-08-21", "to": "2026-08-31" }
}
```

Rental records have `rentTwd`, `leasePeriod`, `furnished`, `rentalType`, `hasElevator`, `equipment` instead of sale prices.

Fields kept in Chinese (proper names or free text from the source): `district`, `address`, `urbanZoning`, `projectName`, `rentalType`, `equipment`, `rentalService`, `cancellation`, plus the `…Zh` originals next to each translated field. Uncommon building materials or uses with no English mapping are passed through in Chinese.

### Typical uses

Market research, price-per-ping comparisons by district, rental yield estimates, dashboards, academic research, and feeding property data into your own models.

### Notes

- Data is updated by the government about every 10 days (current release) and quarterly (past seasons). Values are exactly as registered; obviously wrong entries in the source are not "fixed".
- Source attribution: 內政部不動產交易實價查詢服務網／政府資料開放平臺 (data.gov.tw), Open Government Data License 1.0.

# Actor input Schema

## `season` (type: `string`):

"latest" for the current release, or a past quarter as ROC year + S + quarter, e.g. "115S2" (2026 Q2).

## `cities` (type: `array`):

City codes. Leave empty for all 22. a Taipei, b Taichung, c Keelung, d Tainan, e Kaohsiung, f New Taipei, g Yilan, h Taoyuan, i Chiayi City, j Hsinchu County, k Miaoli, m Nantou, n Changhua, o Hsinchu City, p Yunlin, q Chiayi County, t Pingtung, u Hualien, v Taitung, w Kinmen, x Penghu, z Lienchiang.

## `types` (type: `array`):

sale, presale, rental. Default: sale.

## `maxItems` (type: `integer`):

Stop after this many records (0 = no limit).

## Actor input object example

```json
{
  "season": "latest",
  "cities": [
    "a"
  ],
  "types": [
    "sale"
  ],
  "maxItems": 0
}
```

# Actor output Schema

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

One record per sale, pre-sale or rental transaction.

# 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 = {
    "cities": [
        "a"
    ],
    "types": [
        "sale"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hill_man_coding/taiwan-real-estate-transactions").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 = {
    "cities": ["a"],
    "types": ["sale"],
}

# Run the Actor and wait for it to finish
run = client.actor("hill_man_coding/taiwan-real-estate-transactions").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "cities": [
    "a"
  ],
  "types": [
    "sale"
  ]
}' |
apify call hill_man_coding/taiwan-real-estate-transactions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hill_man_coding/taiwan-real-estate-transactions"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/i9eSqLKYy19JFkqBP/builds/H5utLrbf2AdzwRydT/openapi.json
