この記事でわかること
- EDINET APIとは何か
- APIキーの取得方法
- 書類一覧APIの使い方
- 書類取得API(PDF)の使い方
- Google Apps Scriptでの実装例
この記事の対象読者
- EDINET APIを初めて使う方
- 有価証券報告書を自動取得したい方
- 上場企業の開示情報をプログラムで扱いたい方
- Google Apps Script(GAS)で業務自動化したい方
EDINET APIとは
概要
EDINET(Electronic Disclosure for Investors’ NETwork) は、金融庁が運営する「金融商品取引法に基づく有価証券報告書等の開示書類に関する電子開示システム」です。
EDINET APIは、このEDINETのデータをプログラムから取得できる公式APIです。
| 項目 | 内容 |
|---|---|
| 提供元 | 金融庁 |
| 料金 | 無料 |
| 取得できる情報 | 有価証券報告書、四半期報告書、大量保有報告書など |
| 対象企業 | 全上場企業(約4,000社) |
何ができるのか
EDINET APIを使うと、以下のことができます。
| 機能 | 説明 |
|---|---|
| 書類一覧の取得 | 指定した日付に提出された書類の一覧を取得 |
| 書類の取得 | 特定の書類(PDF、XBRL等)をダウンロード |
| 企業情報の取得 | EDINETコードから企業情報を取得 |
どんな時に使うのか
- 特定企業の有価証券報告書を定期的に取得したい
- 全上場企業の開示情報を一括収集したい
- 財務データをXBRL形式で取得して分析したい
- IR情報の監視を自動化したい
事前準備:APIキーの取得
EDINET APIを使用するには、APIキーが必要です。
取得手順
STEP 1:EDINETにアクセス
EDINET にアクセスします。
STEP 2:ユーザー登録
トップページの「API利用についてはこちら」または「新規登録」からユーザー登録を行います。
STEP 3:メール認証
登録したメールアドレスに届く認証メールのリンクをクリックします。
STEP 4:APIキー発行
ログイン後、マイページから「APIキー発行」を行います。
注意事項
| 項目 | 内容 |
|---|---|
| 利用制限 | 一定時間内のリクエスト数に制限あり |
| 利用規約 | EDINET利用規約に同意が必要 |
| APIキーの管理 | 第三者に漏洩しないよう注意 |
API仕様の概要
エンドポイント
EDINET APIのベースURLは以下の通りです。
https://api.edinet-fsa.go.jp/api/v2/
主要なAPI
| API | エンドポイント | 用途 |
|---|---|---|
| 書類一覧API | /documents.json | 指定日の書類一覧を取得 |
| 書類取得API | /documents/{docID} | 特定書類をダウンロード |
共通パラメータ
| パラメータ | 必須 | 説明 |
|---|---|---|
Subscription-Key | ○ | APIキー |
書類一覧API の使い方
概要
指定した日付に提出された書類の一覧を取得します。
リクエスト
GET https://api.edinet-fsa.go.jp/api/v2/documents.json
パラメータ
| パラメータ | 必須 | 説明 | 例 |
|---|---|---|---|
date | ○ | 提出日(YYYY-MM-DD形式) | 2024-06-25 |
type | ○ | 取得情報(1:メタデータ、2:提出書類一覧) | 2 |
Subscription-Key | ○ | APIキー | xxxxx |
レスポンス例
json
{
"metadata": {
"title": "提出された書類を把握するためのAPI",
"status": "200",
"message": "OK"
},
"results": [
{
"docID": "S100ABCD",
"edinetCode": "E12345",
"secCode": "7203",
"filerName": "トヨタ自動車株式会社",
"docDescription": "有価証券報告書",
"docTypeCode": "120",
"submitDateTime": "2024-06-25 09:00",
"periodStart": "2023-04-01",
"periodEnd": "2024-03-31"
},
...
]
}
主なレスポンス項目
| 項目 | 説明 |
|---|---|
docID | 書類ID(PDFダウンロード時に使用) |
edinetCode | 企業のEDINETコード |
secCode | 証券コード |
filerName | 提出者名(企業名) |
docDescription | 書類の説明 |
docTypeCode | 書類種別コード(120=有価証券報告書) |
submitDateTime | 提出日時 |
periodStart | 対象期間の開始日 |
periodEnd | 対象期間の終了日 |
docTypeCode(書類種別コード)一覧
| コード | 書類種別 |
|---|---|
| 120 | 有価証券報告書 |
| 130 | 訂正有価証券報告書 |
| 140 | 四半期報告書 |
| 150 | 訂正四半期報告書 |
| 160 | 半期報告書 |
| 350 | 大量保有報告書 |
書類取得API の使い方
概要
書類一覧APIで取得したdocIDを使って、実際の書類(PDF等)をダウンロードします。
リクエスト
GET https://api.edinet-fsa.go.jp/api/v2/documents/{docID}
パラメータ
| パラメータ | 必須 | 説明 | 例 |
|---|---|---|---|
docID | ○ | 書類ID(URLパス) | S100ABCD |
type | ○ | 取得形式(1:ZIP、2:PDF、3:添付、4:英文) | 2 |
Subscription-Key | ○ | APIキー | xxxxx |
type パラメータの詳細
| type | 取得形式 | 説明 |
|---|---|---|
| 1 | ZIP | 提出書類及び監査報告書(XBRL含む) |
| 2 | 提出書類及び監査報告書(PDF形式) | |
| 3 | ZIP | 添付文書 |
| 4 | ZIP | 英文ファイル |
レスポンス
type=2(PDF)の場合:PDFファイルのバイナリデータtype=1,3,4(ZIP)の場合:ZIPファイルのバイナリデータ
サンプルコード
Python での実装例
書類一覧の取得
python
import requests
API_KEY = "your_api_key_here"
BASE_URL = "https://api.edinet-fsa.go.jp/api/v2"
def get_documents(date):
"""指定日の書類一覧を取得"""
url = f"{BASE_URL}/documents.json"
params = {
"date": date,
"type": 2,
"Subscription-Key": API_KEY
}
response = requests.get(url, params=params)
if response.status_code == 200:
return response.json()
else:
print(f"Error: {response.status_code}")
return None
# 使用例
result = get_documents("2024-06-25")
if result and "results" in result:
for doc in result["results"]:
# 有価証券報告書(docTypeCode=120)のみ表示
if doc.get("docTypeCode") == "120":
print(f"{doc['filerName']}: {doc['docID']}")
PDFのダウンロード
python
def download_pdf(doc_id, save_path):
"""書類IDを指定してPDFをダウンロード"""
url = f"{BASE_URL}/documents/{doc_id}"
params = {
"type": 2, # PDF形式
"Subscription-Key": API_KEY
}
response = requests.get(url, params=params)
if response.status_code == 200:
with open(save_path, "wb") as f:
f.write(response.content)
print(f"Downloaded: {save_path}")
return True
else:
print(f"Error: {response.status_code}")
return False
# 使用例
download_pdf("S100ABCD", "toyota_2024.pdf")
Google Apps Script(GAS)での実装例
書類一覧の取得
javascript
const API_KEY = "your_api_key_here";
const BASE_URL = "https://api.edinet-fsa.go.jp/api/v2";
/**
* 指定日の書類一覧を取得
*/
function getDocuments(date) {
const url = `${BASE_URL}/documents.json?date=${date}&type=2&Subscription-Key=${API_KEY}`;
const response = UrlFetchApp.fetch(url, {
method: "get",
muteHttpExceptions: true
});
const code = response.getResponseCode();
if (code === 200) {
return JSON.parse(response.getContentText());
} else {
console.log(`Error: ${code}`);
return null;
}
}
/**
* 有価証券報告書のみ抽出
*/
function getSecuritiesReports(date) {
const result = getDocuments(date);
if (!result || !result.results) {
return [];
}
// docTypeCode=120 が有価証券報告書
return result.results.filter(doc => doc.docTypeCode === "120");
}
// 使用例
function test() {
const reports = getSecuritiesReports("2024-06-25");
reports.forEach(doc => {
console.log(`${doc.filerName}: ${doc.docID}`);
});
}
PDFのダウンロードとGoogle Driveへの保存
javascript
/**
* PDFをダウンロードしてGoogle Driveに保存
*/
function downloadPdfToDrive(docId, fileName, folderId) {
const url = `${BASE_URL}/documents/${docId}?type=2&Subscription-Key=${API_KEY}`;
const response = UrlFetchApp.fetch(url, {
method: "get",
muteHttpExceptions: true
});
const code = response.getResponseCode();
if (code === 200) {
const blob = response.getBlob().setName(fileName);
const folder = DriveApp.getFolderById(folderId);
const file = folder.createFile(blob);
console.log(`Saved: ${file.getUrl()}`);
return file.getUrl();
} else {
console.log(`Error: ${code}`);
return null;
}
}
// 使用例
function testDownload() {
const docId = "S100ABCD";
const fileName = "トヨタ自動車_2024_有価証券報告書.pdf";
const folderId = "your_folder_id_here";
downloadPdfToDrive(docId, fileName, folderId);
}
特定企業の有価証券報告書を検索
javascript
/**
* 特定企業の有価証券報告書を日付範囲で検索
*/
function searchCompanyReport(edinetCode, startDate, endDate) {
const start = new Date(startDate);
const end = new Date(endDate);
const results = [];
// 日付をループ
for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
const dateStr = Utilities.formatDate(d, "JST", "yyyy-MM-dd");
const docs = getDocuments(dateStr);
if (!docs || !docs.results) continue;
// 指定企業の有価証券報告書を検索
const found = docs.results.find(doc =>
doc.edinetCode === edinetCode && doc.docTypeCode === "120"
);
if (found) {
results.push(found);
}
// API制限対策:1リクエストごとに少し待機
Utilities.sleep(500);
}
return results;
}
// 使用例:トヨタ自動車(E02144)の報告書を検索
function testSearch() {
const reports = searchCompanyReport("E02144", "2024-06-01", "2024-06-30");
reports.forEach(doc => {
console.log(`${doc.submitDateTime}: ${doc.docDescription}`);
});
}
エラーハンドリング
よくあるエラーと対処法
| HTTPステータス | 原因 | 対処法 |
|---|---|---|
| 400 | パラメータ不正 | パラメータの形式を確認 |
| 401 | 認証エラー | APIキーを確認 |
| 404 | 書類が存在しない | docIDを確認 |
| 429 | リクエスト過多 | 時間を空けてリトライ |
| 500 | サーバーエラー | 時間を空けてリトライ |
エラーハンドリングの実装例(GAS)
javascript
/**
* エラーハンドリング付きAPI呼び出し
*/
function callApiWithRetry(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = UrlFetchApp.fetch(url, {
method: "get",
muteHttpExceptions: true
});
const code = response.getResponseCode();
if (code === 200) {
return { success: true, data: JSON.parse(response.getContentText()) };
}
if (code === 429) {
// レート制限:60分待機
console.log("Rate limited. Waiting 60 minutes...");
Utilities.sleep(60 * 60 * 1000);
continue;
}
if (code >= 500) {
// サーバーエラー:少し待ってリトライ
console.log(`Server error (${code}). Retrying in 10 seconds...`);
Utilities.sleep(10 * 1000);
continue;
}
// その他のエラー
return { success: false, error: code };
}
return { success: false, error: "Max retries exceeded" };
}
実用Tips
1. 日付をループして書類を取得
有価証券報告書は特定の日にまとめて提出されるわけではないため、日付をループして検索する必要があります。
javascript
/**
* 期間内の全ての有価証券報告書を取得
*/
function getAllReportsInPeriod(startDate, endDate) {
const reports = [];
const start = new Date(startDate);
const end = new Date(endDate);
for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
const dateStr = Utilities.formatDate(d, "JST", "yyyy-MM-dd");
const result = getDocuments(dateStr);
if (result && result.results) {
const dailyReports = result.results.filter(doc => doc.docTypeCode === "120");
reports.push(...dailyReports);
}
Utilities.sleep(500); // API制限対策
}
return reports;
}
2. 証券コードから企業を検索
javascript
/**
* 証券コードで企業を検索
*/
function findBySecCode(reports, secCode) {
return reports.filter(doc => doc.secCode === secCode);
}
3. 業種でフィルタリング
書類一覧APIでは業種情報は直接取得できないため、別途EDINETコードリスト(CSV)を使用します。
まとめ
EDINET APIでできること
| 機能 | 説明 |
|---|---|
| 書類一覧取得 | 指定日の提出書類を一覧取得 |
| PDF取得 | 有価証券報告書等のPDFをダウンロード |
| XBRL取得 | 財務データをXBRL形式で取得 |
ポイント
- 無料で利用可能(登録必要)
- 全上場企業の開示書類を取得可能
- APIキーの取得が必要
- リクエスト制限があるため、適切な待機時間を設定
活用例
- 有価証券報告書の自動収集システム
- 財務データの自動分析
- IR情報の監視・アラート
- 競合企業の動向調査
関連記事
- 【業務自動化 事例】有価証券報告書を自動収集するシステムをGASで構築|全上場企業4,000社を網羅し作業時間333時間→0時間
- Google Apps Script(GAS)の6分制限を回避する方法
- スプレッドシートで業務システムを構築する方法【GAS活用ガイド】
もっと詳しく知りたい方へ
「EDINET APIを使った自動化システムを作りたい」 「自社の業務に合わせたカスタマイズがしたい」
そのようなご要望があれば、お気軽にご相談ください。
AIDXの仕組みを社内で内製化したい方へ
スパルタAIDX研修で、現場で使えるAI実践スキルを短期集中で習得できます。
ベテランの技術継承や業務自動化を自社で実現したい方におすすめです。

AIDXの仕組みを構築を依頼したい方へ
貴社の課題に合わせた最適なソリューションをご提案いたします。
導入事例の詳細や、具体的な実装方法についてもお気軽にご相談ください。



