# Taiwan Real Estate Sold Prices API in English (`japan-open-data/taiwan-property-sold-prices`) Actor

Get Taiwan's official real estate sold prices and rents in English (MOI actual price registration): NT$ per ping and m², size, age and building type for sales, pre-sales and rentals, plus district medians. Any city, every 10 days, back to 2012. No API key. API or MCP, $4 per 1,000 rows.

- **URL**: https://apify.com/japan-open-data/taiwan-property-sold-prices.md
- **Developed by:** [Japan Open Data](https://apify.com/japan-open-data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 property records

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 Sold Prices API in English

**Get Taiwan's official real estate sold prices in English: every registered home, land and parking sale, pre-sale (off-plan) contract and rental, with price per ping and per m², size, building age and type, and district medians.** This Actor reads the Ministry of the Interior's *actual price registration* open data (實價登錄, updated every 10 days) and returns clean, flat JSON: one row per transaction, plus summary rows with the median price per district.

- **All 22 cities and counties**, any district: Taipei, New Taipei, Taoyuan, Taichung, Tainan, Kaohsiung, Hsinchu and the rest.
- **Latest 10-day batch** (published on the 1st, 11th and 21st of each month) **or any past quarter back to 2012 Q4.**
- **Sales, pre-sales and rentals** in one tool, with the same English field names.
- **Official English street and district names** (Chunghwa Post), prices in NT$, areas in m² and ping (坪).
- **Privacy by design:** addresses end at the road, section and lane. House numbers, alleys, floors, land lot numbers and the free-text remarks are never returned (see [Privacy](#privacy-what-is-left-out)).
- Built for pipelines and AI agents: flat camelCase fields, a `status` on every row, plain-English errors that are never charged. No API key, no login.

### Why use this instead of the MOI website or a Taiwanese price site?

| | MOI search site / CSV download | Taiwanese price sites and APIs | **This Actor** |
|---|---|---|---|
| Language | Chinese only | Chinese only | **English** (Chinese kept alongside) |
| Format | CSV per city with ROC dates, full-width digits, 30+ Chinese columns | Web pages, or an API with a Chinese-only sign-up | **Flat JSON, ISO dates, numbers as numbers** |
| Price per ping and per m² | Per m² only | Yes | **Both, plus district medians** |
| Special deals (related parties, government, rooftop additions) | Buried in a free-text remark | Partly | **Yes/no flags, and left out of the medians** |
| Past quarters | Download and merge by hand | Varies | **`period: "2026Q2"`** |
| API, schedules, MCP | No | Paid plans | **Yes** |

### What can you do with Taiwan Real Estate Sold Prices API?

- **Foreign investors, funds and brokers** - benchmark an asking price against what actually sold in the same district and street this month, in NT$ per ping.
- **Proptech and data teams** - feed a pricing model or a dashboard with every registered sale, pre-sale and rental, refreshed every 10 days.
- **Relocation and corporate housing** - median rents per district and what a furnished whole unit rents for.
- **Analysts and journalists** - quarter-by-quarter district medians for a market report.
- **AI agents** - answer "what do apartments sell for in Da'an District, Taipei?" with one tool call and a source link.

### How to use

1. Click **Try for free**. The default input returns the newest 20 sales in **Da'an District, Taipei** plus one summary row, in a few seconds.
2. Change **City or county** (English, pinyin or Chinese all work: `Taipei`, `Taibei`, `臺北市`, `台北`) and **District** (`Xinyi`, `Banqiao`, `大安區`), or clear the district to get the whole city with one summary row per district.
3. Choose **Transaction type**: `sale`, `presale` or `rent`.
4. For history, set **Period** to a finished quarter such as `2026Q2`.

Via the API with only `"city"`, you get the whole city: the newest 20 transactions (often land-only deals first) plus one summary row per district. Add `"propertyType": "building"` for homes and apartments.

#### Run it on a schedule

The MOI publishes a new batch on the 1st, 11th and 21st of each month. Create a Schedule in Apify Console that runs on the 2nd, 12th and 22nd with your city, and add a webhook or integration (Google Sheets, Slack, your database) to receive the rows.

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `city` | text (required) | `Taipei` | Any city or county, in English (`New Taipei`, `Kaohsiung`, `Hsinchu County`), pinyin (`Taibei`, `Gaoxiong`) or Chinese (`臺北市`, `台中`). `Hsinchu` and `Chiayi` mean the cities; add `County` for the counties. |
| `district` | text | `Da'an` (prefilled in Console) | One district / township within the city (`Da'an`, `Daan`, `Xinyi District`, `大安區`). Empty or omitted (for example in an API call) = the whole city, with one summary row per district. |
| `transactionType` | `sale` / `presale` / `rent` | `sale` | Existing property and land sales, pre-sale contracts of new projects, or rentals. |
| `period` | text | `latest` | `latest` = the newest 10-day batch; or a finished quarter from `2012Q4` (e.g. `2026Q2`; the MOI code `115S2` also works). |
| `propertyType` | `any` / `building` / `land` / `parking` | `any` | `building` = anything with a building (homes, shops, offices, with or without parking). |
| `sortBy` | `date` / `price` | `date` | Newest first, or highest total price (monthly rent for rentals) first. |
| `maxResults` | integer | 20 | Transaction rows to return (1 to 20,000). Summary rows always use all matching transactions. |
| `includeSummary` | boolean | `true` | Adds `rowType: "summary"` rows with count and medians per district (and the whole city when no district is set). |

#### Input examples

```json
{ "city": "New Taipei", "district": "Banqiao", "transactionType": "sale", "propertyType": "building", "maxResults": 200 }
```

```json
{ "city": "Kaohsiung", "period": "2026Q2", "maxResults": 1, "includeSummary": true }
```

```json
{ "city": "台北", "district": "信義區", "transactionType": "rent", "sortBy": "price" }
```

### Output

Transaction row (real data, latest batch published September 2026; some fields trimmed):

```json
{
  "status": "ok",
  "rowType": "transaction",
  "transactionType": "sale",
  "transactionDate": "2026-08-11",
  "city": "Taipei City",
  "district": "Da'an District",
  "street": "Ln. 176, Sec. 1, Da'an Rd.",
  "locationEnglish": "Ln. 176, Sec. 1, Da'an Rd., Da'an District, Taipei City",
  "locationChinese": "臺北市大安區大安路一段176巷",
  "propertyType": "land+building",
  "buildingType": "Mid-rise residential (up to 10 floors, elevator)",
  "mainUse": "Residential",
  "mainMaterial": "Reinforced concrete (RC)",
  "totalFloors": 9,
  "builtDate": "2026-05-13",
  "buildingAgeYears": 0.2,
  "buildingAreaSqm": 30.86,
  "buildingAreaPing": 9.34,
  "rooms": 1,
  "livingRooms": 0,
  "bathrooms": 1,
  "totalPriceTwd": 15880000,
  "unitPriceTwdPerSqm": 514582,
  "unitPriceTwdPerPing": 1701097,
  "parkingSpaceCount": 0,
  "urbanZoning": "Residential",
  "relatedPartyTransaction": false,
  "includesRooftopAddition": false,
  "hasOtherRemarks": false,
  "currency": "TWD",
  "period": "latest",
  "periodDescription": "latest batch: sales registered 2026-09-01 to 2026-09-10; pre-sales signed 2026-08-01 to 2026-08-10; rentals signed 2026-08-01 to 2026-08-10",
  "sourceFileUrl": "https://plvr.land.moi.gov.tw/Download?type=csv&fileName=a_lvr_land_a.csv",
  "fetchedAt": "2026-09-24T22:31:21Z"
}
```

Summary row (same run):

```json
{
  "status": "ok",
  "rowType": "summary",
  "summaryLevel": "district",
  "transactionType": "sale",
  "city": "Taipei City",
  "district": "Da'an District",
  "transactionCount": 52,
  "medianSampleCount": 44,
  "excludedFromMedianCount": 8,
  "medianTotalPriceTwd": 33100000,
  "medianUnitPriceTwdPerPing": 1229162,
  "medianUnitPriceTwdPerSqm": 371822,
  "medianBuildingAreaPing": 31.58,
  "medianBuildingAgeYears": 38.5,
  "currency": "TWD"
}
```

Free rows: an `error` row for invalid input (for example `"Unknown district \"Banqiao\" in Taipei City: use one of its districts ... or leave \"district\" empty for the whole city."`) and a `not_found` row when nothing matches.

#### Output fields

| Field | Meaning |
|---|---|
| `status` | `ok` (charged), `not_found` or `error` (free) |
| `rowType` | `transaction` or `summary` |
| `transactionType` | `sale`, `presale` or `rent` |
| `transactionDate` | Contract date (ISO). Sales are published by *registration* date, so a batch can contain some older contracts |
| `city`, `district`, `street`, `locationEnglish` | Official English names (Chunghwa Post). `street` ends at road, section and lane; `streetNameSource` is `pinyin` for the 1-2% of roads not in the Chunghwa Post table |
| `landSection` / `landSectionChinese` | Land-only rows: the cadastral section (no lot number) |
| `cityChinese`, `districtChinese`, `streetChinese`, `locationChinese` | The same place in Chinese |
| `propertyType` | `land+building`, `land+building+parking`, `land`, `building`, `parking` (rentals: `building`, `building+parking`, ...) |
| `buildingType`, `mainUse`, `mainMaterial` | English categories (`mainUseChinese` keeps the registered wording) |
| `totalFloors`, `builtDate`, `buildingAgeYears` | Floors of the whole building, completion date, age at the contract date |
| `landAreaSqm/Ping`, `buildingAreaSqm/Ping`, `mainBuildingAreaSqm/Ping`, `auxiliaryAreaSqm`, `balconyAreaSqm` | Areas. 1 ping = 3.3058 m². Building area includes the shared common area |
| `rooms`, `livingRooms`, `bathrooms`, `hasPartitions`, `hasManagementOrganization`, `hasElevator` | Layout and building facts |
| `totalPriceTwd`, `unitPriceTwdPerSqm`, `unitPriceTwdPerPing` | Sales / pre-sales. The total includes parking; the MOI unit price excludes separately priced parking |
| `parkingSpaceCount`, `parkingType`, `parkingAreaSqm`, `parkingPriceTwd` | Parking in the deal |
| `landParcelCount`, `buildingCount` | Number of land parcels and buildings in the deal |
| `urbanZoning` (+`urbanZoningDetailChinese`), `nonUrbanZone`, `nonUrbanLandUse` | Zoning in English |
| `projectNameChinese`, `contractCancelled`, `cancellationDate` | Pre-sales only: the project (building development) name and whether the contract was cancelled |
| `monthlyRentTwd`, `rentTwdPerSqm`, `rentTwdPerPing`, `rentalType`, `furnished`, `hasBuildingManager`, `leaseStart`, `leaseEnd`, `includedEquipment`, `rentalServiceType` | Rentals only |
| `relatedPartyTransaction`, `governmentSaleOrPurchase`, `includesRooftopAddition`, `includesAdditionOrUnregisteredStructure`, `parkingOnlyTransaction`, `defectiveProperty`, `includesPublicFacilityReservedLand`, `priceIncludesFurnishingsOrRenovation`, `surfaceRightsBuilding`, `presaleOrSeparateRegistration` | Yes/no flags derived from the official remark (sales) |
| `leaseRenewal`, `rentIncludesManagementFee`, `socialHousingProgram`, `sharedTenancy`, `partialPremisesLease` | Yes/no flags derived from the official remark (rentals) |
| `hasOtherRemarks` | The official remark said something that is not one of the flags above (the text itself is not returned) |
| Summary: `transactionCount`, `medianSampleCount`, `excludedFromMedianCount`, `medianTotalPriceTwd`, `medianUnitPriceTwdPerPing`, `medianUnitPriceTwdPerSqm`, `medianMonthlyRentTwd`, `medianRentTwdPerPing`, `medianBuildingAreaPing`, `medianBuildingAgeYears`, `landOnlyCount`, `earliestTransactionDate`, `latestTransactionDate` | Medians use transactions with a building and leave out related-party, government, parking-only, defective-property and public-facility-land deals |
| `period`, `periodDescription`, `sourceFileUrl`, `sourceUrl`, `fetchedAt`, `attribution` | Provenance |
| `error` | Plain-English reason on free rows |

### How much does it cost?

Pay per event - you pay per returned property record (a transaction row or a district summary row with `status: "ok"`), plus a tiny fee per run:

| Event | Price |
|---|---|
| Property record (`result-row`) | **$0.004** per row (**$4.00 per 1,000**) |
| Actor start (`apify-actor-start`) | $0.001 per run |

`not_found` and `error` rows are free. No subscription, no minimum.

| Use | Rows | Cost |
|---|---|---|
| Median price per ping for one district (`maxResults: 1`) | 2 | **under 1 cent** |
| District medians for a whole city (`maxResults: 1`, no district) | about 15-40 | about $0.06-$0.17 |
| Default run (Da'an District, 20 sales + 1 summary) | 21 | about $0.09 |
| API call with only `"city": "Taipei"` (20 transactions + 13 summary rows) | 33 | about $0.13 |
| Every sale in Taipei in one 10-day batch | about 370 | about $1.50 |
| Every sale in one district for a quarter | about 200-1,000 | about $0.80-$4.00 |
| One district on a schedule, every batch (3 runs a month) | about 150 a month | about $0.60 a month |

Set **Maximum cost per run** in the run options to cap any run.

### Use via API & MCP (AI agents)

REST API (synchronous, returns the rows):

```bash
curl -X POST "https://api.apify.com/v2/acts/japan-open-data~taiwan-property-sold-prices/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"city": "Taipei", "district": "Xinyi", "transactionType": "sale", "maxResults": 20}'
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("japan-open-data/taiwan-property-sold-prices").call(
    run_input={"city": "New Taipei", "period": "2026Q2", "maxResults": 1})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["rowType"] == "summary":
        print(row.get("district"), row["transactionCount"], row["medianUnitPriceTwdPerPing"])
```

MCP: add the Apify MCP server (`https://mcp.apify.com`) to Claude, Cursor or any MCP client and enable the tool `japan-open-data/taiwan-property-sold-prices`.

Recommended settings for agents:

- For "how much do homes cost in district X?", use `{"city": "<city>", "district": "<district>", "propertyType": "building", "maxResults": 5}` and quote the summary row's `medianUnitPriceTwdPerPing` and `transactionCount`.
- For a city overview, leave `district` empty and set `maxResults: 1`: you get one summary row per district.
- The latest batch covers only about 10 days; for a more stable median use a finished quarter (`"period": "2026Q2"`).
- Taiwanese prices are usually quoted in NT$ per ping (坪); 1 ping = 3.3058 m².
- Quote `periodDescription` and `sourceUrl` in answers, and say that prices are declared prices, not appraisals.

Summary for AI assistants: *This tool returns Taiwan's official Ministry of the Interior real-estate transaction records (actual price registration, updated every 10 days, quarters back to 2012) for a city and district as English JSON rows: date, street (no house number), building type, age, size in m² and ping, total price and price per ping or monthly rent, plus district median summary rows.*

### Privacy: what is left out

Since 2021 the official files include the full street address with house number and floor. Combined with the date and price, that can point to a specific owner in the land registry. This Actor therefore:

- **cuts every address after the road, section and lane** (`Ln. 176, Sec. 1, Da'an Rd.`). Alleys (弄), house numbers (號) and floors (樓) are never returned, and neither is the floor of the unit that was sold;
- returns **only the cadastral section** for land deals, never the land lot number (地號);
- **never returns the free-text remark** (備註), which can contain masked names of buyers and sellers; well-known phrases are turned into yes/no flags instead;
- drops the MOI case serial numbers and, for pre-sales, the building and unit number.

Buyers' and sellers' names are not in the official data. A consequence of this design: you cannot look up the sale history of one specific apartment, only of its street and district.

### FAQ

#### How fresh is the data?

Each run downloads the MOI file live. The MOI publishes a new 10-day batch on the 1st, 11th and 21st of each month. Sales appear once they are *registered*, usually 1 to 2 months after the contract; pre-sales and rentals are reported by contract date.

#### Why are some contract dates older than the batch?

Sales are published by registration date. A contract signed long ago but registered recently appears in the current batch. `transactionDate` is always the contract date.

#### Are these appraisals?

No. They are the prices the parties declared to the government. Flags such as `relatedPartyTransaction` mark deals that may not be at market price; the summary medians leave them out.

#### What is a ping?

The unit Taiwanese buyers use for floor area: 1 ping (坪) = 3.3058 m² = 35.58 sq ft.

#### I read Chinese. Do I need this?

Maybe not. For a few look-ups, the MOI's own search site and Taiwanese price sites are free, and some Chinese-language APIs have free tiers. This Actor is for English-speaking users, pipelines and AI agents that need the records as clean English JSON, in bulk, on a schedule or through MCP, without a Chinese sign-up.

#### Is it legal to use this data?

Yes. The MOI publishes it as open government data under the Open Government Data License 1.0, which allows commercial use and re-publishing with attribution. Every row carries the attribution, and personal details are removed (see Privacy).

#### Is this an official MOI service?

No. It re-publishes the MOI's open data under the Open Government Data License. It is not affiliated with, or endorsed by, the Ministry of the Interior.

### Troubleshooting

| Symptom | Fix |
|---|---|
| `Unknown city` | Use a Taiwanese city or county: `Taipei`, `New Taipei`, `Taichung`, `Kaohsiung`, `Hsinchu County`, `臺北市` |
| `Unknown district` | The district must be inside the city (Banqiao is in New Taipei, not Taipei). Leave it empty to see all districts |
| `not_found` in a small county | The latest 10-day batch can be empty for small places; use a past quarter (`"period": "2026Q2"`) |
| Quarter "has not ended yet" or "not published yet" | Quarters appear a few weeks after they end; use `latest` or an earlier quarter |
| Run stopped early | Your **Maximum cost per run** was reached |

### Known limitations

- Street names come from the Chunghwa Post English table; about 1-2% of roads (for example new roads or intersections such as "A Rd. and B St.") are transliterated with Hanyu Pinyin instead (`streetNameSource: "pinyin"`). Some rural addresses have no road and show only the village or district.
- English building types, uses and materials are fixed translations of the MOI categories; `mainUseChinese` keeps the registered wording.
- Prices are in NT$ only; no currency conversion.
- One city per run. Run it several times (or on a schedule) for more cities.

### Data source and licence

Source: Ministry of the Interior, Department of Land Administration, [Real Estate Actual Price Registration open data](https://plvr.land.moi.gov.tw/DownloadOpenData) (不動產成交案件實際資訊資料供應系統; data.gov.tw datasets [77051](https://data.gov.tw/dataset/77051) and [25119](https://data.gov.tw/dataset/25119)). English city, district and road names: Chunghwa Post, [縣市鄉鎮中英對照檔](https://data.gov.tw/dataset/5949) and [路街中英對照](https://data.gov.tw/dataset/152276). All licensed under the [Open Government Data License, version 1.0](https://data.gov.tw/license). The data has been translated and reduced (addresses shortened, remarks converted to flags) by this Actor. This Actor is not affiliated with, or endorsed by, the Ministry of the Interior or Chunghwa Post.

### More from Japan Open Data

- [UK Importers & Exporters by Product (HMRC Data)](https://apify.com/japan-open-data/uk-importer-exporter-directory) — UK companies that imported or exported a product (HS code) each month, with town, postcode district and a "new trader" flag, from official HMRC data.
- [UK Visa Sponsor Register Tracker (Daily Changes)](https://apify.com/japan-open-data/uk-visa-sponsor-register) — track new, removed and downgraded UK visa sponsors daily from the official Home Office register, or check whether a company holds a sponsor licence.
- [US Flood Zone Lookup by Address (FEMA NFHL)](https://apify.com/japan-open-data/us-flood-zone-lookup) — the official FEMA flood zone, SFHA status and base flood elevation for US addresses or coordinates, in bulk.
- [France Property Risk Lookup by Address (Georisques)](https://apify.com/japan-open-data/france-property-risk-lookup) — official Géorisques risks for any French address or coordinates: flood, clay shrink-swell, seismic zone, radon, past natural-disaster declarations and nearby industrial sites.
- [UK Flood Risk Lookup by Postcode (England)](https://apify.com/japan-open-data/uk-flood-zone-lookup) — Environment Agency flood zone, recorded flood extents and flood defences for any postcode or coordinates in England.
- [England Listed Building & Conservation Area Check](https://apify.com/japan-open-data/england-heritage-constraint-lookup) — official listed buildings, scheduled monuments, conservation areas and Article 4 directions for any postcode or coordinates in England, one row per location.
- [UK NHS Organisation Lookup (Official ODS Codes)](https://apify.com/japan-open-data/uk-nhs-organisation-lookup) — official NHS ODS register by postcode, type or ODS code: GP practices, pharmacies, dentists, NHS trusts, care homes and more.
- [UK HGV Operator Licence Lookup (Official DVSA)](https://apify.com/japan-open-data/uk-hgv-operator-licence) — Great Britain's official HGV and bus / coach operator licences by company, postcode and fleet size.
- [UK Waste Carrier Licence Check (Environment Agency)](https://apify.com/japan-open-data/uk-waste-carrier-register) — check whether an English business is a registered waste carrier, broker or dealer.
- [US Hail History by Location (NOAA NEXRAD Radar)](https://apify.com/japan-open-data/us-hail-history) — every hail day near any U.S. latitude/longitude with max estimated hail size.
- [US Storm Reports API: Hail, Wind & Tornado (NWS)](https://apify.com/japan-open-data/us-storm-reports-live) — U.S. hail, wind, tornado and flood reports from official NWS Local Storm Reports.
- [Mexico Gas Prices API by Station (Official CNE)](https://apify.com/japan-open-data/mexico-fuel-station-prices) — today's gas and diesel prices at every Mexican gas station, from the official CNE feed.
- [Argentina Fuel Prices API by Station (Official)](https://apify.com/japan-open-data/argentina-fuel-station-prices) — last reported gasoline (nafta), diesel and CNG prices at every Argentine gas station.
- [TSA Checkpoint Travel Numbers (Daily, Weekly & YoY)](https://apify.com/japan-open-data/tsa-checkpoint-throughput) — daily U.S. TSA airport checkpoint traveler counts.
- [Japan Postal Code & Address in English](https://apify.com/japan-open-data/japan-postal-code-english) — Japanese postal codes and addresses in English/romaji, kanji and kana.

### Feedback

Found a wrong translation, a street name that should be in English, or want another field or another country's official sold prices? Open an issue on the **Issues** tab - it will be read.

# Actor input Schema

## `city` (type: `string`):

Any Taiwanese city or county, in English, Hanyu Pinyin or Chinese: "Taipei", "New Taipei", "Taichung", "Kaohsiung", "Tainan", "Taoyuan", "Hsinchu County", "Taibei", "臺北市" or "台北". "Hsinchu" and "Chiayi" mean the cities; add "County" for the counties.

## `district` (type: `string`):

One district, township or city within the city / county, e.g. "Da'an", "Daan", "Xinyi District", "Banqiao" or "大安區". Leave empty for the whole city (one summary row per district is added).

## `transactionType` (type: `string`):

"sale" = sales of existing homes, land and parking; "presale" = pre-sale (off-plan) contracts of new projects; "rent" = registered rental contracts.

## `period` (type: `string`):

"latest" = the newest 10-day batch (the MOI publishes on the 1st, 11th and 21st of each month), or a finished quarter from 2012Q4, e.g. "2026Q2" (a whole quarter of one city can be several thousand rows).

## `propertyType` (type: `string`):

"building" = anything with a building (homes, shops, offices, with or without parking); "land" = land-only transactions; "parking" = parking spaces only.

## `sortBy` (type: `string`):

"date" = newest transaction first; "price" = highest total price (or monthly rent) first.

## `maxResults` (type: `integer`):

Maximum number of transaction rows to return (1 to 20000). Summary rows are always computed from all matching transactions.

## `includeSummary` (type: `boolean`):

Adds rows with rowType "summary": number of transactions and median total price, price per ping and per m², size and building age for each district (and the whole city when no district is given). Related-party, government, parking-only and defective-property deals are left out of the medians.

## Actor input object example

```json
{
  "city": "Taipei",
  "district": "Da'an",
  "transactionType": "sale",
  "period": "latest",
  "propertyType": "any",
  "sortBy": "date",
  "maxResults": 20,
  "includeSummary": true
}
```

# Actor output Schema

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

Price, price per ping and m², size, age and building type per transaction, in English. Table view: overview.

# 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 = {
    "city": "Taipei",
    "district": "Da'an",
    "period": "latest",
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("japan-open-data/taiwan-property-sold-prices").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 = {
    "city": "Taipei",
    "district": "Da'an",
    "period": "latest",
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("japan-open-data/taiwan-property-sold-prices").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 '{
  "city": "Taipei",
  "district": "Da'\''an",
  "period": "latest",
  "maxResults": 20
}' |
apify call japan-open-data/taiwan-property-sold-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,japan-open-data/taiwan-property-sold-prices"
        }
    }
}
```

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/Uc69isXoRxfVlgnil/builds/se3Jvti4LkkXGsczi/openapi.json
