edinetdbのβ版が3月7日に終了した。
β期間中は無料でEDINETの財務データをAPIで取得できた。1,300人以上がAPIキーを取得していたらしい。自分もベンチマーク検証で使っていた。
β終了後、既存のスクリプトが動かなくなった人もいるはず。選択肢を整理した。
選択肢は3つ
1. EDINET APIを直接叩く
金融庁のEDINET APIを直接使う方法。無料。ただしZIPをダウンロードしてXBRLをパースする必要がある。
# 1社の売上高を取るだけで35行
res = requests.get("https://api.edinet-fsa.go.jp/api/v2/documents.json", ...)
zip_res = requests.get(f"https://api.edinet-fsa.go.jp/api/v2/documents/{doc_id}", ...)
# → zipfile展開 → lxml → namespace分岐 → 会計基準判定...
3つの会計基準(JP-GAAP/IFRS/US-GAAP)の分岐処理が必要。1社なら50行、3,709社にスケールさせると数千行。詳細は前の記事に書いた。
2. 自分でパーサーを書く
上のEDINET APIルートを本気でやるパターン。XBRLタクソノミのマッピング、3会計基準の正規化、単位変換(円/千円/百万円)、期間判定(当期/前期)を全部自前で実装する。
2週間は溶ける。XBRLパースで絶望した話に書いた通り。
3. 別のAPIを使う
Axioraがある。EDINETの有報XBRLをパース・正規化して、REST APIで返す。自分が作っているサービス。
- 無料プラン:1,000リクエスト/日
- 期限なし。βではない
- クレジットカード不要
edinetdbから移行する場合の対応を書いておく。
edinetdb → Axiora 移行
セットアップ
pip install axiora
axiora.devでGitHub or Googleログイン → APIキーをコピー → 環境変数にセット:
export AXIORA_API_KEY="ax_live_..."
基本的な取得
edinetdbで書いていたコード:
import requests
res = requests.get(
"https://edinetdb.jp/v1/companies/E02144/financials",
headers={"X-API-Key": "edb_..."},
)
data = res.json()["data"][0]
print(data["revenue"])
Axioraで書き換え:
from axiora import Axiora
client = Axiora()
toyota = client.companies.retrieve_financials("7203", years=1)
print(toyota.data[0].revenue)
# 48036704000000
SDKは型付き。toyota.data[0].まで打てばIDEが52フィールド全部補完してくれる。
企業コード
edinetdbはEDINETコード(E02144)で指定していた。
Axioraは証券コード(7203)でもEDINETコード(E02144)でもどちらでも使える。東証のティッカーをそのまま渡せる。
# どちらでもOK
client.companies.retrieve_financials("7203", years=1) # 証券コード
client.companies.retrieve_financials("E02144", years=1) # EDINETコード
フィールド対応表
edinetdbが返していたフィールドと、Axioraの対応:
| データ | edinetdb | Axiora |
|---|---|---|
| 売上高 | revenue |
revenue |
| 純利益 | net_income |
net_income |
| 営業利益 | operating_income |
operating_income |
| 総資産 | total_assets |
total_assets |
| 株主資本 | ❌ 未提供 | total_equity |
| EPS | eps |
eps |
| BPS | — | bps |
| ROE | ❌ 未提供 | roe |
| ROA | ❌ 未提供 | roa |
| 営業利益率 | ❌ 未提供 | operating_margin |
| 純利益率 | ❌ 未提供 | net_margin |
| 自己資本比率 | ❌ 未提供 | equity_ratio |
| 配当 | — | dividends_per_share |
| 従業員数 | — | num_employees |
| 会計基準 | accounting_standard |
accounting_standard |
edinetdbは24フィールド。Axioraは52フィールド。ROE・ROA・利益率など分析に使う指標は計算済みで返ってくる。
edinetdbにはなかった機能
移行ついでに使えるようになる機能がいくつかある。
ランキング
# 売上高トップ10
ranking = client.rankings.retrieve("revenue", limit=10)
for r in ranking.data:
print(f"{r.company.name_jp} ¥{r.value/1e12:.1f}兆")
revenue, net_income, roe, roa, operating_marginなど11指標でソート可能。
スクリーニング
# ROE15%以上、売上1000億以上
screen = client.screen.retrieve(roe_min=15.0, revenue_min=100_000_000_000)
for r in screen.data:
print(f"{r.company.name_jp} ROE: {r.metrics.roe:.1f}%")
成長率・CAGR
growth = client.companies.retrieve_growth("7203", years=5)
cagr_5yr = growth.data.cagr.api_5yr
print(f"売上CAGR(5年): {cagr_5yr.revenue:.1f}%")
財務健全性スコア
health = client.companies.retrieve_health("7203")
print(health.data.score) # 0-100
print(health.data.flags) # リスクフラグ (例: ['net_loss', 'negative_operating_cf'])
大量保有報告書(5%ルール)
# 誰がトヨタの株を大量保有しているか
curl https://api.axiora.dev/v1/companies/7203/shareholdings \
-H "Authorization: Bearer $AXIORA_API_KEY"
MCP(Claude連携)
Claude Desktopの設定に1ブロック追加するだけで、日本企業の財務質問に答えられるようになる。
{
"mcpServers": {
"axiora": {
"url": "https://api.axiora.dev/mcp",
"headers": {
"Authorization": "Bearer ax_live_..."
}
}
}
}
33ツール。スクリーニング、比較、大量保有報告書の分析まで自然言語で実行できる。
精度
気になる人もいると思うので。
50社ベンチマークの結果:
| プロバイダ | 精度 |
|---|---|
| Axiora | 100.00% (285/285) |
| edinetdb | 74.74% (213/285) |
正解データはEDINETの有報XBRL。ベンチマークはOSSで公開している。
edinetdbのスコアが低い主因はtotal_equityが未実装だったこと(0/50)。それを除くと90.6%。残りは売上要素の選択ミス、営業利益の期間ずれ、EPSの端数処理。
まとめ
β終了後の選択肢:
- EDINET API直接 — 無料だが、XBRLパースの実装コストが高い
- 自前パーサー — 2週間〜。自分のユースケースに最適化できる
- Axiora — 3行で同じデータ。52フィールド。無料・期限なし
スクリプトを書き換えるだけなら30分。