1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

EDINET DB APIの精度を検証してみた — 公式IRと突き合わせたら差が出た

1
Posted at

EDINETの有報データを返してくれるAPIが増えてきた。ありがたい。XBRLを自分でパースする地獄から解放される。

ただ、ふと思った。返ってくる数値、合ってるのか?

有報は監査済み。公式の数字。APIが返す数値が公式とずれていたら、その上に作った分析は全部ゴミになる。

気になったので、2つのAPI(EDINET DBAxiora)の返り値を、トヨタ・ソニー・ファーストリテイリングの公式IR資料と突き合わせた。

やったこと

  1. 両APIから同じ企業・同じ年度のデータを取得
  2. 公式IR(決算短信・プレスリリース・SEC Filing)の数値と比較
  3. ずれがあったら原因を調べる

突き合わせに使った公式ソース:

結論から

売上高・純利益は両方とも正確。最重要指標が合ってるのは安心。

差が出たのはメタデータとデータの整合性。順に見ていく。

トヨタの会計基準がおかしい

トヨタはFY2021からIFRS。20-Fにも書いてある。常識。

EDINET DBに聞いてみる:

curl -s -H "X-API-Key: $KEY" \
  "https://edinetdb.jp/v1/companies/E02144/financials" | \
  jq '.data[-1] | {fiscal_year, accounting_standard}'
{"fiscal_year": 2025, "accounting_standard": "USGAAP"}

USGAAP。2025年度で。

Axioraだと:

from axiora import Axiora
client = Axiora()
f = client.companies.retrieve_financials("7203", years=1).data[0]
print(f.accounting_standard)  # "IFRS"

IFRS。正しい。

トヨタだけかと思って調べたら、NTT(JP-GAAPのはず)もUSGAAPと返ってくる。会計基準の判定ロジックが壊れている。

なぜ困るか: IFRSとUS-GAAPとJP-GAAPでは、同じ「営業利益」でも定義が違う。IFRSには制度上の「営業利益」の定義がない。会計基準のラベルが間違っていると、比較分析の前提が崩れる。

ソニーのデータが二重に返ってくる

ソニー(E01777)の財務データを取ると、年度の配列がこうなる:

curl -s -H "X-API-Key: $KEY" \
  "https://edinetdb.jp/v1/companies/E01777/financials" | \
  jq '.meta.fiscal_years'
[2012, 2013, 2014, 2015, 2015, 2016, 2016, 2017, 2017,
 2018, 2018, 2019, 2019, 2020, 2020, 2021, 2022, 2023, 2024, 2025]

FY2015〜FY2020が2回ずつ。14年度分に対して20行。

FY2020の重複を見ると:

// 1つ目(フィールド2個だけ)
{"accounting_standard": "USGAAP", "capex": 513061000000, "fiscal_year": 2020}

// 2つ目(正常、40フィールド)
{"fiscal_year": 2020, "revenue": 8259885000000, "net_income": 582191000000, ...}

1つ目は売上も純利益もない。子会社の提出書類(ソニーフィナンシャルHD等)が混入してる可能性が高い。

なぜ困るか:

import pandas as pd

df = pd.DataFrame(response["data"])
df.groupby("fiscal_year")["revenue"].sum()  # 二重計上
df.plot(x="fiscal_year", y="revenue")       # 折れ線が飛ぶ

利用者側で重複除去を書かないとpandasに入れた瞬間に壊れる。

Axioraでソニーを取ると:

sony = client.companies.retrieve_financials("6758", years=15)
years = [f.fiscal_year for f in sony.data]
print(len(years), len(set(years)))  # 11 11 — 重複なし

1年度1行。

純利益と売上高は両方正確

一番大事な数値。公式IRと突き合わせた:

企業 年度 公式(親会社帰属) EDINET DB Axiora
トヨタ 2025 ¥4,765,086M ¥4,765,086M ¥4,765,086M
トヨタ 2024 ¥4,944,933M ¥4,944,933M ¥4,944,933M
ソニー FY2025 ¥1,141,600M ¥1,141,600M ¥1,141,600M
ソニー FY2024 ¥970,573M ¥970,573M ¥970,573M
ファストリ 2025 ¥433,009M ¥433,009M ¥433,009M
ファストリ 2024 ¥371,999M ¥371,999M ¥371,999M

売上高も全社全年度で一致。ここは安心。

トヨタの売上原価が時空を超えている

EDINET DBのトヨタFY2019:

revenue:       30,225,681,000,000
cost_of_sales:  9,561,872,000,000
粗利率 = (30.2T - 9.6T) / 30.2T = 68.4%

トヨタの粗利率68%。自動車メーカーで。

実際のトヨタの粗利率は約20%。COGS比率は80%前後。68%の粗利はAppleでも出ない。

FY2021以降(IFRS移行後)は正常値に戻っている。US-GAAP期間のXBRLタグの取り違えだと思われる。

Axioraでトヨタの売上原価を見ると:

for f in client.companies.retrieve_financials("7203", years=5).data:
    if f.cost_of_sales and f.revenue:
        margin = (f.revenue - f.cost_of_sales) / f.revenue * 100
        print(f"FY{f.fiscal_year}  粗利率: {margin:.1f}%")
# FY2025  粗利率: 26.1%
# FY2024  粗利率: 25.5%
# FY2023  粗利率: 21.6%
# FY2022  粗利率: 22.7%
# FY2021  粗利率: 22.1%

全年度で20〜26%。自動車メーカーとして妥当な値。

まとめ

EDINET DB Axiora
売上高 正確 正確
純利益 正確 正確
会計基準の判定 トヨタ→USGAAP ✗ IFRS ✓
重複行 ソニー6年度分が重複 なし
空データ行 あり(フィールド2個の行) なし
売上原価 FY2019以前で異常値 正確(粗利率20〜26%)

両方ともEDINETの有報XBRLをパースしている。売上と純利益が合ってるのは前提として、差が出るのはパーサーの品質。重複除去、会計基準の判定、XBRLタグの正確なマッピング。

追試コード

5分で同じ検証ができる。

from axiora import Axiora

client = Axiora()

# トヨタ — 会計基準と純利益
for f in client.companies.retrieve_financials("7203", years=3).data:
    print(f"FY{f.fiscal_year}  {f.accounting_standard}  純利益: ¥{f.net_income:,}")

# ソニー — 重複チェック
sony = client.companies.retrieve_financials("6758", years=15)
years = [f.fiscal_year for f in sony.data]
assert len(years) == len(set(years)), f"重複: {years}"
print(f"ソニー: {len(years)}年度、重複なし")

EDINET DB側はcurlで:

# 会計基準
curl -s -H "X-API-Key: $KEY" \
  "https://edinetdb.jp/v1/companies/E02144/financials" | \
  jq '[.data[] | {fiscal_year, accounting_standard}] | last'

# 重複チェック
curl -s -H "X-API-Key: $KEY" \
  "https://edinetdb.jp/v1/companies/E01777/financials" | \
  jq '.meta.fiscal_years | length, unique | length'

リンク

用途に合う方を使えばいい。ただし財務データは正確性が命。自分で検証してから使うことをおすすめする。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?