What DART is, and why it is not EDGAR
Korea runs one central filing system. It is called DART, short for Data Analysis, Retrieval and Transfer System, operated by the Financial Supervisory Service. Every listed company files there. Annual reports, semi-annual reports, quarterly reports, major contracts, insider changes — all of it lands in the same place.
The convention that confuses first-time readers is the header format. A filing title looks like "Semi-Annual Report (2026.06) [Revised]". The date is the period end, not the upload date. A bracketed [Revised] tag means the company amended an earlier version. Treat the revised file as the live one.
DART is the source. XBRL is the format.
Why the XBRL layer beats HTML scraping
Every financial statement on DART has a machine-readable twin. That twin is XBRL. Numbers are not strings in a table — they are typed facts, each carrying its own period, unit and entity.
Scraping the rendered page gives you text positions. Parse XBRL and you get facts. For a pipeline, that difference decides whether you spend your weekends fixing column offsets.
The anatomy of one fact
A single XBRL fact is a small bundle. Ignore any part of it and the number becomes ambiguous.
| Part | What it answers |
|---|---|
| Concept | Which line item is this? |
| Context | Which entity, which period? |
| Unit | KRW, shares, or a pure ratio? |
| Decimals | How precise is the reported value? |
| Dimensions | Consolidated or separate? Which segment? |
Most beginners read the concept and stop. That is the mistake. The same concept appears many times in one document, once per context.
Where foreign readers trip
Labels are localized, IDs are not. The underlying concept identifier is language-neutral. The display label attached to it is Korean. Parse by identifier, never by label text.
Issuers tag the same idea differently. One company's revenue concept may not match another's. Build a mapping layer per issuer, not one global dictionary.
Consolidated versus separate statements. Both appear in the same file. The numbers look similar and mean different things. Filter on the context before you aggregate.
Revised filings double-count. A pipeline that pulls the latest N filings without deduplicating amendments will count the same quarter twice. Key on entity plus period, then keep the newest revision.
Scale is not standardized. Some facts are reported in won, some in millions of won. Check the unit and the decimals attribute every time.
Cumulative versus standalone periods. A second-quarter figure may be a three-month number or a six-month total. Read the context period start and end. Do not assume.
Tooling that already exists
You do not need to build a parser from scratch. Two options show up in current tooling.
The first is a PyPI package: pip install xbrl-dart. It handles DART XBRL documents directly.
The second is an MCP server, asia-filings-mcp-server, published on GitHub. It exposes Korea DART methods such as search_korea_companies, and its XBRL parsing covers both Korean filings and Japanese EDINET iXBRL. If you already drive an LLM through MCP, this drops straight into that loop. We covered that pattern in Ask ChatGPT About Korea: MCP and Data-First Prompts.
A pipeline that survives contact with real filings
- Resolve the entity. Search by company name and store the DART identifier. Names change; identifiers do not.
- Pull the filing index. Filter by report type and period before downloading anything.
- Parse facts, keep everything. Concept, context, unit, decimals, dimensions. Discard nothing at this stage.
- Normalize into your own schema. One row per entity, period, statement type and concept.
- Deduplicate revisions. Keep the newest filing per entity-period.
- Diff period over period. The delta is usually more informative than the level.
- Join to price data. A number without a filing date is not usable in a backtest.
Step seven is where most Korea pipelines quietly break. Analysts anchor on the wrong date constantly.
Connecting disclosure to price
Korean large caps file on a predictable rhythm. Samsung Electronics and SK hynix are the two most-watched names, and their semiconductor disclosures carry supply-chain detail that does not appear in the headline earnings. Our breakdown of that sits in HBM Supply Chain: Reading Samsung and SK hynix Data. For live pricing alongside the filing record, see Samsung Electronics and SK hynix.
For the broader question of which numbers come from which filing type, DART Filings: Where Korean Company Numbers Come From covers the mapping.
Checks before you trust a number
- Does the fact have a context with an explicit start and end date?
- Is the unit KRW, or millions of KRW?
- Is this the consolidated statement?
- Has a later revision replaced this filing?
- Does the concept match the same line item in the prior period?
Five checks. Most bad Korea data dies at one of them.
Anyone running a screening layer needs the filing date sitting next to the price, not buried in a footnote — that is the layout we use at /app, so a stale number is visible before it reaches a model.
This is a documentation guide, not investment advice.