list_congress_trades
Find congressional STOCK Act trades by ticker, politician, party, state, transaction type, amount, and date range. Returns paginated House reports, newest disclosed first, with amount ranges and disclosure lag.
Instructions
Query congressional STOCK Act trades (Free+, plan-clamped disclosure window). Returns a paginated JSON list of congressional periodic-transaction-report trades, most recently DISCLOSED first, with non-superseded rows only (amended-away rows never appear). COVERAGE — HOUSE ONLY TODAY: every trade in this dataset comes from the U.S. House Clerk's PTR index. Senate eFD (efdsearch.senate.gov) returns 403 to datacenter traffic, so no Senate filings are ingested yet. chamber=Senate remains a valid filter but matches nothing and returns the response header X-Coverage-Note: chamber-not-covered, so an empty result is never ambiguous. Scanning by chamber should treat that header as "not covered", not as "no trades". PLAN-CLAMPED WINDOW: this endpoint is open to every plan, but how far back you can see is clamped on disclosureDate — Free sees only trades disclosed in the last 30 days, Starter the last 366 days, Pro/Business/Enterprise unlimited history. Passing an older disclosure_date_from than your plan allows does not extend the window — the floor always wins. Filters: ticker, politician (bioguideId, exact), party (free-text, case-insensitive exact match — not a fixed enum), chamber (House|Senate — see the coverage note above), state (2-letter code), transaction_type (purchase|sale|partial_sale|exchange), min_amount (range-aware — matches AmountLow >= value, never a fabricated midpoint), transaction_date_from/to, disclosure_date_from/to. Every row always carries BOTH amountLow and amountHigh (STOCK Act discloses ranges, never exact figures) and disclosureLagDays = (disclosureDate - transactionDate) — the STOCK Act allows up to 45 days of lag, so "real-time" here means minutes-after-disclosure, not minutes-after-trade. For per-politician or per-ticker rollups use GET /v1/congress/politicians, /v1/congress/politicians/{idOrSlug}, or /v1/congress/tickers/{ticker} (all Pro+). Query runs live against the database — no caching.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. Defaults to 1. | |
| party | No | Party as disclosed by the source, case-insensitive exact match (e.g. "D", "R", "Democratic"). Free-text — not a fixed enum, so this matches whatever string the source reported. | |
| state | No | Two-letter US state/territory code, case-insensitive exact match (e.g. "CA"). | |
| ticker | No | Ticker symbol, case-insensitive exact match (e.g. "AAPL"). | |
| chamber | No | "House" or "Senate", case-insensitive. COVERAGE: this dataset currently holds House PTRs only — Senate eFD blocks datacenter traffic, so chamber=Senate is a valid filter over data we do not yet have and returns an empty array with the response header X-Coverage-Note: chamber-not-covered. | |
| per_page | No | Trades per page. Defaults to 100, maximum 500. | |
| min_amount | No | Minimum disclosed amount, range-aware: matches trades whose AmountLow >= this value. Never matched against a fabricated midpoint — see the amountLow/amountHigh honesty rule. | |
| politician | No | Politician's bioguide ID, exact match (e.g. "P000197"). | |
| transaction_type | No | "purchase", "sale", "partial_sale", or "exchange", case-insensitive. | |
| disclosure_date_to | No | Inclusive end of the disclosure-date window, format YYYY-MM-DD. | |
| transaction_date_to | No | Inclusive end of the transaction-date window, format YYYY-MM-DD. | |
| disclosure_date_from | No | Inclusive start of the disclosure-date window, format YYYY-MM-DD. Subject to the plan-clamped floor below — a Free/Starter caller cannot page back further than their plan allows even by passing an older date here. | |
| transaction_date_from | No | Inclusive start of the transaction-date window, format YYYY-MM-DD. |