2
2

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] 上場企業の業績データをAPIで取得する

Last updated at Posted at 2025-07-26

本稿は、上場企業の業績データ(有価証券報告書)をネットからAPIで取得する方法を記したメモです。

日本では、上場企業には有価証券報告書を開示する義務があり、現在ではこれをオンラインで取得できるようになっています。
金融庁が運営する「EDINET(Electronic Disclosure for Investors' NETwork)」システムを利用します。

EDINETとは

本家の説明文を引用します。

EDINET(エディネット)とは、「Electronic Disclosure for Investors' NETwork」の略で、「金
融商品取引法に基づく有価証券報告書等の開示書類に関する電子開示システム」のことを示します。
以前は、紙媒体で提出されていた有価証券報告書、有価証券届出書等の開示書類を、その提出から公衆縦覧等に至るまでの一連の手続を電子化したものです。

URL: https://disclosure2.edinet-fsa.go.jp/WEEK0010.aspx

取得にはアカウント登録が必要ですが、無料です。

取得できるドキュメントの種類と期間は下記の通りです。

書類種別 縦覧期間 (a) 延長期間 (b) 閲覧期間 (a+b)
有価証券報告書 5年 5年 10年
半期報告書 5年 5年 10年
四半期報告書 3年 7年

最長、過去10年分の企業の業績情報が手に入ります。すばらしいですね。

有価証券報告書をAPIを使って入手する

EDINETのREST APIが公開されいます。これを使ってプログラムから書類をダウンロードすることが可能です。
API仕様書も公開されており、こちらを参照するのがベストです。

API仕様書

上記ページにある「EDINET API関連資料」の「EDINET API仕様書(Version 2)」。

クリックするとzipファイルがダウンロードされます。展開すると以下のファイルが入っています。

ESE140206
 +- 11_EDINET_API仕様書(version 2).pdf
 +- 別紙1_様式コードリスト.xlsx
 +- 別紙2_提出書類一覧のデータ出力例(version 2).xlsx

11_EDINET_API仕様書(version 2).pdf」がAPI仕様書です。

アカウントの作成とAPIキーの発行

EDINETのAPIを使用するにはAPIキーの発行が必要です。
そのために、EDINETのアカウント作成が必要です。

先ほどダウンロードしたzipファイル内の、
11_EDINET_API仕様書(version 2).pdfの「アカウントの作成とAPIキーの発行について」の章をご覧ください。

アカウントの作成にはメールアドレスと電話番号の登録が必要です。
多要素認証してログインする仕組みになっています。

提供されているAPIの種類

おおまかに2種類のAPIが提供されています。

API種類 概要
書類一覧API 特定の日付を指定して、その日に登録されたすべての企業のファイル一覧が取得する。書類管理番号が得られる。
書類取得API 書類管理番号を使って、特定の企業の特定種類の報告書を取得する。

ある企業を指定して有価証券報告書を取得するには

残念ながら、ダイレクトに取得するAPIはないので、以下のような回りくどい方法をとる必要があります。

  1. 過去xxx年分の全企業の登録書類の一覧情報をEDINETから取得する
  2. 上記を使って自分で企業別の書類一覧データベースを作る
  3. 2のデータベースから、取得したい企業のある時期の報告書の「書類管理番号」を使って、実際の書類をEDINETから取得する

書類一覧を取得してみる

import requests

API_KEY = "xxxxx" // EDINETから取得したAPIキー

url = "https://disclosure.edinet-fsa.go.jp/api/v2/documents.json"
params = {
    "date": "2025-07-16",
    "type": 2, 
    "Subscription-Key": API_KEY
    }

res = requests.get(url, params=params)

print(res.json())

レスポンスの結果はJSON形式で取得できます。

結果例

指定した日付によっては、まったく登録書類がない場合があります。
(当たり前ですが、毎日書類が登録される訳ではないので)

書類がない場合の結果例:

{'metadata': {'title': '提出された書類を把握するためのAPI', 'parameter': {'date': '2025-07-06', 'type': '2'}, 'resultset': {'count': 0}, 'processDateTime': '2025-07-27 00:00', 'status': '200', 'message': 'OK'}, 'results': []}

'results':[]と結果が空になっています。

書類がある場合の結果例:
かなり長いので抜粋です。

{'metadata': {'title': '提出された書類を把握するためのAPI', 'parameter': {'date': '2025-07-16', 'type': '2'}, 'resultset': {'count': 105}, 'processDateTime': '2025-07-27 00:00', 'status': '200', 'message': 'OK'}, 'results': [{'seqNumber': 1, 'docID': 'S100WC7Q', 'edinetCode': 'E12448', 'secCode': None, 'JCN': '8010401040306', 'filerName': '明治安田アセットマネジメント株式会社', 'fundCode': 'G02262', 'ordinanceCode': '030', 'formCode': '995000', 'docTypeCode': '180', 'periodStart': None, 'periodEnd': None, 'submitDateTime': '2025-07-16 09:00', 'docDescription': '臨時報告書(内国特定有価証券)', 'issuerEdinetCode': None, 'subjectEdinetCode': None, 'subsidiaryEdinetCode': None, 'currentReportReason': '第29条第2項第4号', 'parentDocID': None, 'opeDateTime': None, 'withdrawalStatus': '0', 'docInfoEditStatus': '0', 'disclosureStatus': '0', 'xbrlFlag': '1', 'pdfFlag': '1', 'attachDocFlag': '0', 'englishDocFlag': '0', 'csvFlag': '1', 'legalStatus': '1'}, {'seqNumber': 2, 'docID': 'S100VVC2', 'edinetCode': 'E12460', 'secCode': None, 'JCN': '7010001054021', 'filerName': '野村アセットマネジメント株式会
・・・・

書類一覧データ

res = requests.get(url, params=params)で得られるres.json()resultsフィールドにデータが格納されています。

json_data = res.json()
results = json_data.get("results", [])

のように結果を取得できます。
CSVにして内容を見てみましょう。

import csv

filename = "edinet_documents.csv"

keys = results[0].keys() if results else []
with open(filename, 'w', newline='', encoding='utf-8') as output_file:
    dict_writer = csv.DictWriter(output_file, fieldnames=keys)
    dict_writer.writeheader()
    dict_writer.writerows(results)

CSVファイル

スクリーンショット 2025-07-27 7.36.34.png

このデータの中で

  • docID: 書類管理番号
    が一番重要です。これを使って個別の有価証券報告書のデータを取得します。

特定種類の書類だけを取得したい場合

取得できる報告書の種類はたくさんあって、
特定の種類のみ取得たい場合は、docTypeCode(報告書種別コードから判別します。
(自分で一覧から必要書類を抽出して、実際の取得はdocIDの方を使います)

報告書種別コード一覧は11_EDINET_API仕様書(version 2).pdfを参照してください。
以下抜粋です。

スクリーンショット 2025-07-27 7.45.35.png

1年間か四半期の業績が分かればいい場合は、

コード 名称
120 有価証券報告書
140 四半期報告書

を使います。

有価証券報告書を入手してみる

さきほどは2025-07-16の登録書類一覧を取得して、CSVファイルにしました。
この中の、

項目名
seqNumber 2
docID S100VVC2
filterName 野村アセットマネジメント株式会社
docTypeCode 120
docDescription 有価証券報告書(内国投資信託受益証券)-第8期(2024/10/21-2025/04/20)

のデータを取得してみましょう。

import requests

API_KEY = "xxxxx" // EDINETから取得したAPIキー

save_file = "決算情報.zip"
docID = "S100VVC2"

url = "https://disclosure.edinet-fsa.go.jp/api/v2/documents/%s?" % docID

params = {
    "type": 1, 
    "Subscription-Key": API_KEY
    }

res = requests.get(url, params=params)

if res.status_code == 200:
    with open(save_file, mode='wb') as local_file:
        local_file.write(res.content)
else:
    print(f"Error: {res.status_code}")

取得できた決算情報.zipを展開すると、以下のようになっています。

XBRL
├── AuditDoc
│   ├── jpaud-aar-cn-001_E12460-000_2025-04-20_01_2025-07-16_ixbrl.htm
│   ├── jpaud-aar-cn-001_E12460-000_2025-04-20_01_2025-07-16_pre.xml
│   ├── jpaud-aar-cn-001_E12460-000_2025-04-20_01_2025-07-16.xbrl
│   ├── jpaud-aar-cn-001_E12460-000_2025-04-20_01_2025-07-16.xsd
│   ├── jpaud-aar-cn-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
│   ├── jpaud-aar-cn-001_G14223-000_2025-04-20_01_2025-07-16_pre.xml
│   ├── jpaud-aar-cn-001_G14223-000_2025-04-20_01_2025-07-16.xbrl
│   ├── jpaud-aar-cn-001_G14223-000_2025-04-20_01_2025-07-16.xsd
│   └── manifest_AuditDoc.xml
└── PublicDoc
    ├── 0000000_header_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0201010_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0204010_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0204020_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0204030_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0204040_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0204050_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── 0301010_honbun_jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_ixbrl.htm
    ├── images
    │   ├── 5484797_0000.jpg
    │   ├── 7659781_0000.jpg
    │   ├── 7897457_0000.jpg
    │   ├── 7900199_0000.jpg
    │   ├── 8718177_0000.jpg
    │   ├── 8718178_0000.jpg
    │   ├── 8718272_0000.jpg
    │   └── 8718273_0000.jpg
    ├── jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_cal.xml
    ├── jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_def.xml
    ├── jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16_pre.xml
    ├── jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16.xbrl
    ├── jpsps070000-asr-001_G14223-000_2025-04-20_01_2025-07-16.xsd
    └── manifest_PublicDoc.xml

この中身のパースは別の機会にやりたいと思います。

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?