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 Digest, 2026-07-26
Whale Agentto me7:02
~/whale-agent: whale
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.

Why it is hard

Filings are not built to be read

US insider trade SEC Form 4, XML
<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.

Taiwan holding MOPS, Chinese
"出表日期": "1150725",
"公司名稱": "範例半導體",
"職稱": "董事長",
"持股比率": "6.10"

A Taiwan calendar date, a percent, and no price.

Vendor feed row JSON
"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

  1. Readone reader per source
  2. Priceshares x price, to USD
  3. Historyheld before?
  4. Checkplausibility limits
  5. Rankthreshold, watchlist
  6. AI writeroptional, off by default
  7. Figure checknumbers must match
  8. 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

Whale brief · 2026-07-25 · sample

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.

Fig 1. 18,107 disclosures storedShown: 8 Jul to 31 Aug 2026 (18,032). The total covers all dates, 2021 to 2026. By source: 15,692 SEC insider trades (13,513 of them through the FMP vendor feed), 1,523 Japan EDINET, 826 US congressional trade reports (FMP), 42 Taiwan MOPS and 24 SEC 13D/G.
Fig 2. 145,277 fund holding rows from 48 fundsColumn: fund. Row: one of 15 report periods, 2013 to 2026, with gaps. Empty cell: no data.
Fig 3. 6,706 distinct filers trackedNew filers per day, 8 Jul to 31 Aug 2026 (6,659 of them).
Fig 4. By country: US 16,542 · Japan 1,523 · Taiwan 42

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.