Python package for accessing Japanese corporate financial data from EDINET
Project description
edinet-tools
Python library for Japan's EDINET disclosure system — the official source for securities reports, shareholding notices, tender offers, and other regulatory filings from listed Japanese companies.
import edinet_tools
toyota = edinet_tools.entity("7203")
docs = toyota.documents(days=30)
report = docs[0].parse() # → SecuritiesReport, LargeHoldingReport, etc.
Install
pip install edinet-tools
Requires Python 3.10+. No heavy dependencies — just pandas, python-dateutil, chardet, and python-dotenv.
Design
edinet-tools has three layers:
- API client — fetch document listings and download filings in any format (XBRL, PDF, HTML)
- Typed parsers — every EDINET document type routes to a named Python dataclass with structured fields
- Full capture — elements not yet mapped to typed fields are preserved in
raw_fields,unmapped_fields, andtext_blocks, so you can explore what's available and nothing is silently dropped
Each parser maps known XBRL elements to typed Python fields (dates, decimals, strings). As EDINET evolves or new elements become useful, adding a field is one line in the element map and one line on the dataclass. The architecture is designed to grow incrementally without breaking existing code.
EDINET Document Types
EDINET defines 42 document types spanning corporate disclosure, capital markets activity, and governance reporting. edinet-tools provides typed parsers for all of them.
| Code | Family | Description |
|---|---|---|
| 120, 130 | Securities Reports | Annual reports — financials, governance, business overview (J-GAAP + IFRS) |
| 140, 150 | Quarterly Reports | Quarterly financials (abolished April 2024) |
| 160, 170 | Semi-Annual Reports | Semi-annual reports, primarily investment funds |
| 180, 190 | Extraordinary Reports | Material events — M&A, management changes, restructuring |
| 220, 230 | Treasury Stock | Share buyback authorization and execution status |
| 235, 236 | Internal Control | J-SOX evaluation results — internal control effectiveness |
| 135, 136 | Confirmation Documents | CEO/CFO attestation (primarily PDF) |
| 200, 210 | Parent Company Reports | Parent-subsidiary relationships |
| 350, 360 | Large Shareholding | 5%+ ownership filings — filer, target, ownership percentage |
| 370, 380 | Shareholding Changes | Position changes for large holders |
| 240, 250 | Tender Offer Registration | Public tender offer filings |
| 260 | Tender Offer Withdrawal | Withdrawal of tender offers |
| 270, 280 | Tender Offer Reports | Tender offer completion — outcome, final holdings |
| 290, 300 | Statement of Opinion | Target company's board opinion on a tender offer |
| 310, 320 | Response to Questions | Regulatory Q&A during tender offer process |
| 330, 340 | Exemption Application | Exemption from separate purchase prohibition |
| 030, 040 | Securities Registration | New securities registration statements (primarily funds) |
| 010, 020 | Securities Notification | Securities issuance notifications |
| 050 | Registration Withdrawal | Withdrawal of securities registration |
| 070, 080, 090 | Shelf Registration | Shelf registration for future bond/equity issuance |
| 060 | Issuance Notification | Issuance registration notifications |
| 100 | Issuance Supplementary | Supplementary shelf registration drawdown documents |
| 110 | Issuance Withdrawal | Withdrawal of issuance registration |
Amendments (even-numbered codes like 130, 150, 190) route to the same parser as their base type and set is_amendment = True.
from edinet_tools import supported_doc_types, doc_type
supported_doc_types() # All 42 codes with typed parsers
dt = doc_type("235")
print(dt.name_en) # "Internal Control Report"
print(dt.name_jp) # "内部統制報告書"
Usage
Entity Lookup
import edinet_tools
toyota = edinet_tools.entity("7203") # By ticker
toyota = edinet_tools.entity("Toyota") # By name search
print(toyota.name, toyota.edinet_code) # TOYOTA MOTOR CORPORATION E02144
banks = edinet_tools.search("bank", limit=5)
Fetching Documents
# All filings for a date (requires EDINET_API_KEY)
docs = edinet_tools.documents("2026-01-20")
# Filter by company and type
earnings = toyota.documents(doc_type="120", days=365)
Parsing
report = doc.parse()
# Securities Report — financials with J-GAAP and IFRS support
report.net_sales
report.operating_cash_flow
report.roe
report.accounting_standard # "Japan GAAP" or "IFRS"
# Large Shareholding Report
report.filer_name
report.target_company
report.ownership_pct
# Tender Offer
report.acquirer_name
report.target_name
report.holding_ratio_after
# Any report
report.fields() # List available typed fields
report.to_dict() # Export as dictionary
report.raw_fields # All XBRL elements by element ID
report.text_blocks # Narrative text block content
Download Formats
from edinet_tools.api import fetch_document
csv_zip = fetch_document("S100ABC") # XBRL CSV (default)
pdf = fetch_document("S100ABC", type=2) # PDF
html_zip = fetch_document("S100ABC", type=1) # HTML documents
Configuration
Get a free API key from EDINET (video walkthrough):
export EDINET_API_KEY=your_key_here
Or use a .env file. Entity lookup and parsing work without an API key — only document fetching requires one.
Testing
pytest tests/ -v # 600+ tests
Links
License
MIT
Independent project. Not affiliated with Japan's Financial Services Agency. Verify data independently before making financial decisions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file edinet_tools-0.5.0.tar.gz.
File metadata
- Download URL: edinet_tools-0.5.0.tar.gz
- Upload date:
- Size: 1.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ff14a45c52a94bad6061c63cc8f323a7f860bd559c77f103495ab102711e878
|
|
| MD5 |
3de9463703ad52ac466c212d54bc7593
|
|
| BLAKE2b-256 |
dc45ce4b6fac13336f5850b80ba7aad69adb38e5b27439720761d3381fe21f9d
|
File details
Details for the file edinet_tools-0.5.0-py3-none-any.whl.
File metadata
- Download URL: edinet_tools-0.5.0-py3-none-any.whl
- Upload date:
- Size: 1.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f7a0b7ffc8797ebda0c702634a5f2b019d127235fa0bed6262a1d620c956a0a
|
|
| MD5 |
0c7d990d40c8361e3c5784f8b543d29f
|
|
| BLAKE2b-256 |
c33362ffc56c567100229d3b1df40b51627660c7d643815c0d47f14fe583c3df
|