# Korea Real Estate Transactions – Apartment Sales & Rents (`antonio_aleph/korea-real-estate-transactions`) Actor

Official South Korean apartment sale and rent (jeonse / monthly) transactions from MOLIT as clean English JSON: price, deposit, area, floor, complex, road address, contract date. Search any district by English or Korean name. Daily updates.

- **URL**: https://apify.com/antonio_aleph/korea-real-estate-transactions.md
- **Developed by:** [Antonio Aleph](https://apify.com/antonio_aleph) (community)
- **Categories:** Real estate, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 transaction records

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/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

**Korea Real Estate Transactions** gives you South Korea's official apartment **sale and rent (jeonse / monthly) transactions** from the Ministry of Land, Infrastructure and Transport (MOLIT) as **clean English JSON**: price or deposit, exclusive area, floor, complex, road address and contract date, for every district in the country. Search in English or Korean, refreshed daily.

> ▶️ **Try it in one click:** the input form is prefilled with `Gangnam-gu, Seoul`, sales, last 3 months, 50 results. Just press **Start** to get the 50 newest deals ($0.075).
> No subscription or setup: you pay only for transactions delivered, and a run with no results costs $0.

- **Investors and analysts**: actual contract prices (not asking prices) by district, complex and size, for valuation, comps and price-trend dashboards.
- **Proptech and data teams**: a stable English schema with complex ids and road addresses, ready for databases and maps.
- **Jeonse and rent research**: deposits, monthly rents, renewals and the renewal-right flag for every reported lease.
- **AI agents**: answer "What did 84 m² apartments sell for in Gangnam last month?" with one call.

### Sample output

```json
{
  "recordId": "fa2b00a62d7e3989-1",
  "countryCode": "KR",
  "transactionType": "sale",
  "propertyType": "apartment",
  "contractDate": "2026-09-29",
  "region": { "lawdCode": "11680", "sidoKo": "서울특별시", "sidoEn": "Seoul", "sigunguKo": "강남구", "sigunguEn": "Gangnam-gu", "dongKo": "개포동", "dongCode": "10300" },
  "complexName": "개포주공5단지",
  "complexId": "11680-391",
  "jibun": "187",
  "roadAddress": "삼성로4길 17",
  "exclusiveAreaM2": 83.17,
  "floor": 13,
  "buildYear": 1983,
  "priceKrw": 4200000000,
  "pricePerM2Krw": 50498978,
  "dealMethod": "broker",
  "buyerType": "individual",
  "sellerType": "individual",
  "cancelled": false,
  "source": "Ministry of Land, Infrastructure and Transport (MOLIT) real transaction price Open API, via data.go.kr",
  "fetchedAt": "2026-10-23T15:45:19+00:00"
}
```

A rent row has `depositKrw`, `monthlyRentKrw` (0 = jeonse), `rentKind`, `contractTerm`, `contractKind` (new / renewal), `renewalRightUsed` and the previous deposit and rent for renewals, for example a jeonse renewal in Apgujeong-dong: deposit ₩1,750,000,000, previously ₩1,600,000,000.

### Pricing

Pay per event, with no platform usage fee on top: **$0.0015 per transaction delivered** on the Free plan. Paid Apify plans pay less: **Starter $0.0012, Scale $0.001, Business and above $0.0008** per transaction.

| Example (Free plan) | Transactions | Cost |
|---|---|---|
| Every apartment sale in Seoul in one month (September 2026) | 3,391 | **$5.09** |
| One district, 12 months of sales (Gangnam-gu, Oct 2025 – Sep 2026) | 2,870 | **$4.31** |
| One complex in one month (개포주공, Gangnam-gu, September 2026) | 19 | **$0.03** |
| No matching transactions, invalid input or data unavailable | 0 | **$0** |

Set a maximum cost per run in the run options; the Actor stops at that limit. Use `maxResults` to cap a run.

### Update schedule

The data is re-synced from the official API **every day at 05:30 Korea time (20:30 UTC)**. The current and previous month are refreshed daily, the month before on Mondays. `fetchedAt` shows when each province-month was synced.

### Coverage and limits

- **Apartments** (아파트) in all 255 districts (시군구) of South Korea. Sales from **January 2021**, rents from **January 2024**.
- **Reporting delay**: deals must be reported within 30 days of the contract, so the current month keeps filling up for about a month.
- **Cancelled sales** (해제) are flagged by MOLIT after the fact (`cancelled`, `cancelledDate`) and excluded by default; set `includeCancelled` to include them.
- **No personal data**: MOLIT publishes only the type of buyer and seller (individual, corporate, public, other), no names, and only the floor, never the unit number.
- **Names**: complex names stay in Korean as registered (no machine translation). District and province names are given in Korean and English. Since July 2026, Gwangju's districts belong to **Jeonnam-Gwangju** (전남광주통합특별시); `Gwangju-si` is the separate city in Gyeonggi-do.
- MOLIT files past deals under today's district codes, so a district created recently (e.g. Hwaseong's districts) also returns its earlier deals.

