# Korea Real Estate Transactions (Official MOLIT Data) (`elabstudio/korea-real-estate-transactions`) Actor

Official South Korea property transaction prices from the Ministry of Land (MOLIT): apartments, officetels, villas, houses, land, commercial, presale rights, sales and jeonse/monthly rents. English fields, region names instead of codes.

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

## Pricing

from $2.00 / 1,000 transactions

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

## Korea Real Estate Transactions (Official MOLIT Data)

Get **official South Korean property transaction prices** as clean, English JSON / CSV / Excel. Every row is a real reported contract from the Ministry of Land, Infrastructure and Transport (MOLIT) real transaction price disclosure system, not a listing or an asking price.

Type a district name in English or Korean (`Gangnam-gu, Seoul`, `서울 강남구`, `Seoul`), pick the property types and months, and get the deals.

### What you can use it for

- **Price research and valuation**: real sale prices and price per m² / per pyeong for any apartment complex, by month.
- **Rental market analysis**: jeonse (lump-sum deposit) and monthly rent contracts, including renewals and previous rent.
- **Investment and proptech models**: feed a clean, consistent time series into dashboards, BI tools or AI agents.
- **Market reports**: count transactions by district and month, compare neighborhoods, track new-build premiums.

### Data covered

| Dataset (`propertyTypes`) | What it contains |
|---|---|
| `apt_trade` | Apartment sales |
| `apt_rent` | Apartment jeonse and monthly rent contracts |
| `officetel_trade` / `officetel_rent` | Officetel sales and rents |
| `rowhouse_trade` / `rowhouse_rent` | Villas, row houses and multiplex (연립/다세대) |
| `house_trade` / `house_rent` | Detached and multi-household houses (단독/다가구) |
| `presale_right` | Apartment presale and move-in right resales (분양권/입주권) |
| `commercial_trade` | Commercial and office building sales |
| `land_trade` | Land sales |

All 269 districts (si/gun/gu) of South Korea, contract months from 2006 to the current month.

### Input

| Field | Example | Notes |
|---|---|---|
| `regions` | `["Gangnam-gu, Seoul", "Mapo-gu", "Suwon-si"]` | English or Korean district names, province names (expands to all districts), cities with sub-districts (expands automatically), or 5-digit codes like `11680`. Ambiguous names such as `Jung-gu` (exists in 5 cities) are skipped with a warning; add the province. |
| `propertyTypes` | `["apt_trade", "apt_rent"]` | Default `apt_trade`. |
| `startMonth` / `endMonth` | `2026-01` / `2026-09` | Contract months. Empty = last 3 months. |
| `maxItems` | `1000` | Stop after N transactions. `0` = no limit. |
| `nameContains` | `래미안` or `raemian` | Optional complex / building name filter. |
| `minAreaM2` / `maxAreaM2` | `59` / `85` | Optional area filter. |
| `includeCancelled` | `false` | Cancelled contracts are excluded by default. |
| `includeRaw` | `false` | Adds the original Korean API record. |

### Output example

```json
{
  "property_type": "apartment",
  "deal_type": "sale",
  "contract_date": "2026-09-01",
  "province": "Seoul",
  "district": "Gangnam-gu",
  "neighborhood": "Gaepo-dong",
  "neighborhood_ko": "개포동",
  "building_name": "Gaepojugong6danji",
  "building_name_ko": "개포주공6단지",
  "floor": 4,
  "build_year": 1983,
  "exclusive_area_m2": 60.13,
  "exclusive_area_pyeong": 18.19,
  "price_krw": 3100000000,
  "price_per_m2_krw": 51554964,
  "price_per_pyeong_krw": 170429627,
  "buyer_type": "individual",
  "seller_type": "individual",
  "deal_method": "brokered",
  "registration_date": "2026-09-22",
  "cancelled": false,
  "region_code": "11680",
  "source": "Ministry of Land, Infrastructure and Transport (MOLIT) real transaction price disclosure, via data.go.kr"
}
```

Rent rows have `lease_kind` (`jeonse` or `monthly_rent`), `deposit_krw`, `monthly_rent_krw`, `contract_type` (`new` / `renewal`), `contract_term`, and previous deposit / rent for renewals.

Prices are converted from the official unit (10,000 KRW) into plain KRW. Korean names are kept next to a romanized version (Revised Romanization), so you can join on either.

### Pricing

Pay per result: **$2 per 1,000 transactions**. You only pay for rows saved to the dataset after filters, not for API calls.

### Good to know

- **Reporting lag**: Korean law requires reporting within 30 days of the contract, so the latest 1 to 2 months keep filling in. Re-run recent months for complete counts.
- **Privacy masking by the source**: apartment floors are given but not unit numbers; some lot numbers for houses and land are partially masked (`1***`). This is how the government publishes the data.
- **2026 administrative changes**: the source re-keys history under current district codes (for example the Jeonnam-Gwangju merger and new Hwaseong-si districts), and this Actor follows it. Inputs like `Gwangju` or `광주광역시` still work.
- **Building names** are reported by the source in Korean; `building_name` is a mechanical romanization, not an official English brand name.

### Source and license

Data: Ministry of Land, Infrastructure and Transport, Republic of Korea, published on the Public Data Portal (data.go.kr) under a license with **no usage restrictions** (commercial use allowed). This Actor is an independent tool by E:LAB STUDIO and is not affiliated with or endorsed by MOLIT.

Questions or a missing field? Open an issue on the Actor page.

# Actor input Schema

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

Districts or provinces. English or Korean names, or 5-digit district codes. Examples: "Gangnam-gu, Seoul", "Mapo-gu", "서울 강남구", "Seoul" (all 25 districts), "Suwon-si" (all its districts), "11680".

## `propertyTypes` (type: `array`):

Which official datasets to query.

## `startMonth` (type: `string`):

Contract month to start from, YYYY-MM. Data is available from 2006. Leave empty for the last 3 months.

## `endMonth` (type: `string`):

Last contract month, YYYY-MM. Leave empty for the current month.

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

Stop after this many transactions. 0 means no limit.

## `nameContains` (type: `string`):

Optional filter, Korean or romanized, e.g. "래미안" or "raemian".

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

Optional. Exclusive area for units, floor area for houses, deal area for land.

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

Optional.

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

Cancelled contracts are excluded by default.

## `includeRaw` (type: `boolean`):

Adds the original API fields under "raw".

## Actor input object example

```json
{
  "regions": [
    "Gangnam-gu, Seoul"
  ],
  "propertyTypes": [
    "apt_trade"
  ],
  "startMonth": "2026-07",
  "maxItems": 1000,
  "includeCancelled": false,
  "includeRaw": false
}
```

# Actor output Schema

## `transactions` (type: `string`):

One item per reported sale or rental contract, normalized to English fields and plain KRW amounts.

## `summary` (type: `string`):

Resolved regions, months, dataset types and item counts per region and month.

# 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"
    ],
    "startMonth": "2026-07"
};

// Run the Actor and wait for it to finish
const run = await client.actor("elabstudio/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"],
    "startMonth": "2026-07",
}

# Run the Actor and wait for it to finish
run = client.actor("elabstudio/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"
  ],
  "startMonth": "2026-07"
}' |
apify call elabstudio/korea-real-estate-transactions --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,elabstudio/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/enVKC9ZjYZIyhecyA/builds/3Ylmh3lhGf8S8wge4/openapi.json
