Methodology
How this is built.
From government PDFs to a structured record of who traded what, when.
Coverage window
Periodic transaction reports were filed Jan 16, 2025 – May 15, 2026, with the bulk of transactions falling between Oct 23, 2024 – Mar 31, 2026 (1st–99th percentile of transaction dates). A handful of older trades exist when a member files a late or amended PTR covering historical activity, and source data occasionally contains future-dated filer typos.
Across 538 active members of Congress, 88 (16%) have reported individual transactions in this window. The remaining 450 have not. That is the expected pattern — most members do not actively trade individual securities. Common reasons:
- They hold positions through blind trusts, index funds, or mutual funds — none of which trigger STOCK Act reporting.
- They simply did not buy or sell anything over $1,000 in the period.
- They filed an annual report instead of a PTR (annual reports cover positions, not transactions, and are not parsed here).
The latest PTR ingested was filed May 15, 2026. New filings are ingested within ~24 hours of appearing in the House Clerk and Senate eFD portals.
How this compares to other trackers
The closest reference points are CapitolTrades and Quiver Quantitative. Both go back roughly three years; this site is currently focused on the active filing window.
For overlap members, the totals line up:
- Members with high filing frequency (Khanna, McCaul, Cisneros) match within a single PTR. When CapitolTrades shows newer trades than this site, the cause is a PTR posted within the last 24–48 hours that has not yet been ingested.
- For Senate members, the eFD portal serves trades as HTML tables, which we parse deterministically — no AI vision step. CapitolTrades publishes the same data with similar lag.
- Lifetime totals on third-party sites are larger because they cover three years; the per-month rate of trades and members is comparable.
If a trade is missing from this site that you can find on a primary source (House Clerk or Senate eFD), it is a bug. Open an issue with the document ID and I will fix it.
The law
The STOCK Act of 2012 (Pub. L. 112-105) requires members of Congress to disclose individual securities transactions over $1,000 within 30 days of being notified or 45 days of the trade — whichever is earlier (5 U.S.C. §13104). Filings go to the House Clerk or Senate Office of Public Records. The penalty for late filing is a $200 fee (5 U.S.C. §13106), routinely waived.
The pipeline
- Manifest fetch. The annual financial-disclosure ZIP at
disclosures-clerk.house.gov/public_disc/financial-pdfs/{year}FD.zipcontains an XML index of every filing. We diff against existingdisclosure_filings.doc_idto find new ones. - Bioguide resolution. Filers are listed by name and state-district, not bioguide ID. We resolve them against our members table by state + last name, falling back to district match for ambiguous cases.
- PDF parse. Each PTR PDF is base64-encoded and sent to Claude Sonnet via the Anthropic API as a document block. Claude returns one JSON row per transaction: owner, asset, ticker, type, date, amount range, capital-gains flag, plus a confidence score. Cost is roughly $0.10–$0.20 per filing — PDFs render to image tokens and most run several pages.
- Validation. Each row is checked against the canonical list of STOCK Act amount ranges and transaction types. Rows that fail validation or score below 0.8 confidence are held for human review and not surfaced until cleared.
- Late-filing math. A transaction is marked late if
tx_date + 45 days < filed_date. The 45-day mark is the hard statutory backstop.
What this is — and is not
This is a record of disclosed trades, not a judgment about them. Members of Congress legally trade individual stocks while serving. Every transaction on this site links to its source PDF. Nothing here stands without that link.
Visual choices
The site is organized around timelines because disclosure data is fundamentally temporal — when a trade happened, how often, in what clusters. Tables hide that structure. Time axes reveal it.
Marks: triangles point up for purchases, down for sales. Mark size maps to amount range on a log scale because filing values span four orders of magnitude. Late-filed trades carry an amber dot.
Known limitations
- Ranges, not exact amounts. All dollar values are statutory ranges. A row marked $1,001–$15,000 could be either end of that band.
- Senate uses a different parser. The Senate eFD portal serves trades as HTML tables, parsed deterministically. House PTRs are PDFs parsed with a vision model. Both feed the same downstream tables; no field is chamber-specific.
- PDF parsing is automated. Confidence below 0.8 holds a row in a review queue. A regression test set of hand-verified filings catches drift.
- No options, no derivatives. Reports include them but parsing currently focuses on common stock and ETFs.
AI transparency
The PDF-to-structured-row step uses Claude Sonnet via the Anthropic API. AI does not invent transactions or write editorial judgments. Every row links back to a government-filed PDF a human can open and verify.
Federal government documents carry no copyright (17 U.S.C. §105). For informational and journalism purposes only. Not investment advice.