The agent that
reads what
investors must
disclose
Company insiders and large funds have to report what they buy and sell. Whale Agent reads those filings from the US SEC, Japan (EDINET) and Taiwan (MOPS), rewrites each one into the same record, and prices it in US dollars when the filing gives enough to do so. A plausibility check holds back any figure that cannot be true. It is open source and runs on your own machine.
Try it offline, no keys needed
git clone https://github.com/patrickt6/whale-agent.git && cd whale-agent && python3 -m venv .venv && .venv/bin/pip install -e ".[dev]" && make smoke
This runs the whole pipeline on a bundled sample, with no network and no API keys, and prints one ranked row. It needs Python 3.11 or newer. The PyPI and npm packages are not published yet.
Whale Agent Reads free public filings. Emails you one brief. v0.1.0 ──────────────────────────────────────────── Get started > Settings Preview a sample brief (offline, no email) Run today's brief (no email) Run today's brief and email it Send a test email Show every source and what is on or off Check setup (whale doctor) Schedule automatic emails Preview email design Quit ↑↓ move · enter select · q quit
Real output from the whale command. The email comes from whale preview-email at full size, with a made-up filer name and one sentence cut.
In short
What it is, and what works today
What it does
It reads insider trades and large fund stakes from public filings: US SEC Form 4, 13D/G and 13F, Japan EDINET large-shareholding reports and Taiwan MOPS insider holdings. Each filing becomes the same record, priced in US dollars where the filing allows it, and a size threshold (default $5M) decides what makes the brief.
How bad data is stopped
A plausibility gate in plain Python holds back figures that cannot be true. A stake worth more than the whole company is held back, and so is a share price outside $0.01 to $1,000,000. It exists because a vendor row once valued one position at $1.6 quadrillion. That row is now a test case. How the checks work
Live now, and coming soon
Live: the open-source code, an offline demo, this site, and the newsletter signup list.
Coming soon: the weekly newsletter. No newsletter email goes out yet. The newsletter will be rule-based and will not call an AI model.
Built, not switched on: an optional AI writer for summary sentences (off by default) and an AI reviewer that is tested but not connected to any job.
Newsletter: coming soon
Get notified when it launches
The newsletter has not started, and no email goes out yet. When it launches, it will be one short email each week, on Monday, with the filings above $5M. It will be free, and Patrick Taylor will send it.
Why it is hard
Filings are not built to be read
<transactionCode>P</transactionCode> <transactionShares> <value>500000</value> </transactionShares> <transactionPricePerShare> <value>15.00</value>
"P" means a buy. The dollar total is not in the file.
"株券等保有割合" "0.1010"
"取得資金合計" "JPY" "円"
"30305349000"
Japanese labels, a ratio, and a total in yen.
"出表日期": "1150725",
"公司名稱": "範例半導體",
"職稱": "董事長",
"持股比率": "6.10"
A Taiwan calendar date, a percent, and no price.
"reportingName": "Example Holdings LP", "securitiesTransacted": 40000000, "price": 40000000
The price is really the total. Multiply and you get $1.6 quadrillion.
What the agent does with them
- Readone reader per source
- Priceshares x price, to USD
- Historyheld before?
- Checkplausibility limits
- Rankthreshold, watchlist
- AI writeroptional, off by default
- Figure checknumbers must match
- Your inboxemail you set up
One reader per source fetches the filings and rewrites each one into the same shape.
Everything except the AI writer is plain code. All eleven stages
Try the table
Click a row to see where each number came from
Sample rows from the project's test fixtures. Grey rows were read and not sent.
Scale
What the stored data holds
From a read-only copy of the project database, with disclosures up to 31 Aug 2026. Hover a figure for exact values.
Free, open source, and it runs on your machine
MIT licence. You need Python and a contact email for the SEC. Read the limits before you rely on it.