> This is an **unofficial tool**. It is not affiliated with, endorsed by, or operated by the Ministry of Land, Infrastructure and Transport, the Public Data Portal or any government body.

### Output fields

Every field also has an English description in the dataset schema (Output tab and API).

| Field | Description |
|---|---|
| `recordId` | Stable id of the transaction row |
| `transactionType`, `propertyType` | `sale` or `rent`; `apartment` |
| `contractDate` | Contract date (`YYYY-MM-DD`) |
| `region` | `lawdCode` (5-digit district code), `sidoKo`/`sidoEn`, `sigunguKo`/`sigunguEn`, `dongKo` (legal dong), `dongCode` (sales only) |
| `complexName`, `complexId` | Complex name (Korean) and MOLIT complex id, stable across months |
| `jibun`, `roadAddress` | Lot number and road-name address (Korean) |
| `exclusiveAreaM2`, `floor`, `buildYear` | Exclusive area (m²), floor, year built |
| `priceKrw`, `pricePerM2Krw` | Sales: price and price per m², in won |
| `dealMethod`, `buyerType`, `sellerType` | Sales: broker / direct; individual / corporate / public / other |
| `cancelled`, `cancelledDate`, `registrationDate` | Sales: cancellation flag and dates |
| `depositKrw`, `monthlyRentKrw`, `rentKind` | Rents: deposit, monthly rent, `jeonse` or `monthly` |
| `contractTerm`, `contractStart`, `contractEnd`, `contractKind` | Rents: term and `new` / `renewal` |
| `renewalRightUsed`, `previousDepositKrw`, `previousMonthlyRentKrw` | Rents: renewal right and previous terms |
| `source`, `fetchedAt` | Data source and sync time |

Download results as JSON, CSV, Excel or HTML, or fetch them via the Apify API.

### How to search

| Input | Example | Notes |
|---|---|---|
| `regions` | `["Gangnam-gu, Seoul"]`, `["강남구"]`, `["Seoul"]`, `["11680"]` | Districts in English or Korean, whole provinces, or district codes. Add the province when a name exists in several cities (`"Jung-gu, Busan"`). |
| `dealType` | `"sale"` | `sale`, `rent` or `both` |
| `monthFrom`, `monthTo` | `"2026-01"`, `"2026-09"` | Contract months, up to 24 per run. Empty = last 3 months. |
| `complexName` | `"래미안"` | Part of the Korean complex name |
| `minAreaM2`, `maxAreaM2` | `59`, `85` | Exclusive area |
| `minPriceKrw`, `maxPriceKrw` | `1000000000` | Sale price, or deposit for rents (1억 = 100,000,000) |
| `rentKind` | `"jeonse"` | Rents only: `jeonse` or `monthly` |
| `includeCancelled` | `false` | Include cancelled sales |
| `maxResults` | `100` | Newest first; you pay only for what is delivered |

