As a follow-up to my personal Japan stock screener (yfinance × Investment Strategy), I open-sourced Edisuku (edisuku) — a Japan stock financial screener that automatically ingests filings from EDINET (Japan’s Financial Services Agency electronic disclosure system).
It’s been more than six months since I wrote about the yfinance screener (and later UI updates) (the original build is on Zenn, in Japanese).
Services like EDINET DB already exist, so I wasn’t sure a write-up was needed — but as forkable OSS under the MIT License, I thought it was worth publishing anyway.
- Live site: https://edisuku.com/
- GitHub repo: https://github.com/testkun08080/edisuku (MIT License)
What you’ll learn
- What Edisuku can do (EDINET ingestion, financial screening, time-series charts, and more)
- The GitHub Actions + Cloudflare Workers architecture for daily EDINET updates
- Monorepo layout and how to fork and run it on your own Cloudflare account
Why I built it — inspired by Sakana AI’s EDINET work
While building the yfinance screener, I noticed Sakana AI preparing and analyzing EDINET disclosure data. That planted the idea: “when I have time, I’ll try an EDINET-based tool too.”
EDINET is the FSA’s system for listed companies’ annual and quarterly reports and other filings, available as XBRL / TSV. Screening on near-primary-source financial data felt useful for personal research, so I started with a prototype.
The ingestion pipeline references Sakana AI’s edinet2dataset.
apps/wrapper is rebuilt for my use case (credits in CREDITS.md).
Built with heavy AI assistance — then cleaned up for OSS
I started hands-on work around March 2026.
For personal use I went full vibe coding, and a working prototype appeared quickly.
Honestly, the code and structure were messy, and maintenance was unclear.
This release is the reorganized, OSS-ready version of that project.
What Edisuku does — EDINET-based Japan stock screening
At edisuku.com, you can run financial analysis on Japanese listed companies from EDINET data:
- Automatic EDINET ingestion — parse XBRL / TSV from annual and quarterly reports and extract financials
- Financial screening — filter by 20+ metrics including ROE, PER, PBR, dividend yield, and market cap
- Time-series charts — revenue, operating income, net income, and dividends over 10+ years
- Financial statement viewer — balance sheet (BS), income statement (PL), and cash flow (CF) side by side over time, with links to EDINET originals
- Major shareholder analysis — track ownership structure and stake changes per filing
Screenshot of the screener UI:

At launch it covers 3,900+ listed companies and 10+ years of quarterly data (per on-site stats).
Architecture — daily updates via GitHub Actions, served on Cloudflare
High-level flow (also in the README):
EDINET API
↓
apps/wrapper (Python: fetch + parse)
↓ SQLite delta
Cloudflare D1
↓ drizzle
apps/api (Hono on Workers)
↓ hono/client (type-safe)
apps/web (Vike + React on Workers)
↓
usersData pipeline (GitHub Actions)
daily-refresh.yml drives daily updates (currently manual via workflow_dispatch; production cron is commented out).
- Load known
doc_ids from D1 ingest_daily.pyfetches and parses that day’s EDINET submissionspublish_to_d1.pyturns SQLite deltas into SQL and applies them to D1- Rebuild
company_metricsfor the screener - Invalidate KV metric snapshots (regenerated on next request)
The Python wrapper sits outside the pnpm workspace and only handles fetch + parse.
Metric logic (ROE, Piotroski F-Score, etc.) lives in packages/metrics so API, web, and batch jobs share one implementation.
Serving (Cloudflare Workers)
Hosting targets the Cloudflare Workers free tier.
| Layer | Tech | Role |
|---|---|---|
| Storage | D1 (SQLite) | Companies, filings, fiscal periods, metrics, holders |
| Cache | KV | Screener metric snapshots |
| API | Hono on Workers | REST API (D1 via drizzle) |
| Frontend | Vike + React on Workers | Screener UI (type-safe API via hono/client) |
apps/web only imports AppType from apps/api — no runtime coupling. Change an API route and the web app’s types update at compile time.
Deploy via deploy.yml: pick staging or production manually (auto-deploy on push to main is commented out).
Monorepo layout
Main directories:
apps/
api/ Hono on Workers (REST API)
web/ Vike + React on Workers (UI)
wrapper/ Python: EDINET fetch + parse
packages/
db/ drizzle schema + shared queries
metrics/ metric calculations + screener columns
types/ shared TS types for API/web
infra/
compose.yml local dev (Docker Compose)
render-wrangler-config.sh wrangler template generation
docs/
ARCHITECTURE.md / modules/ / FORK.md etc.Locally, docker compose -f infra/compose.yml up gives you the UI with a sample DB of 11 companies.
To fork onto your Cloudflare account, see docs/FORK.md.
FAQ
What is EDINET?
Japan’s electronic disclosure system run by the Financial Services Agency. You can fetch annual reports, quarterly reports, and other filings via API. Edisuku parses that data into screener-ready financial metrics.
How is this different from the yfinance screener?
The yfinance Japan stock screener is market-data oriented with broad coverage including US names. Edisuku is EDINET filing-based, better for time-series financials, statement comparison, and major-holder tracking — closer to primary disclosure.
Can I self-host it?
Yes. MIT License. With GitHub Actions and a Cloudflare account, follow FORK.md to deploy your own instance.
Paid features — maybe later
I may eventually split CSV export and extras into a paid tier.
Everything could stay free; if it’s polished enough to be worth paying for, I’ll add that when I feel like it.
For now, OSS is the milestone. Feedback via Issues and PRs is welcome — or contact.
Wrap-up
Edisuku is now open source as an EDINET Japan stock financial screener.
If you build something interesting with it, I’d love to hear about it.