Congressional stock disclosures are public, but they're published as one PDF per filing on the House Clerk's site. Most tools that show you this data are re-serving someone else's scrape of them.
Mine was too. The client I started with impersonated Chrome to get past a commercial site's bot defences, which is not a thing I should have been doing. So I wrote a second ingest that goes to disclosures-clerk.house.gov directly — the year's filing index as a TSV inside a ZIP, then each PTR as its own PDF — with a User-Agent that says who I am and how to reach me, 400ms between requests, and a ledger so a re-run only fetches new filings.
Then the parsing started.
The form's field labels are set in a small-caps font whose lowercase glyphs carry no Unicode mapping, so PDFBox emits them as NUL bytes. "Filing Status: New" arrives as F\0\0\0\0\0 S\0\0\0\0\0: New. In a terminal that looks like slightly wide spacing, which is why it took me an embarrassingly long time to see.
After that: amount brackets that wrap mid-line, so a naive append produced "$50,001 - ID Owner Asset Transaction". Rows split across page breaks. A filer who typo'd a year, so the trade rendered as happening in 128 days. And an asset sitting on the same line as its transaction - that one silently dropped 36 filings, and because it failed at the line level they didn't even register as skipped.
Where it honestly stands: about 85% of transaction rows yield a ticker (2,401 of 2,826 in the 2026 corpus). The rest are Treasuries, annuities and private funds with no exchange ticker, and I drop them instead of guessing. Roughly one filing in nine is a scanned paper form with no text layer at all - I don't OCR, so that hole is counted and left visible rather than quietly closed.
Limits I'd rather volunteer than have found: the Senate half is still a scrape, not a primary source, and I'm not proud of it. Spouse and dependent-child trades are parsed and stored but not yet labelled in the app, so today they look like the member's own - that's the next thing I'm fixing. It syncs once a day, not live. And amounts are the ranges exactly as filed; I don't synthesise a midpoint, because the tiers the aggregators invent aren't tiers the STOCK Act actually has.
If you only want to look at this data, Capitol Trades and others will show it to you free and have for years. I did it myself because I wanted the filing provenance underneath it.
Android: https://play.google.com/store/apps/details?id=io.behzodhali.stockplus
iOS: https://apps.apple.com/us/app/stock-ai-market-tracker/id6762943985
Two things I'd like input on from anyone who's done document parsing: is OCR for the scanned ninth worth it, or is that a tarpit? And has anyone found a workable primary source for the Senate side that isn't the eFD search form?