Example: jeonse deals for 84 m² class apartments in Songpa-gu this year:

```json
{
  "regions": ["Songpa-gu, Seoul"],
  "dealType": "rent",
  "rentKind": "jeonse",
  "minAreaM2": 80,
  "maxAreaM2": 86,
  "monthFrom": "2026-01",
  "maxResults": 500
}
```

### For AI agents

Example questions this Actor answers in one call:

- "What did 84 m² apartments sell for in Gangnam-gu last month?"
- "Show the latest jeonse deposits at 래미안 complexes in Seocho-gu."
- "How many apartment sales were reported in Seoul in September 2026, and at what price per m²?"
- "Which Bundang-gu leases were renewals, and how much did the deposit rise?"

Each row is self-describing (`transactionType`, `contractDate`, `region`), and `recordId` and `complexId` are stable for deduplication and grouping.

### FAQ

**Are these asking prices?**
No. These are contract prices reported to the government under Korea's real-transaction reporting system, not listing prices.

**Why are this month's numbers low?**
Deals can be reported up to 30 days after the contract, so the newest month fills up over the following weeks. The data is refreshed every day.

**Can I get officetels, row houses or land?**
This version covers apartments. Officetels may be added later.

**Is the English official?**
Province and district names follow the official romanization. Complex names are kept in Korean exactly as registered.

### Data source and attribution

- Source: **Ministry of Land, Infrastructure and Transport (국토교통부) real transaction price data**, published as Open API on the Public Data Portal (data.go.kr), license: no restrictions on use (이용허락범위 제한 없음)
- This Actor is an independent, **unofficial** tool. Always check critical decisions against the official Real Transaction Price disclosure system.

# Actor input Schema

## `regions` (type: `array`):

Districts in English or Korean ("Gangnam-gu, Seoul", "강남구", "서울 강남구", "Bundang-gu"), a whole province ("Seoul", "Gyeonggi-do"), or 5-digit MOLIT district codes ("11680"). Add the province when a district name exists in several cities (e.g. "Jung-gu, Busan").

## `dealType` (type: `string`):

Apartment sales, rents (jeonse and monthly rent), or both.

## `monthFrom` (type: `string`):

YYYY-MM. Empty = the last 3 months. Sales are available from 2021-01, rents from 2024-01.

## `monthTo` (type: `string`):

YYYY-MM, inclusive. Empty = the current month. At most 24 months per run.

## `complexName` (type: `string`):

Part of the apartment complex name as registered, e.g. "래미안" or "개포주공". Spaces are ignored.

## `minAreaM2` (type: `integer`):

e.g. 59

## `maxAreaM2` (type: `integer`):

e.g. 85

## `minPriceKrw` (type: `integer`):

Sale price for sales, deposit for rents, in won (1억 = 100000000).

## `maxPriceKrw` (type: `integer`):

Sale price for sales, deposit for rents, in won.

## `rentKind` (type: `string`):

Only for rents. Empty = both.

## `includeCancelled` (type: `boolean`):

Sales later cancelled (해제) are excluded by default.

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

Maximum transactions returned (newest first). You are charged only for what is delivered.

## Actor input object example

```json
{
  "regions": [
    "Gangnam-gu, Seoul"
  ],
  "dealType": "sale",
  "includeCancelled": false,
  "maxResults": 50
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "regions": [
        "Gangnam-gu, Seoul"
    ],
    "dealType": "sale",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("antonio_aleph/korea-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 = {
    "regions": ["Gangnam-gu, Seoul"],
    "dealType": "sale",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("antonio_aleph/korea-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 '{
  "regions": [
    "Gangnam-gu, Seoul"
  ],
  "dealType": "sale",
  "maxResults": 50
}' |
apify call antonio_aleph/korea-real-estate-transactions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,antonio_aleph/korea-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/rSfzIeErNVxNeTWxZ/builds/9q5IxlHtbpKC9wQfj/openapi.json
