South Korea Rail Scraper - Seoul Metro, AREX, Korail Commuter avatar

South Korea Rail Scraper - Seoul Metro, AREX, Korail Commuter

Pricing

Pay per event

Go to Apify Store
South Korea Rail Scraper - Seoul Metro, AREX, Korail Commuter

South Korea Rail Scraper - Seoul Metro, AREX, Korail Commuter

Realtime Seoul Metro Lines 1-9, AREX airport express, and Korail commuter rail (Gyeongui-Jungang, Suin-Bundang, Gyeongchun, Seohae) plus Shinbundang and Ui-Sinseol. Two modes: live train position or station arrival board. Bilingual Korean/English names, KR Pass eligibility flag.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

South Korea Rail Transit Scraper

Scrape realtime South Korean rail and transit data from the Seoul Open Data Plaza public feed. Covers Seoul Metro Lines 1-9, AREX airport express, Korail commuter lines (Gyeongui-Jungang, Suin-Bundang, Gyeongchun, Seohae), Shinbundang, and Ui-Sinseol — the rail network that moves roughly 8 million passengers a day.


South Korea Rail Transit Scraper Features

  • Returns realtime train positions across 16 lines. One record per running train, with current station and terminus.
  • Pulls live arrival boards for any station you can name. Korean (강남) or romaji (Gangnam) both resolve.
  • Two operating modes — realtimePosition (where every train is right now) and realtimeArrival (the departure board).
  • Bilingual output. Every station has both a Korean (current_station_ko) and romanised (current_station_en) field.
  • Flags Korea Rail Pass eligibility per line. KR Pass-curious tourists asked for this.
  • Distinguishes AREX Express vs All-Stop services automatically.
  • Surfaces direction (inbound/outbound, plus Line 2's outer/inner loop quirk), train status, last-train flag, and arrival countdown in seconds.
  • Pure JSON API — no browser, no proxies, no API key. The actor pays nothing in proxy budget.

Who Uses South Korea Rail Data?

  • Travel app developers — Build live transit views for K-tourism apps, KR Pass calculators, and Seoul itinerary tools.
  • Travel aggregators — Feed Klook, KKday, and Trip.com-style routing engines with live arrival data.
  • Tourism analysts — Track passenger flow patterns at major hubs (Seoul Station, Gangnam, Hongdae, Incheon Airport).
  • Logistics teams — Monitor airport express service health (AREX) for ground-transport coordination.
  • Researchers — Study urban transit dynamics across one of the densest metro networks in the world.

How South Korea Rail Transit Scraper Works

  1. Pick a mode — realtimePosition for line-wide train positions, or realtimeArrival for a station departure board.
  2. For position mode, choose an operator filter (any, seoul_metro, arex, korail_commuter, line_1 through line_9). For arrival mode, type the station name in Korean or romaji.
  3. The actor calls the Seoul Open Data sample endpoint for each selected line or station, transforms each row, and writes structured records to the dataset.
  4. The feed updates every few seconds. Two consecutive runs may share rows — the actor dedupes within a run by record_id.

Input

{
"mode": "realtimePosition",
"operator": "any",
"maxItems": 15
}

Realtime arrival board for one station, romaji input:

{
"mode": "realtimeArrival",
"station": "Gangnam",
"operator": "any",
"maxItems": 5
}

Realtime arrival board for multiple stations, Korean input:

{
"mode": "realtimeArrival",
"station": "서울, 강남, 잠실",
"maxItems": 15
}
FieldTypeDefaultDescription
modestringrealtimePositionrealtimePosition (one record per running train) or realtimeArrival (one record per upcoming train at a station).
operatorstringanyFilter by operator/line. Options: any, seoul_metro, arex, korail_commuter, private_rail, shinbundang, ui_sinseol, or line_1 through line_9.
stationstring강남Station name in Korean or romaji. Comma-separated for multiple. Used only by realtimeArrival.
maxItemsinteger15Cap on total records saved across the run. The Seoul feed returns 5 records per call; the actor paginates across selected lines/stations until the cap is hit.
proxyConfigurationobject{useApifyProxy: false}Proxy not required. Seoul Open Data is publicly accessible from anywhere.

South Korea Rail Transit Scraper Output Fields

Position mode (realtimePosition)

{
"record_id": "pos-1001-0492-2026-04-30 21:07:10",
"mode": "realtimePosition",
"operator": "Seoul Metro / Korail",
"line_ko": "1호선",
"line_en": "Line 1",
"line_id": "1001",
"service_type": "metro",
"train_no": "0492",
"train_status": "arrived",
"direction": "inbound",
"current_station_ko": "종로3가",
"current_station_en": "Jongno 3-ga",
"current_station_id": "1001000130",
"target_station_ko": "청량리",
"target_station_en": "Cheongnyangni",
"is_express": false,
"is_last_train": false,
"korea_rail_pass_eligible": true,
"observed_at": "2026-04-30 21:07:10",
"source_url": "http://swopenAPI.seoul.go.kr/api/subway/sample/json/realtimePosition/0/5/1호선",
"scraped_at": "2026-04-30T12:07:58.615Z"
}

Arrival mode (realtimeArrival)

{
"record_id": "arr-1077-16-1077000687-2026-04-30 21:08:13",
"mode": "realtimeArrival",
"operator": "Shinbundang Railroad",
"line_ko": "신분당선",
"line_en": "Shinbundang Line",
"line_id": "1077",
"service_type": "metro",
"train_no": "16",
"train_status": "approaching",
"direction": "inbound",
"current_station_ko": "강남",
"current_station_en": "Gangnam",
"target_station_ko": "신사",
"target_station_en": "Sinsa",
"train_line_label": "신사행 - 신논현방면",
"arrival_message": "강남 진입",
"arrival_seconds": 0,
"is_express": false,
"is_last_train": false,
"korea_rail_pass_eligible": false,
"observed_at": "2026-04-30 21:08:13",
"source_url": "http://swopenAPI.seoul.go.kr/api/subway/sample/json/realtimeStationArrival/0/5/강남",
"scraped_at": "2026-04-30T12:08:17.802Z"
}
FieldTypeDescription
record_idstringStable identifier built from mode, line ID, train number, station ID, and observation timestamp. Used for in-run deduplication.
modestringrealtimePosition or realtimeArrival.
operatorstringOperator brand: Seoul Metro, Korail, AREX, Shinbundang Railroad, Ui Sinseol Light Rail, Gimpo Goldline, or shared "Seoul Metro / Korail" for Lines 1, 3, and 4.
line_kostringLine name in Korean (1호선, 공항철도, 수인분당선).
line_enstringLine name in English (Line 1, AREX (Airport Railroad), Suin-Bundang Line).
line_idstringSeoul Open Data subway code (1001-1009 for Lines 1-9, 1063 Gyeongui-Jungang, 1065 AREX, 1075 Suin-Bundang, 1077 Shinbundang, 1093 Seohae).
service_typestringmetro, commuter, or airport_express.
train_nostringTrain number assigned by the operator. Stable for the day.
train_statusstringPosition mode: approaching, arrived, departed, previous_station_departed. Arrival mode adds in_transit, previous_station, transit_station_arrived.
directionstringinbound, outbound. Line 2 (loop) uses outer_loop and inner_loop because that's how Seoul names them.
current_station_kostringCurrent station in Korean. Position mode: where the train is. Arrival mode: the station you queried.
current_station_enstringCurrent station romanised.
current_station_idstringStation ID (10-digit, line-prefixed).
target_station_kostringTrain terminus in Korean.
target_station_enstringTrain terminus romanised.
train_line_labelstringArrival mode only. Operator's free-text route label, e.g. "신사행 - 신논현방면" or "Express to Incheon Airport T2".
arrival_messagestringArrival mode only. Operator's free-text status, e.g. "강남 진입" or "[2]번째 전역".
arrival_secondsintegerArrival mode only. Estimated seconds until the train reaches the queried station. 0 if it's already there.
is_expressbooleanTrue for Express (급행/직통) services. AREX uses this to mark the non-stop Express; Line 9 uses it for timetabled express trains.
is_last_trainbooleanTrue for the last service of the day on the line.
korea_rail_pass_eligiblebooleanTrue for Korail-operated services (Lines 1/3/4 outer sections, Gyeongui-Jungang, Suin-Bundang, Gyeongchun, Seohae, AREX). False for Seoul Metro Lines 2/5/6/7/8/9, Shinbundang, Ui-Sinseol, Gimpo Goldline.
observed_atstringKST timestamp when the upstream feed recorded this position/arrival, format YYYY-MM-DD HH:MM:SS.
source_urlstringSeoul Open Data API URL that produced the row.
scraped_atstringISO-8601 UTC timestamp when the row was written to the dataset.

FAQ

How do I scrape Seoul Metro realtime data?

The South Korea Rail Transit Scraper queries the Seoul Open Data Plaza public feed for live train positions and station arrival boards. Pick realtimePosition mode for line-wide views or realtimeArrival for a station's departure board, set an operator filter, and run.

What lines does the South Korea Rail Transit Scraper cover?

The scraper covers Seoul Metro Lines 1-9, AREX (Airport Railroad), Korail commuter rail (Gyeongui-Jungang, Suin-Bundang, Gyeongchun, Seohae), Shinbundang, and Ui-Sinseol LRT. Sixteen lines total — the entire Seoul Metropolitan Subway and connected rail network.

Does the South Korea Rail Transit Scraper need proxies or an API key?

No. Seoul Open Data is publicly accessible from anywhere on the internet, no auth and no key. The actor consumes zero proxy budget.

Can I get KORAIL intercity (KTX) or SRT data?

Not in v1. KORAIL's reservation site (korail.com) returns an anti-automation challenge ("macro_err1") to direct HTTP requests. SRT's selectScheduleList.do endpoint returns an empty form shell instead of schedule rows. Both targets need a browser-automation bypass with a Korean residential proxy. Tracking as a v2 feature — file a request if you need it.

How fresh is the data?

The Seoul feed updates every few seconds. Two consecutive runs of the actor will return mostly the same trains; the actor dedupes within a run by record_id. For continuous monitoring, run the actor on a schedule and keep the last few minutes of records.

What's the Korea Rail Pass eligibility flag for?

The KR Pass is the Korean equivalent of the JR Pass — a tourist rail pass that covers Korail-operated services. The korea_rail_pass_eligible flag is set per line: true for Korail commuter lines and Lines 1/3/4 (which Korail co-operates with Seoul Metro), false for the rest. It does not cover SRT high-speed rail.


Need More Features?

Want KORAIL intercity (KTX/ITX/Mugunghwa), SRT, or one of the regional metros (Busan, Daegu, Incheon, Gwangju, Daejeon)? File an issue with what you need.

Why Use the South Korea Rail Transit Scraper?

  • Zero infrastructure cost — Pure JSON API, no proxy budget, no browser dependency. The cheapest possible Korean rail feed to run.
  • Bilingual output — Every station name comes in both Korean and romanised form. Saves you from rolling your own Revised Romanization engine.
  • KR Pass aware — Per-line eligibility flag. Few other rail feeds bother to surface this.
  • Sixteen lines, one actor — Seoul Metro 1-9, AREX, four Korail commuter lines, plus Shinbundang and Ui-Sinseol. One input, one output schema, no per-operator special-casing.