Obscura

Congress Leaderboard

Which members of Congress have done best on the stock purchases they disclose: one dollar-weighted, one-year-forward return per member per disclosure year. Purchases are entered at the first close after the disclosure is public — never the trade date, so there is no look-ahead — and the fixed one-year horizon keeps the years comparable. A member-level score only: it is deliberately never broken out by security or by trade, and each row blends at least three purchases across at least three different companies.

congress_leaderboard — the dataset name to pass to the Obscura API.

Category Government Columns 9 Refresh Daily Entity key filer_name Point-in-time available_date

What one row means

One member of Congress's disclosed BUYING record for a single disclosure year, scored — a read-only `congress_leaderboard` MATERIALIZED VIEW over `congress_trades`. Every purchase the member disclosed that year is entered at the first adjusted close on or after the STOCK Act disclosure day and exited at the last adjusted close within the following 365 days; the per-purchase results are then blended, weighted by each purchase's disclosed dollar midpoint, into ONE return and ONE dollar figure for the member-year. Refreshed nightly by `RefreshGovernanceViews`. The row is the whole product: a member-level score, never a per-security or per-trade result. A group qualifies only with at least three disclosed purchases across at least three DISTINCT securities, which is what makes the published numbers an aggregate rather than a repackaged price series — with three or more unknown price ratios behind one published return, no individual security's move is recoverable from the row. The fixed one-year-forward horizon is what makes the years comparable: a 2021 cohort is not flattered by extra years of runway the way a hold-to-today measure would be.

One row per One row per (year, filer_name) — one member of Congress's disclosed buying record for one disclosure year. Never per security and never per trade..

Derived in-database from congress_trades, sharadar_sep.

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For congress_leaderboard: published: available_date = the latest trading session whose closing price the row consumes, i.e. max over the member's scored purchases of the session the one-year-forward exit is taken from. WHY: this is an AGGREGATE of two kinds of input, and a row is only publicly knowable once the LAST of them is public. The disclosures are the earlier input (a purchase is public the day the periodic transaction report is posted); the exit price is the later one, taken up to 365 days after that disclosure, so a row dated from the disclosures alone would claim to have been knowable up to a year before the prices it contains existed. Measured 2026-07-30, that error was 3 to 365 days (mean 337) on every one of the 336 rows, and m20260702_000212 corrects it. The disclosure-year cohort stays in `year`, so the roughly one-year gap between `year` and `available_date` is a real publication lag on a forward-looking measure, not a leak. Evidence class B — the rule is arithmetic over dates we hold and is re-derivable from the view definition and the two source tables; it inherits its floor from `congress_trades` availability. See docs/availability/congress_leaderboard.md.

Refresh cadence

Obscura refreshes congress_leaderboard daily — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 9 columns

The full public column list for congress_leaderboard, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/congress_leaderboard.

