The page behind this dialog is live. Create a free account or sign in and you'll land right back on it.
Every trade you see comes from the official Periodic Transaction Reports members of Congress are required to file under the STOCK Act. We pull the filings directly from the two government source-of-record systems — no third-party aggregator. This page documents the pipeline so you can verify rather than trust.
PTR filings are parsed directly from the government’s source-of-record systems. Every row in our trade tables links back to the original filing on whichever government site it came from, so any data point can be verified end-to-end.
New filings are ingested into the pipeline within hours of being posted. The hero timestamp on the landing page tells you the most recent filing date and the most recent tradedate we’ve parsed.
The STOCK Act gives members up to 30 days from when they learn of a trade and an additional 15 days to file — meaning a trade dated today may legally take up to 45 days to appear in any disclosure. That delay is structural and applies equally to every tracker. Trades disclosed past the 45-day window are flagged as LATE.
The STOCK Act only requires the filer to disclose the amount of a trade in pre-defined brackets — $1,001–$15,000, $15,001–$50,000, $50,001–$100,000, and so on up to over $50,000,000.
We store both the lower and upper bound exactly as filed. When we need a single number for ranking (volume, total notional, etc.) we use the bracket midpoint — the industry-standard convention. That means our “volume” figures are estimates, not exact, and the open-ended top bracket is treated as its lower bound only.
A conflict signal fires when a member trades a stock their committee holds policy jurisdiction over, or one covered by a bill they have sponsored. Committee membership is parsed from the official rosters (the House Clerk’s member data and senate.gov committee files), and each committee’s jurisdiction is mapped to market sectors by our own curated registry, cited to House Rule X and Senate Rule XXV clause by clause. The mapping is deliberately narrow: committees whose reach is everything — Appropriations, Budget, Rules, Oversight — flag nothing on membership alone. Severity is scored by the size of the trade (using the midpoint of the disclosed amount bracket):
A conflict signal is not an accusation of insider trading or any other wrongdoing. Members may have placed the trade through an advisor or a blind trust, may not have been aware of the relevant bill, or may have traded for reasons unrelated to it. Signals are a starting point for investigation, not an endpoint.
The 0–100 letter-graded score on each politician’s profile and on the Most Active leaderboard. High = good: transparent (files PTRs on time), active enough to score (≥10 trades trailing 12 months), and low conflict overlap with bills the member’s committee touches.
Headline composite— three percentile-ranked axes, weighted:
Radar drill-downon each profile adds two axes that don’t enter the headline:
Why alpha is not in the headline: performance is intentionally segregated. The bracket-midpoint convention loses precision relative to a hypothetical exact-amount filing, and conflating “transparent” with “good investor” would invite confusion.
Letter banding — A 85–100 · B 70–84 · C 55–69 · D 40–54 · F <40
Politicians with fewer than 10 disclosed trades trailing 12 months don’t get a score. Percentile rank over a thin sample isn’t meaningful, and the alternative (assigning a default) would mislead. Profiles below the threshold show an “Insufficient activity” pill.
A member’s estimated net worth is their disclosed assets minus their disclosed liabilities, both taken from the most recent annual financial disclosure we have parsed. Schedule A reports each asset in a statutory value bracket, and Schedule D reports each liability the same way — never exact dollar amounts. We sum bracket lower and upper bounds separately, then compute the net range conservatively: the floor is the assets floor minus the liabilities ceiling; the ceiling is the assets ceiling minus the liabilities floor. A heavily leveraged member can honestly show a negative floor.
The result is always displayed as a min–max range. When a single number is needed — ranking the net worth leaderboard — we use the midpoint of that range, consistent with the bracket-midpoint convention used everywhere else on this page. Assets a member is not required to itemize (the federal salary, a personal residence that produces no rental income, assets below reporting thresholds) never enter the estimate, so the true figure is usually higher than the disclosed range.
Coverage today: House annual disclosures are parsed first-hand from the House Clerk’s systems. Senate annual reports live on a separate portal (efdsearch.senate.gov) and their parser is in progress — Senate members join the net-worth surfaces once their filings are ingested. A member whose most recent parsed filing is older than the latest completed disclosure cycle is flagged AGED rather than silently presented as current.
The backtester simulates following disclosed congressional buys — or fading disclosed sells, in which case each trade’s return is inverted — over a holding period you choose. Entry is the daily closing price nearest the reported trade date; exit is the close nearest the end of the selected holding period. Each simulated position is sized at the midpoint of the disclosed amount bracket.
The benchmark is SPYmeasured over the identical entry and exit windows, trade by trade; alpha is the average trade return minus the average SPY return. Each run analyzes up to the 500 most recent trades matching your filters (defaulting to the trailing twelve months), priced across up to 50 tickers from that sample. Trades without daily-bar price history are excluded — the “Trades analyzed” cell shows priced vs matching counts so coverage is never hidden.
Member returns are computed from a full reconstruction of disclosed trading, not buys alone. Each disclosed purchase opens a position sized at its bracket midpoint and converted to shares at the trade-date price. Disclosed sales close positions first-in-first-out at the sale-date price: a “Sale (Full)” closes the member’s entire reconstructed position in that ticker, a partial sale closes the midpoint-implied share count. A sold position keeps its exit value — later price moves no longer affect it. Positions still open are marked at the latest daily close.
A window return (YTD, trailing 12 months, trailing 3 years) is dollar-weighted over the positions opened in that window. Alpha is measured against a SPY counterfactual holding the same dollars over the same dates— the benchmark enters at each position’s open and exits at its sale (or the as-of date) — so a member can’t look brilliant just for having bought in a strong month. The plain calendar-YTD SPY return is shown alongside for context. Prices come from our own daily bar history; the computation refreshes daily.
Sales that cannot be matched to a disclosed purchase — the position was opened before the 3-year reconstruction window — are counted and reported, never guessed at. Assets that can’t be priced from daily bars (delisted or unresolvable tickers) are excluded and disclosed in the coverage counts. Members without a computed record are omitted rather than shown at zero. The “Reconstructed portfolio” table on a profile is this same reconstruction’s open positions — estimates by construction, not brokerage records.
Found something that looks wrong? File the trade ID and source filing URL — we’ll trace it.