# Changelog of Korean Company Data — Directors, Shareholders & Financials (`foxlabs/korean-company-data`) Actor

- **URL**: https://apify.com/foxlabs/korean-company-data/changelog.md
- **Full Actor documentation**: https://apify.com/foxlabs/korean-company-data.md

## Changelog

### 0.5 — 2026-09-10 — hotfix

- **Every run had been failing since 2026-09-07 (exit 91, 0 results).** Builds 0.1.24–0.1.25 shipped a corrupted bundled company index (`src/corp_codes.json.gz`, 3,117,814 bytes instead of 1,723,430 — the file had been re-encoded as UTF-8 by `apify pull`). Restored the valid index (118,342 companies).
- Fixed the live-download fallback: it passed `proxyUrl: null` to got-scraping, which throws, so a missing/corrupt bundled index aborted the run instead of downloading `corpCode.xml`. Proxy is now only set when a string is provided.
- No input/output changes.

### 0.4.1 — 2026-09-07

- **Enabled AI-agent payments (x402) + rebuilt the README to the full standard** (What-is / when, AI-agents + x402 agentic payments + MCP, Overview, Features, Use cases, Integration, FAQ, Troubleshooting, Support & contact).

### 0.4 — 2026-07-28

- **`ownership_ratio` is now a real, computed number.** DART's own ratio is rounded to two decimals, so it read `0.00` for every ordinary director (559/559 SK hynix, 3,360/3,365 Samsung filings) and 0.3 had to return `null`. The Actor now fetches the company's share register (`stockTotqySttus`) and computes `shares / total_issued_shares × 100` at 6 significant digits — fill on the pre-filled input went from **1/200 to 200/200**; Samsung's Representative President's 121,235 shares read `0.00204801`%, a 40-share holding still reads `0.00000549449`. `ratio_change` is computed the same way from `share_change`.
- New company fields `total_issued_shares`, `total_issued_shares_class`, `total_issued_shares_as_of` — denominator, share class and register date, so every percentage is auditable.
- New per-person field `ownership_ratio_source`: `computed (shares / total_issued_shares)` | `dart (as filed)` | `unavailable (…)`.
- Denominator is the **common** class (`보통주`, also `의결권 있는 주식`), excluding preferred/other classes; issuers with no common row fall back to the all-classes total and are flagged. Class labels verified against 12 issuers' registers.
- No register published (many unlisted filers, newly listed companies) → `ownership_ratio` stays `null` with the reason recorded and a logged warning; the run still succeeds. Never a fabricated `0`. A non-zero ratio DART did file is kept and labelled `dart (as filed)`.
- Cost: +1 API call per company (3–4 total, 5 if the register falls back a year), issued in parallel — the two-company reference run still measures 136–140 s, dominated by Samsung's 132–134 s insider payload.

### 0.3 — 2026-07-28

- `executives[]` is now **one row per person** instead of one per DART filing; entries are deduplicated by name + title history (promotion = one person, same-named colleagues with overlapping tenures = separate people) and carry the latest filing's figures. Top-100 distinct people: Samsung 43 → 100, SK hynix 46 → 100.
- `executives_count` counts unique people (it previously echoed the input cap); raw filing count moved to the new `executive_filings_count`.
- Added per-person `filings_count` and `first_report_date`.
- `"-"` mask normalised to `null` — `major_shareholder` was the literal string `"-"` on 200/200 sampled rows.
- `ownership_ratio` / `ratio_change`: DART's 2-decimal rounding made sub-0.005% stakes read as a hard `0`. A rounded zero against a non-zero holding is now `null`, a genuinely empty holding stays `0`, and |ratio| > 100 is dropped. Mapping verified correct against raw DART responses — the loss is source-side resolution, so use `shares`.
- Romanization: `casing_option` → `casingOption` (the misspelling was silently ignored, forcing lower case) and personal names are split into family + given name — `곽노정` `gwangnojeong` → `Gwak Nojeong`; multi-CEO fields romanize per person.
- Position mapping: added `담당`, `연구위원`, `대표사장`, `대표부회장`; match after whitespace normalisation. `position_en` null on SK hynix: 75/100 → 0/100.
- Request timeout 90 s → 240 s: Samsung's ~1.1 MB insider payload measures 132–134 s and was previously dropped on every attempt, returning zero executives.

### 0.2 — 2026-07-05

- Reworked docs: API quick-start, full field reference (company + executives + financials), integration snippets (JS/Python/Make/MCP), use cases, FAQ & troubleshooting.
- **Input schema corrected to match the Actor's real inputs**: fixed the corp-code and API-key field keys, switched the industry filter to KSIC codes the Actor actually matches, added the executive-limit and output-language controls, and removed toggles that had no effect.

### 0.1 — 2026-06-22

- Initial release on Apify Store.
- OpenDART triple-endpoint: company overview + executives/shareholders + financial statements.
- 118K company index (bundled, instant resolution).
- 3-year IFRS financials: CFS + OFS, BS + IS.
- Executive names & addresses Romanized (Revised Romanization).
- Position-title English mapping; KSIC industry code → English description.
- `outputLanguage: "en"` mode — English/Romanized primary output.
- Money formatting: raw (number), compact (₩T/B/M), exact (full precision).
- Built-in default API key — zero setup for users.
