Methodology
Every number on this site comes from filings members of Congress are legally required to make. Those filings are messier than the tidy tables built on top of them suggest. This page describes exactly what is done to them, and where the limits are.
Where the data comes from
The STOCK Act of 2012 requires members of the U.S. House and Senate to disclose securities transactions by themselves, their spouse, or their dependent children. Two separate sources publish them, and neither offers an API:
- House Clerk — an annual index of every filing plus one PDF per Periodic Transaction Report.
- Senate Office of Public Records — a search portal behind a terms-of-use agreement. Electronic filings render as HTML tables; paper filings are scanned images.
Filings are U.S. government works and carry no copyright. Every transaction on this site links to the exact document it was read from, so any figure here can be checked against the original.
How filings are parsed
House reports are parsed from the PDF using word geometry rather than extracted text. This matters more than it sounds: a long security name wraps inside its table cell while the date columns stay on the cell's first visual line, so in plain reading order the tail of one asset name appears after the next row's dates. Matching each ticker to the nearest date — the obvious approach — silently attributes symbols to the wrong trade, and only for the long names. Amount brackets wrap the same way.
Senate electronic filings parse from their HTML table directly. Paper filings in both chambers are images with no text at all; those are read by a vision model and flagged rather than presented as certain. Any row marked unverified should be checked against its source PDF before being relied on.
Rows that fail validation — a transaction dated after the filing that disclosed it, an impossible date, a missing amount — are quarantined rather than published. The count is reported below rather than hidden.
How returns are calculated
- Entry — the dividend- and split-adjusted closing price on the transaction date (the last close at or before it, so weekend dates resolve).
- Size — the midpoint of the disclosed bracket. Exact amounts are never disclosed, so every dollar figure on this site is an estimate.
- Benchmark — SPY total return over the identical window.
- Alpha — trade return minus benchmark return.
Alpha is the headline rather than raw return. Ranking members by raw return across a decade-long bull market mostly ranks who traded most and who traded during rising markets; benchmark-relative return is the number that survives that objection.
Aggregates cover purchases only. A sale's forward return means the opposite thing — a stock rising after a sale is a bad sale — so averaging buys and sells together produces a figure with no interpretation. A time horizon that has not yet elapsed is left empty, never truncated to today, since comparing a partial window against a full one manufactures outperformance.
Members need at least 10 purchases with a completed one-year window before they are ranked on alpha. Below that the number is noise.
What this data cannot tell you
- It is not timely. A trade may be disclosed up to 45 days after it happens. Nothing here is fast enough to act on; it is a public record, not a signal.
- Amounts are ranges. The narrowest bracket is $1,001–$15,000 and the widest is “over $50,000,000”. A member trading $15,000 and one trading $49,000 are indistinguishable in the filings.
- Many trades are not the member's. Disclosure covers the whole household. A large share of these transactions were made by a spouse, a dependent child, or an advisor with discretion the member does not exercise. Ownership is shown on every row and should not be collapsed.
- Not every asset is a stock. Treasuries, municipal bonds, mutual funds, options and private holdings all appear. Many have no ticker and therefore no return.
- Nothing here implies wrongdoing. Disclosure is the law working as designed. A well-timed trade is not evidence of anything on its own.
Current coverage
Rather than quietly dropping what could not be parsed, here is what the dataset does and does not contain as of Aug 8, 2026:
| Transactions published | 95,269 |
| Filings parsed | 10,415 |
| Members covered | 460 |
| With an identifiable ticker the rest are bonds, funds and private holdings | 63,000 (66%) |
| From machine-readable filings | 70,021 (73%) |
| Flagged for verification read from scanned or handwritten forms | 15,924 |
| Filings not yet parsed scanned images pending | 515 |
| With a completed 1-year return requires price history and an elapsed window | 0 |
| Unidentified filer names filings whose name matches no member on record | 2 |
Corrections
If a figure here disagrees with the filing it links to, the filing is right and this site is wrong. Errors of that kind are parser bugs and worth reporting.