Financial Supervisory Service (Korea)
OpenDART — Korean company filings and financial statements — the EDGAR of Korea, with a free key
When you need Korean fundamentals as filed — the income statement and balance sheet from the periodic report — or the disclosure list itself (capital increases, large shareholder changes, treasury stock). It is the only free source for these.
Reach for it when…
When you need Korean fundamentals as filed — the income statement and balance sheet from the periodic report — or the disclosure list itself (capital increases, large shareholder changes, treasury stock). It is the only free source for these.
Not for: Prices (KRX or a market-data API), monetary data (BOK ECOS), companies outside Korea (EDGAR, EDINET).
Units, revisions, traps
Units. Korean won, usually in full (not thousands); check 'currency' and 'unit' in the response. Fiscal years mostly end in December.
Revisions. Corrections are filed as new disclosures; the original stays in the list.
- Company codes (corp_code, 8 digits) are not the stock ticker — download the corp-code zip once and map.
- Financial statement endpoints take a report code (11011 = annual, 11012 = half-year, 11013 = Q1, 11014 = Q3).
- Labels are Korean; the account ids (account_id) follow K-IFRS tags.
Classic mistake: Using the 6-digit stock code where the API wants the 8-digit corp code.
Three recipes
- Recipe 1 · A company's annual income statement
- Recipe 2 · This month's disclosures for one company
- Recipe 3 · The corp-code map, once
Each recipe: Python · Excel · Sheets, with how to read the result. Python recipes run under pandas; recipe 1 is re-run by the weekly check where the source allows it.
How to use it in your own work
Copy the snippet, change the series id, read the result the way the footer says. Replace YOUR_…_KEY with your own key where one is needed.
Recipe 1A company's annual income statement
# Samsung Electronics (corp_code 00126380), FY2025 annual report, consolidated
import requests, pandas as pd
KEY = "YOUR_DART_KEY"
u = ("https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json?crtfc_key=" + KEY +
"&corp_code=00126380&bsns_year=2025&reprt_code=11011&fs_div=CFS")
df = pd.DataFrame(requests.get(u, timeout=60).json()["list"])
print(df[df.sj_div == "IS"][["account_nm", "thstrm_amount"]].head(12))- Not practical without code; DART's website (dart.fss.or.kr) shows the same statements per filing.
- Use the Python recipe.
Recipe 2This month's disclosures for one company
import requests, pandas as pd
KEY = "YOUR_DART_KEY"
u = ("https://opendart.fss.or.kr/api/list.json?crtfc_key=" + KEY +
"&corp_code=00126380&bgn_de=20260801&end_de=20260908&page_count=100")
df = pd.DataFrame(requests.get(u, timeout=60).json()["list"])
print(df[["rcept_dt", "report_nm", "flr_nm"]])- Use the Python recipe.
- Use the Python recipe.
Recipe 3The corp-code map, once
# download the corp-code zip and build a ticker → corp_code table
import requests, zipfile, io, xml.etree.ElementTree as ET, pandas as pd
KEY = "YOUR_DART_KEY"
z = zipfile.ZipFile(io.BytesIO(requests.get("https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=" + KEY, timeout=120).content))
root = ET.fromstring(z.read(z.namelist()[0]))
df = pd.DataFrame([{c.tag: c.text for c in el} for el in root.findall("list")])
print(df[df.stock_code.str.strip() != ""].head())- Use the Python recipe once and keep the CSV.
- Use the Python recipe once and keep the CSV.
Series → question map
The ids we use from OpenDART, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.
| Series | Answers | Region | Concept |
|---|---|---|---|
| fnlttSinglAcntAll | What did the company report? (full statements) | Korea | fundamentals |
| list | What has the company disclosed? | Korea | filings |
| majorstock | Who are the large shareholders? | Korea | insider |
Compare with
Same question, different source: SEC EDGAR APIs, BOK ECOS, EODHD. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.
Questions readers ask
Do I need to read Korean?
For registration and labels, a little; the API fields and account ids are consistent, and the card maps the report codes.
Is there English?
No English version of the API; DART's website has an English filing viewer for some companies.
How current is it?
Disclosures appear within minutes of filing; financial statement endpoints update the same day.
Educational only — we explain, we never advise · snippet licence: public domain · corrections to [email protected], fixed within a day and logged in the changelog.