Korea 아파트 실거래가 API (Korea Apartment Transactions) avatar

Korea 아파트 실거래가 API (Korea Apartment Transactions)

Pricing

from $0.50 / 1,000 transaction records

Go to Apify Store
Korea 아파트 실거래가 API (Korea Apartment Transactions)

Korea 아파트 실거래가 API (Korea Apartment Transactions)

Every apartment sale in Korea from the government register, in real KRW. The raw API quotes 만원, so 145,000 means 1,450,000,000 won. Fixed here, plus price per m² and per pyeong, English district names, and cancelled contracts flagged so they don't inflate your averages.

Pricing

from $0.50 / 1,000 transaction records

Rating

0.0

(0)

Developer

HEESEOK HONG

HEESEOK HONG

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

7 days ago

Last modified

Share

Korea Apartment Sale Transactions Scraper

Every apartment sale in Korea, from the government register — with prices in real won and districts in English.

Korea publishes every apartment sale contract. Price, date, exact building, floor, exclusive area, whether it went through an agent, whether the buyer was a company. It is one of the most complete residential price datasets any country makes public.

It is also, in raw form, a trap.

<dealAmount>145,000</dealAmount>

That is not ₩145,000. The unit is 만원 — ten thousand won — so the real figure is ₩1,450,000,000. About 1.45 billion won. Anyone reading the raw field is wrong by a factor of ten thousand, and nothing in the response says so.

This actor fixes that and everything else in the way.


What you get

{
"dealDate": "2026-06-20",
"sidoEn": "Seoul",
"sggEn": "Gangnam-gu",
"sggKr": "강남구",
"umdKr": "수서동",
"aptName": "까치마을",
"floor": 6,
"buildYear": 1993,
"areaSqm": 34.44,
"areaPyeong": 10.42,
"areaSqft": 370.7,
"priceKrw": 1450000000,
"priceManwon": 145000,
"priceKrwPerSqm": 42102207,
"priceKrwPerPyeong": 139180843,
"currency": "KRW",
"buyerType": "INDIVIDUAL",
"sellerType": "INDIVIDUAL",
"dealChannel": "THROUGH_AGENT",
"isCancelled": false,
"isLandLease": false
}

Against the raw API, this actor:

  • Converts 만원 to real KRW — and keeps priceManwon and the original string so you can audit it
  • Adds price per m² and per pyeong, computed before rounding so the figures don't drift
  • Gives area three ways — m² as filed, 평 because that is how Koreans quote it, ft² because you may not
  • Assembles one date from the three separate year / month / day fields
  • Translates the Korean enum values — 개인 → INDIVIDUAL, 법인 → CORPORATION, 중개거래 → THROUGH_AGENT, 직거래 → DIRECT
  • Resolves districts by name — you pass Gangnam-gu, not 11680
  • Flags cancelled contracts. Korea records contracts and then records their withdrawal. Leaving those in inflates apparent market prices, so they are excluded unless you ask for them
  • Flags land-lease apartments (토지임대부), which trade far below freehold units and will skew any average that mixes them in
  • Returns null for genuinely blank fields. The raw API sends a single space character, which silently survives most parsers as a truthy value

Who uses this

  • Property analytics and proptech — a normalised national price feed without building the plumbing
  • Funds and research desks — Korean housing as a macro signal, in a form you can regress on
  • Relocation and expat services — real prices for a specific building, in English
  • Appraisal and lending — comparable sales for a district and unit size
  • Journalists and researchers — official figures with the traps removed
  • AI agents — available through Apify's MCP server as a tool call

How to use it

Press Run. The defaults pull last month's sales in Gangnam-gu.

InputWhat it does
regionsGangnam-gu, 강남구, 서울 강남구, or 11680. Mix freely.
monthFrom / monthTo2026-01 to 2026-06. Leave empty for the last completed month.
monthsExact months, e.g. 2025-06 and 2026-06 for a year-on-year read.
minPriceKrw / maxPriceKrwIn actual won. One billion is 1000000000.
minAreaSqm / maxAreaSqm84 m² is the standard Korean family unit.
includeCancelledOff by default, for the reason above.
maxResultsHard cap on billed rows.

Districts

334 queryable districts, covering the whole country. All 25 Seoul districts and the major Gyeonggi and metropolitan districts have English names; the rest resolve by Korean name or code.

Cities divided into 구 must be queried at 구 level — the register has no city-wide figure. Ask for Seongnam Bundang-gu, not 성남시. If a name is ambiguous (중구 exists in eight provinces) the actor returns the candidate codes rather than guessing.

The lookup table is generated from the Ministry of the Interior's 법정동코드 register and pruned of everything that cannot be queried: abolished districts, renamed ones like 인천 남구 → 미추홀구, 출장소 entries, and parent cities superseded by their 구.

Coverage and timing

Transactions are filed after the contract is signed, so the current month is always thin and fills in over the following weeks. For a settled picture, read months that are at least 30 days old.

Volume varies enormously by district — a busy Seoul district produces 200–400 sales a month, a rural county may produce none. An empty result for a small district usually means there were no sales, not that something broke.

API keys

Works out of the box on a shared key. For scheduled or high-volume runs, get your own — free, approved automatically, about two minutes at data.go.kr. Use the Decoding key; the Encoding one is pre-escaped and will fail. Each key allows 10,000 requests per day.


Output

Results go to the default dataset — export as JSON, CSV, Excel or XML, or pull them through the Apify API. A RUN_SUMMARY record records rows returned, API calls used, how many rows the filters removed, and any districts that could not be resolved, so a scheduled run tells you exactly what happened.

Legality

This actor reads the Ministry of Land, Infrastructure and Transport's official open API, published through data.go.kr for exactly this purpose. No page scraping, no authentication bypass, no personal data — the register identifies buildings and lots, never people.


Built by a fintech CTO. Found a bug, or want 전월세 (rent) or non-apartment property types added? Open an issue on the Issues tab — I read them.