ColumnTypeDescription
yearinteger · not nullDisclosure-year cohort: the calendar year of the purchase disclosures being scored, taken from `congress_trades.available_date`. It is the COHORT label, not the row's availability — the scoring window runs a further year past it, which is why `available_date` is later. Part of the primary key.
filer_nametext · not nullName of the member of Congress (or covered filer) whose disclosed purchases this row scores, as reported on their periodic transaction reports. Part of the primary key.
chambertextLegislative chamber of the filer.
tradesbigintNumber of disclosed purchases scored into this row. At least 3 by construction: a group with fewer is not published at all.
tickersbigintNumber of DISTINCT securities those purchases span. At least 3 by construction — the floor that keeps the published return an aggregate across securities rather than one security's result under another name.
volumebigintTotal disclosed dollar volume bought, in USD: the sum of each purchase's disclosed amount-range midpoint. Derived from the disclosures alone.
weighted_returndouble precisionTHE LEADERBOARD MEASURE. Dollar-weighted one-year-forward return across every scored purchase, as a fraction (0.12 = +12%). Each purchase contributes its own forward return weighted by its disclosed dollar midpoint; the result is a single blended figure for the member-year across at least three securities.
est_gainbigintEstimated dollar gain across the scored purchases, in USD — `weighted_return` applied to `volume`. An estimate, not a realised PnL: the disclosures give dollar RANGES, not positions, and the exit is a fixed one-year horizon rather than the member's actual sale.
available_datedatePUBLIC-availability date = the latest session whose closing price this row consumes (the last one-year-forward exit across the member's scored purchases). The point-in-time column to filter/join on — NEVER `year`, which is the disclosure cohort and precedes this by up to a year.

Access congress_leaderboard

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="congress_leaderboard",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the congress_leaderboard dataset?

Which members of Congress have done best on the stock purchases they disclose: one dollar-weighted, one-year-forward return per member per disclosure year. Purchases are entered at the first close after the disclosure is public — never the trade date, so there is no look-ahead — and the fixed one-year horizon keeps the years comparable. A member-level score only: it is deliberately never broken out by security or by trade, and each row blends at least three purchases across at least three different companies. One member of Congress's disclosed BUYING record for a single disclosure year, scored — a read-only `congress_leaderboard` MATERIALIZED VIEW over `congress_trades`. Every purchase the member disclosed that year is entered at the first adjusted close on or after the STOCK Act disclosure day and exited at the last adjusted close within the following 365 days; the per-purchase results are then blended, weighted by each purchase's disclosed dollar midpoint, into ONE return and ONE dollar figure for the member-year. Refreshed nightly by `RefreshGovernanceViews`. The row is the whole product: a member-level score, never a per-security or per-trade result. A group qualifies only with at least three disclosed purchases across at least three DISTINCT securities, which is what makes the published numbers an aggregate rather than a repackaged price series — with three or more unknown price ratios behind one published return, no individual security's move is recoverable from the row. The fixed one-year-forward horizon is what makes the years comparable: a 2021 cohort is not flattered by extra years of runway the way a hold-to-today measure would be.

How do I avoid look-ahead bias with congress_leaderboard?

Filter on congress_leaderboard.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = the latest trading session whose closing price the row consumes, i.e. max over the member's scored purchases of the session the one-year-forward exit is taken from. WHY: this is an AGGREGATE of two kinds of input, and a row is only publicly knowable once the LAST of them is public. The disclosures are the earlier input (a purchase is public the day the periodic transaction report is posted); the exit price is the later one, taken up to 365 days after that disclosure, so a row dated from the disclosures alone would claim to have been knowable up to a year before the prices it contains existed. Measured 2026-07-30, that error was 3 to 365 days (mean 337) on every one of the 336 rows, and m20260702_000212 corrects it. The disclosure-year cohort stays in `year`, so the roughly one-year gap between `year` and `available_date` is a real publication lag on a forward-looking measure, not a leak. Evidence class B — the rule is arithmetic over dates we hold and is re-derivable from the view definition and the two source tables; it inherits its floor from `congress_trades` availability. See docs/availability/congress_leaderboard.md. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get congress_leaderboard?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="congress_leaderboard". The column schema is public at https://api.obscura.trade/v1/catalog/congress_leaderboard.

Can I filter congress_leaderboard by company or symbol?

Yes. congress_leaderboard carries filer_name, the column the API's symbols filter resolves against.

How often is congress_leaderboard updated?

Obscura refreshes congress_leaderboard on a daily schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

Congress TradesStock and asset trades disclosed by members of Congress and their households under the STOCK Act, parsed from House and … Border CrossingsMonthly inbound crossings at U.S. land ports on the Canadian and Mexican borders, split by mode (trucks, trains, persona… FEMA DisastersFederally declared disasters with type, location and dates, from FEMA. Government Contract TickersA crosswalk from federal-contract recipient names to ticker symbols, so government awards can be matched to public compa… GPR Index DailyThe daily Geopolitical Risk index of Caldara and Iacoviello, derived from newspaper coverage of geopolitical tension. GPR Index MonthlyThe monthly Geopolitical Risk index (Caldara and Iacoviello), with deeper history than the daily version. H-1B ApprovalsApproved H-1B visa petitions by employer, from USCIS. LEHD J2J FlowsJob-to-job worker flows from the Census LEHD program: how workers move between employers, industries and regions.