How we score Congress stock trades

The performance figures on our Congress stock tracker and member pages are computed by us from public STOCK Act disclosures. This page is the complete method, including the parts that make the numbers smaller and less exciting than a naive calculation would. Last computed 2026-08-21.

The core measurement

Every disclosed stock purchase is measured over a fixed window of 365 days from its transaction date, using split- and dividend-adjusted closing prices. The same window is applied to SPY, and the difference is that trade’s excess return. A trade date that falls on a weekend or holiday maps to the first trading session on or after it.

The fixed window matters more than it looks. Measuring buy-to-today instead would score a 2013 purchase against a decade of index compounding and a 2024 purchase against one year, which systematically punishes older trades. It would also quietly reward whoever traded most recently. Every trade gets exactly one year, so every trade is comparable.

Which trades count

Purchases disclosed in the past five years (currently back to 2021-08-21), on a rolling basis. Trades from the most recent 12 months are excluded because their measurement window has not closed yet. Sales are not scored at all: disclosures report dollar brackets with no share counts, so a sale cannot be matched to the purchase it exits, and any profit math built on that matching would be invented.

Equal weighting, and why these are not returns

Disclosures state ranges like $1,001 to $15,000, not amounts. So every purchase counts once, equally, and we report the median excess return per member alongside the share of trades that beat SPY. No figure on this site is a portfolio return anyone actually earned, and pages that show these numbers say so. Trades executed by a spouse or dependent are counted, and the split between self or joint and spouse or dependent accounts is published per member, because attribution changes how a record should be read.

Delisted stocks stay in

When a stock stops trading inside its window (buyout, bankruptcy, delisting), the position is carried to its last traded close rather than dropped, as long as at least 30 days of trading elapsed. Dropping dead tickers is survivorship bias: the trades that went to zero are exactly the ones that make a record honest.

The ticker-reuse guard

Ticker symbols outlive companies. FB was Facebook until 2022 and was later reassigned to an unrelated company; APC was Anadarko until 2019. A naive price lookup silently scores the old trade against whichever company holds the symbol today. Our guard: if the first available trading session for a symbol sits more than 7 days after the trade date, the trade is excluded, because a real trade date is at worst a long weekend away from the next session. One limit we cannot detect: a symbol reassigned to a company that was already trading at the time slips through any date-based check.

Floors and suppression

A member needs at least 10 scored purchases to get a number, a ticker needs at least 5, and at least 70% of a member’s purchases must be priceable, because unpriceable tickers skew toward bad outcomes and scoring only the survivors would flatter the record. Members suppressed for coverage are named in the data file rather than silently dropped. Current output: 49 members and 270 tickers scored.

Sources and cadence

Trades come from public STOCK Act periodic transaction reports (House Clerk and Senate eFD), which arrive with up to a 45-day disclosure delay. Prices are Yahoo Finance adjusted closes. The whole dataset is recomputed daily after new disclosures land, and both the member pages and the per-stock pages read the same computed file, so the two can never disagree.

The full member table is downloadable as CSV. Free to reuse with attribution and a link. Questions about the data: [email protected].

Frequently asked questions

Is this the return a member of Congress actually earned?

No. STOCK Act disclosures give dollar ranges, not share counts, so nobody outside the member's brokerage can compute a real portfolio return. We score each disclosed purchase equally over a fixed 12-month window and report medians. It measures the quality of the trades, not the size of anyone's gains.

Why is a recent trade not scored?

Every purchase is measured over exactly 365 days. A trade made less than 12 months ago has an unfinished window, so it is excluded until the window closes. Scoring it early against a partial window would make recent trades incomparable to older ones.

Why compare against SPY instead of raw returns?

A purchase that gained 15% in a year when the S&P 500 gained 25% was a below-market pick. Measuring each trade against SPY over the same 365 days separates stock-picking skill from a rising market.

Why medians instead of averages?

One lucky moonshot can drag an average far away from what a member's typical trade did. The median is the middle trade, which is much harder for a single outlier to distort.

Nothing here is investment advice, and past trade performance does not predict future results.