{"id":41991,"date":"2026-08-15T10:27:21","date_gmt":"2026-08-15T08:27:21","guid":{"rendered":"https:\/\/www.graviton.at\/letterswaplibrary\/balance-sheet-dataset-for-183-korean-listed-companies-built-from-dart-filings-38-columns-a-filing-receipt-number-behind-every-figure\/"},"modified":"2026-08-15T10:27:21","modified_gmt":"2026-08-15T08:27:21","slug":"balance-sheet-dataset-for-183-korean-listed-companies-built-from-dart-filings-38-columns-a-filing-receipt-number-behind-every-figure","status":"publish","type":"post","link":"https:\/\/www.graviton.at\/letterswaplibrary\/balance-sheet-dataset-for-183-korean-listed-companies-built-from-dart-filings-38-columns-a-filing-receipt-number-behind-every-figure\/","title":{"rendered":"Balance-sheet Dataset For 183 Korean Listed Companies Built From DART Filings (38 Columns, A Filing Receipt Number Behind Every Figure)"},"content":{"rendered":"<p><!-- SC_OFF --><\/p>\n<div class=\"md\">\n<p><strong>Disclosure: I built this dataset and publish it on my own site. Posting under rule 1.<\/strong><\/p>\n<p>It covers <strong>183 non-financial Korean listed companies<\/strong>, built entirely from DART (dart.fss.or.kr \u2014 Korea&#8217;s regulatory filing system). Every figure carries the receipt number of the filing it was read from, so any row traces back to the original document.<\/p>\n<p><strong>Coverage<\/strong><\/p>\n<ul>\n<li>183 non-financial listed companies (financials excluded \u2014 different balance-sheet structure)<\/li>\n<li>FY2021\u2013FY2025 annual figures, plus 2026 H1 where filed<\/li>\n<li>Base date 2026-08-14; share counts and closing prices from the exchange snapshot that day<\/li>\n<\/ul>\n<p><strong>38 columns<\/strong> \u2014 market capitalisation, equity (total and controlling-interest), net profit (total and controlling-interest), net cash, P\/B on both equity bases, P\/E, listed share count vs. the count printed in the annual report, treasury shares, cancellation history, dividend per share, sector, and two receipt-number columns.<\/p>\n<p><strong>Access<\/strong> \u2014 the sortable table and the per-company pages are free and ungated, and the JSON the table loads is a plain static file. The CSV sits behind an email form; disclosing that rather than pretending otherwise. Nothing is paid.<\/p>\n<p>Source: <a href=\"https:\/\/accidentalorder.com\/en\/data\/adjusted-valuation\/\">https:\/\/accidentalorder.com\/en\/data\/adjusted-valuation\/<\/a> \u2014 methodology at \/en\/data\/methodology\/<\/p>\n<hr \/>\n<p><strong>The part that may actually be useful here: an XBRL aggregation trap<\/strong><\/p>\n<p>I nearly shipped 29 wrong rows last week, and the failure mode seems general enough to be worth writing down.<\/p>\n<p>I define total borrowings as the sum of every leaf line on the balance sheet whose account name contains &#8220;borrowing&#8221; or &#8220;bond&#8221;, excluding leases. Name matching, not account-code mapping \u2014 because mapping the four component accounts (short-term borrowings, current portion of long-term debt, long-term borrowings, bonds) breaks on real filings in at least six distinct ways: single aggregate lines, missing standard codes, mezzanine instruments as separate accounts, parenthetical annotations in the account name, and genuine zeros. Name matching survives all six.<\/p>\n<p>It does not survive a company that splits the balance sheet <strong>only into financial and non-financial liabilities<\/strong>. Those companies keep their borrowings inside captions like &#8220;current financial liabilities&#8221; \u2014 no account name contains &#8220;borrowing&#8221;, none contains &#8220;bond&#8221;, and the scan returns zero.<\/p>\n<p>Korea Electric Power came out of my pipeline with <strong>zero borrowings<\/strong>. It carries about KRW 150tn of them.<\/p>\n<p>Two things I&#8217;d tell my past self:<\/p>\n<p><strong>1. A completeness check that can&#8217;t fire on a zero isn&#8217;t a completeness check.<\/strong> Mine was &#8220;total borrowings must not exceed total liabilities&#8221; \u2014 an upper bound, when the failure mode was at the lower one. Zero passes trivially. Ask what your guard does when the input is empty, not when it&#8217;s wrong.<\/p>\n<p><strong>2. Name-based extraction from XBRL fails silently, not loudly.<\/strong> The tagging is a floor, not a ceiling: a filer can satisfy every requirement while presenting liabilities at a level of aggregation that makes your derived figure uncomputable from that filing. You get a plausible number back, not an error.<\/p>\n<p>The fix I landed on wasn&#8217;t to compute the missing number but to <strong>bound<\/strong> it. Collect every financial-liability line on the balance sheet \u2014 derivative captions, &#8220;other&#8221; captions, everything, making no judgement about what any of them contains \u2014 and ask: if all of them were borrowings, how far could the published ratio move?<\/p>\n<blockquote>\n<p>If it could move net cash \/ market cap by \u22651 percentage point, don&#8217;t publish net cash. Blank cell, flag on the row. If &lt;1pp, publish.<\/p>\n<\/blockquote>\n<p>The threshold is denominated in the units of <strong>the number I publish<\/strong>, not the units of the thing I&#8217;m uncertain about. My first three attempts were all &#8220;aggregate financial liabilities as a share of total liabilities &gt; X%&#8221; for X in {5, 1, 0} \u2014 three arbitrary constants, none of which answers the question that matters, which isn&#8217;t &#8220;how big is this caption&#8221; but &#8220;how far can it move what I&#8217;m claiming&#8221;.<\/p>\n<p>Cost: net cash went from 182 published rows to 97. Positive-net-cash companies from 80 to 51. Companies I&#8217;d described as carrying no borrowings at all, from 32 to 15 \u2014 18 of that original 32 were actually sitting on material aggregate financial liabilities, which would have been the most quotable and most wrong line in the writeup.<\/p>\n<p>Benefit: across the 97 that survive, the worst-case bound is 0.951pp, median 0.004pp. So the guarantee needs no footnote \u2014 every published figure holds to within one point even if every aggregate caption turned out to be borrowings.<\/p>\n<p>86 of 183 rows now have an empty net-cash cell. That isn&#8217;t a gap I&#8217;m apologising for; it&#8217;s the disclosure regime reported accurately. The alternative to a blank cell is the same blank filled with an assumption and presented as if it were read off a filing.<\/p>\n<p>Happy to go into DART API specifics if anyone&#8217;s pulling from it \u2014 it&#8217;s under-documented and I&#8217;ve hit most of its edges by now.<\/p>\n<\/div>\n<p><!-- SC_ON -->   submitted by   <a href=\"https:\/\/www.reddit.com\/user\/Mean-Lavishness1515\"> \/u\/Mean-Lavishness1515 <\/a> <br \/> <span><a href=\"https:\/\/www.reddit.com\/r\/datasets\/comments\/1votdsd\/balancesheet_dataset_for_183_korean_listed\/\">[link]<\/a><\/span>   <span><a href=\"https:\/\/www.reddit.com\/r\/datasets\/comments\/1votdsd\/balancesheet_dataset_for_183_korean_listed\/\">[comments]<\/a><\/span><\/p><div class='watch-action'><div class='watch-position align-right'><div class='action-like'><a class='lbg-style1 like-41991 jlk' href='javascript:void(0)' data-task='like' data-post_id='41991' data-nonce='9de69db8d5' rel='nofollow'><img class='wti-pixel' src='https:\/\/www.graviton.at\/letterswaplibrary\/wp-content\/plugins\/wti-like-post\/images\/pixel.gif' title='Like' \/><span class='lc-41991 lc'>0<\/span><\/a><\/div><\/div> <div class='status-41991 status align-right'><\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>Disclosure: I built this dataset and publish it on my own site. Posting under rule 1. It&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[85],"tags":[],"class_list":["post-41991","post","type-post","status-publish","format-standard","hentry","category-datatards","wpcat-85-id"],"_links":{"self":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts\/41991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/comments?post=41991"}],"version-history":[{"count":0,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/posts\/41991\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/media?parent=41991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/categories?post=41991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.graviton.at\/letterswaplibrary\/wp-json\/wp\/v2\/tags?post=41991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}