Obscura

Congress Trades

Stock and asset trades disclosed by members of Congress and their households under the STOCK Act, parsed from House and Senate periodic transaction reports.

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

Category Government Columns 18 Refresh Daily Entity key ticker Point-in-time available_date

What one row means

One reported line-item transaction (one traded asset) within a single Periodic Transaction Report (PTR) filed by a member of Congress or their staff under the STOCK Act. A PTR lists every asset transaction a filer (or spouse/dependent) made in a covered period; each asset line becomes one row. Sourced today from the Senate eFD electronic PTR HTML tables (chamber is hardcoded "Senate"; House PDF filings are not yet scraped).

One row per (ptr_id, row_num).

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_trades: published: available_date = filing_date, the STOCK Act public-disclosure date (the day the PTR is posted on efdsearch.senate.gov).

Refresh cadence

Obscura refreshes congress_trades 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 — 18 columns

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

ColumnTypeDescription
ptr_idtext · not nullSenate eFD PTR report UUID, from the /search/view/ptr/{uuid}/ link; the join key back to the filing.
row_numinteger · not nullThe '#' line-item ordinal within the filing's transaction table.
chambertext · not nullLegislative chamber of the filer — currently always "Senate".
filer_nametextFull name of the filing member of Congress or covered staffer.
filer_roletextParenthetical filer role parsed from the eFD filer label (`data[i][2]`, e.g. "Peters, Gary (Senator)" → "Senator"): Senator / Candidate / Former Senator / covered staffer. The only signal distinguishing filer type, since `chamber` is hardcoded "Senate" and `filer_name` is rebuilt from name columns.
filing_datedateDate the PTR was posted on efdsearch.senate.gov — the STOCK Act public-disclosure filing date.
filed_timetimestamp with time zoneExact filing timestamp parsed from the PTR header ("Filed MM/DD/YYYY @ H:MM PM", US-Eastern wall clock, stored without tz shift): the intraday moment the disclosure became public, an event_time-grade refinement of the day-granular `filing_date`.
transaction_datedateThe trade's execution date as disclosed on the PTR (rehomed from the old, misused available_date). A period/event date, NOT when it became public.
available_datedatePUBLIC-availability date = filing_date (STOCK Act disclosure). DB-generated, read-only; the point-in-time column to filter/join on — NEVER the trade's execution date.
ownertextHousehold owner of the asset: Self / Spouse / Joint / Dependent Child.
tickertextExchange ticker of the traded security; NULL when the asset has none.
asset_nametextFree-text description of the traded asset as the filer wrote it.
asset_typetextAsset class disclosed on the PTR (ST = stock, Municipal Security, options, etc.).
transaction_typetextPurchase / Sale (full or partial) / Exchange.
amount_rangetextRaw disclosed dollar bucket exactly as printed, e.g. "$1,001 - $15,000".
amount_minbigintLower bound of amount_range in USD.
amount_maxbigintUpper bound of amount_range in USD; NULL for "Over $X" / "At least $X" buckets.
commenttextOptional free-text filer annotation from the PTR's final column.

Access congress_trades

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_trades",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the congress_trades dataset?

Stock and asset trades disclosed by members of Congress and their households under the STOCK Act, parsed from House and Senate periodic transaction reports. One reported line-item transaction (one traded asset) within a single Periodic Transaction Report (PTR) filed by a member of Congress or their staff under the STOCK Act. A PTR lists every asset transaction a filer (or spouse/dependent) made in a covered period; each asset line becomes one row. Sourced today from the Senate eFD electronic PTR HTML tables (chamber is hardcoded "Senate"; House PDF filings are not yet scraped).

How do I avoid look-ahead bias with congress_trades?

Filter on congress_trades.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — published: available_date = filing_date, the STOCK Act public-disclosure date (the day the PTR is posted on efdsearch.senate.gov). 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_trades?

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_trades". The column schema is public at https://api.obscura.trade/v1/catalog/congress_trades.

Can I filter congress_trades by company or symbol?

Yes. congress_trades carries ticker, the column the API's symbols filter resolves against.

How often is congress_trades updated?

Obscura refreshes congress_trades 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

Border CrossingsMonthly inbound crossings at U.S. land ports on the Canadian and Mexican borders, split by mode (trucks, trains, persona… Congress LeaderboardWhich members of Congress have done best on the stock purchases they disclose: one dollar-weighted, one-year-forward ret… 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.