# Korean Company Filings & Financials (DART) — English (`elpalaiso/dart-korea-filings-financials`) Actor

Official financial statements (revenue, operating profit, net income, assets, cash flow), disclosure filings, company profiles and financial ratios for any Korean listed company, straight from DART/OpenDART as English-labeled JSON. Bring your free OpenDART key; pay per record.

- **URL**: https://apify.com/elpalaiso/dart-korea-filings-financials.md
- **Developed by:** [Stepzu](https://apify.com/elpalaiso) (community)
- **Categories:**
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 financial statement lines

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Korean Company Filings & Financials (DART) — English

Korea's corporate disclosure system, DART (run by the Financial Supervisory Service), holds filings and audited financial statements for every listed company and every company subject to external audit — roughly 100,000 entities. It is free and official, but it is Korean-only: field names, account names, report titles and error codes are all in Korean, company lookups need an internal 8-digit code, and financial statements come back as strings with thousands separators.

This Actor turns that into clean JSON an analyst, a data pipeline or an AI agent can use directly: English-labeled fields, K-IFRS account names translated (with the Korean original kept alongside), amounts parsed to numbers, tickers and English company names resolved for you, and a link to the original filing on every record. No API key is needed for standard runs; pay only for the records you receive.

#### What you can pull

- **Company profiles** — legal name (KO/EN), ticker, market (KOSPI/KOSDAQ/KONEX), CEO, registration numbers, address, website, industry code, founding date, fiscal year end.
- **Filings** — the disclosure list for chosen companies or for the whole market in a date window: title (translated), filer, date, amendment flags and the DART viewer URL.
- **Financial statements** — every line of the balance sheet, income statement, comprehensive income, cash flow and equity statements from annual, half-year and quarterly reports, consolidated or separate, from fiscal 2015 onwards.
- **Key financials for many companies at once** — major accounts (assets, liabilities, equity, revenue, operating profit, net income…) for up to 100 companies per request.
- **Financial indicators** — profitability, stability, growth and activity ratios computed by DART (fiscal 2023 Q3 onwards).

### Tutorial

1. **No API key needed — just run it.** The Actor uses its built-in shared key with a fair-use cap of 300 OpenDART requests per run.
2. Choose **What to fetch** (mode) and list your **Companies** — tickers such as `005930`, DART corp codes such as `00126380`, or names in English or Korean such as `Samsung Electronics` or `현대자동차`. The Actor downloads DART's master list once, caches it for a week, and resolves names for you, logging what it matched.
3. For financial modes, set **Fiscal years** and **Report types**. For filings, set the date range and optionally the categories.
4. Run. Results land in the dataset; download them as JSON, CSV or Excel, or call the Actor from an AI agent through the Apify MCP server.

A cheap first test: mode `key_financials`, companies `005930, 000660, 005380`, years `2024`, report `11011`. That is one request and a few dozen records.

#### Optional: use your own key

For larger runs, get a free personal key at https://opendart.fss.or.kr: register, then open **인증키 신청/관리** (API key request). Paste it into **OpenDART API key**. Personal keys allow up to 20,000 requests per day; the secret input is encrypted and is only sent to opendart.fss.or.kr. A non-empty personal key always takes precedence over the built-in key.

#### Use bundled sample data

Turn on **Use bundled sample data** (`useSampleData: true`) to return bundled records for the selected mode, capped by **Max results**, without an OpenDART request or record charge. This setting overrides both personal and built-in keys. Other filters do not change the bundled sample and are listed once in the run log; sample items carry `sample: true`.

### Use from Claude, ChatGPT or any MCP agent

Add this Actor to an AI agent through the Apify MCP server — no code needed:

```
https://mcp.apify.com?tools=elpalaiso/dart-korea-filings-financials
```

In Claude Desktop: Settings → Connectors → Add custom connector → paste the URL and approve the Apify login. Then ask, for example:

- "Pull Samsung Electronics' FY2024 consolidated income statement from DART and compute the operating margin."
- "Compare total assets and net income of 005930, 000660 and 005380 for 2023 and 2024 from official filings."
- "List every material-event filing (B001) by KOSPI companies in the last two weeks with links."

No API key is needed for standard agent runs: the Actor uses its built-in shared key with a 300-request fair-use cap. For larger runs, give the agent your own OpenDART key once (`apiKey`); it is stored encrypted in the run input and only sent to opendart.fss.or.kr. Set `useSampleData: true` when the agent only needs to inspect the output shape for free.

### Pricing

You pay per record delivered, nothing per run beyond Apify's tiny actor-start fee:

- **Financial statement line** (`financial-line`) — used by `financials` and `key_financials`
- **Filing** (`filing`)
- **Company profile** (`company-profile`)
- **Financial indicator** (`indicator`)

Empty results (for example a company that has no consolidated statements) cost nothing. Set a maximum total charge on the run to cap spend; the Actor stops cleanly when it is reached and tells you how many records were saved.

### Input and output examples

Input for full 2024 consolidated statements of two companies:

```json
{
  "mode": "financials",
  "companies": ["005930", "Hyundai Motor"],
  "years": ["2024"],
  "reportCodes": ["11011"],
  "fsDiv": "CFS",
  "requestBudget": 10
}
```

Input for KOSPI annual reports and large-shareholding reports across the market:

```json
{
  "mode": "filings",
  "companies": [],
  "startDate": "2026-06-01",
  "endDate": "2026-09-01",
  "filingDetailTypes": ["A001", "D001"],
  "market": "Y"
}
```

`filingDetailTypes` accepts OpenDART's four-character detail codes and queries each supplied code separately. `market` accepts `Y` (KOSPI), `K` (KOSDAQ), `N` (KONEX), `E` (unlisted/other), or `all` (no market filter).

One output record:

```json
{
  "record_type": "financial_line",
  "company_name_en": "SAMSUNG ELECTRONICS CO,.LTD",
  "company_name_ko": "삼성전자",
  "ticker": "005930",
  "corp_code": "00126380",
  "fiscal_year": 2024,
  "report_type": "Annual report",
  "basis": "Consolidated",
  "statement": "Balance sheet",
  "account_id": "ifrs-full_Assets",
  "account_name_en": "Total assets",
  "account_name_ko": "자산총계",
  "is_key_account": true,
  "current_period": "제 56 기",
  "current_amount": 514531948000000,
  "prior_amount": 455905980000000,
  "two_years_prior_amount": 448424507000000,
  "currency": "KRW",
  "filing_url": "https://dart.fss.or.kr/dsaf001/main.do?rcpNo=20250311000123"
}
```

Filing records carry `report_title_en`, `report_title_ko`, `filed_date`, `remarks` (decoded flags such as "Includes consolidated statements" or "Amended filing exists") and `filing_url`. Indicator records carry `indicator_class`, the original Korean `indicator_name`, the dictionary-backed `indicator_name_en` (or `null` for an unknown name), and a numeric `indicator_value`.

### Recommendations

- Use tickers or corp codes when you can; names are matched against DART's master list and listed companies win ties, but subsidiaries with similar names exist.
- Quarterly and half-year income statement lines report the three-month figure in `current_amount` and the year-to-date figure in `current_cumulative_amount`, following DART's convention.
- `account_name_en` comes from a curated dictionary of common K-IFRS accounts, falling back to the XBRL tag name. Rare custom accounts keep their Korean name with an English label derived from the tag, or `null` when DART provides no standard tag — filter on `is_key_account` for the subtotals most analyses need.
- The `filings` mode without companies searches the whole market, which OpenDART limits to a three-month window per query.
- Set `requestBudget` to cap actual OpenDART HTTP requests, including the company master download and retries. With your own key, `0` means unlimited. With the built-in key, `0` applies the fair-use cap of 300 requests per run. When the budget is reached, the Actor keeps partial results and exits successfully.
- Daily quota is 20,000 requests per key; a full-statement pull is one request per company, year, report type and basis.

### FAQ

**Where does the data come from?** OpenDART is the official public API of Korea's Financial Supervisory Service. The Actor returns structured data and links to the original filings; filing content remains subject to the FSS's copyright notice.

**Why do I get "No data" for a company?** Small companies often file separate (OFS) statements only — switch **Consolidated or separate** to `OFS` or `both`. Indicators exist only from fiscal 2023 Q3.

**Can an AI agent use this?** Yes. Add the Actor to the Apify MCP server and Claude, Cursor or any MCP client can call it with plain-language instructions; the input descriptions are written for that.

**What is not covered yet?** Original filing documents (PDF/XBRL downloads), shareholder and executive tables, and dividend histories. Ask for them in the Issues tab; they are on the roadmap.

# Actor input Schema

## `apiKey` (type: `string`):

Optional. Leave empty to use the Actor's built-in shared key (fair-use cap of 300 requests per run). Add your own free OpenDART key for larger runs.

## `useSampleData` (type: `boolean`):

Return bundled records for the selected mode without an OpenDART API call or record charge, even when an API key is available.

## `mode` (type: `string`):

company\_profile: one profile record per company. filings: disclosure list (with links) for the companies and dates you choose. financials: full financial statements (every account line). key\_financials: major accounts (assets, liabilities, equity, revenue, operating profit, net income…) for up to 100 companies per call. indicators: profitability / stability / growth / activity ratios.

## `companies` (type: `array`):

Identify companies by KRX ticker (6 digits, e.g. 005930), DART corp code (8 digits, e.g. 00126380), or company name in English or Korean (e.g. Samsung Electronics, 삼성전자). Names are matched against DART's master list; ambiguous names return the best match and a warning in the log. Leave empty in 'filings' mode to search all companies within the date range (max 3 months).

## `years` (type: `array`):

Fiscal years for financial statements, key financials and indicators (2015 onwards; indicators from 2023 Q3). Example: 2023, 2024.

## `reportCodes` (type: `array`):

Which periodic reports to read. 11011 = annual report (사업보고서), 11012 = half-year, 11013 = Q1, 11014 = Q3.

## `fsDiv` (type: `string`):

CFS = consolidated (연결), OFS = separate/individual (개별). 'both' fetches both when available. Applies to 'financials' mode.

## `startDate` (type: `string`):

Start of the filing date range for 'filings' mode. Without companies, OpenDART limits the range to 3 months.

## `endDate` (type: `string`):

End of the filing date range for 'filings' mode. Defaults to today.

## `filingTypes` (type: `array`):

Restrict 'filings' mode to categories. A = periodic reports, B = material events, C = securities offerings, D = ownership/insider, E = other, F = external audit, G = funds, H = asset-backed securities, I = exchange disclosures, J = fair-trade commission.

## `filingDetailTypes` (type: `array`):

Optional 4-character OpenDART detail codes for 'filings' mode. Examples: A001 = annual report, B001 = material event report, D001 = large shareholding report. Code groups: A001–A005, B001–B003, C001–C011, D001–D005, E001–E010, F001–F005, G001–G003, H001–H006, I001–I006, and J001/J002/J004–J006/J008/J009. Each code is queried separately.

## `market` (type: `string`):

Restrict 'filings' mode by company market. OpenDART accepts one market per query; choose All markets to omit the filter.

## `lastReportOnly` (type: `boolean`):

In 'filings' mode, return only the final version when a report was amended.

## `indicatorClasses` (type: `array`):

For 'indicators' mode. M210000 profitability, M220000 stability, M230000 growth, M240000 activity.

## `includeKorean` (type: `boolean`):

Include the original Korean names (account\_nm, report\_nm…) next to the English translations.

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

Stop after this many records (0 = no limit). Useful for a cheap first test.

## `requestBudget` (type: `integer`):

Stop cleanly after this many OpenDART HTTP requests while keeping records already saved. With your own key, 0 means unlimited; with the built-in shared key, 0 applies the 300-request fair-use cap. The count includes the company master download and retry attempts.

## Actor input object example

```json
{
  "useSampleData": false,
  "mode": "financials",
  "companies": [
    "005930",
    "Hyundai Motor"
  ],
  "years": [
    "2024"
  ],
  "reportCodes": [
    "11011"
  ],
  "fsDiv": "CFS",
  "market": "all",
  "lastReportOnly": true,
  "indicatorClasses": [
    "M210000",
    "M220000",
    "M230000",
    "M240000"
  ],
  "includeKorean": true,
  "maxItems": 0,
  "requestBudget": 0
}
```

# Actor output Schema

## `records` (type: `string`):

Every record produced by the run, in the mode you selected, as a JSON array.

## `financials` (type: `string`):

Only financial\_line records, key accounts first — one row per account line with current and prior-period amounts.

## `filings` (type: `string`):

Only filing records: English report title, filer, date and the DART document link.

## `csv` (type: `string`):

The same records exported as CSV for spreadsheets.

# 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 = {
    "companies": [
        "005930",
        "Hyundai Motor"
    ],
    "years": [
        "2024"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("elpalaiso/dart-korea-filings-financials").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 = {
    "companies": [
        "005930",
        "Hyundai Motor",
    ],
    "years": ["2024"],
}

# Run the Actor and wait for it to finish
run = client.actor("elpalaiso/dart-korea-filings-financials").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 '{
  "companies": [
    "005930",
    "Hyundai Motor"
  ],
  "years": [
    "2024"
  ]
}' |
apify call elpalaiso/dart-korea-filings-financials --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,elpalaiso/dart-korea-filings-financials"
        }
    }
}

```

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/qUjByMQHYc9ji4mhU/builds/OUsGJHTvLf8bEsEaQ/openapi.json
