Sign up

Products

Status

Congressional Trades

Access US Congress & Senate trading disclosures and corporate PAC donations linked to public company leadership.

What's inside

FIRM's Congressional Trades product combines these datasets:

  • Congressional trading disclosures: trades that House and Senate members report under the STOCK Act in periodic transaction reports (PTRs), filterable by ticker. Two coverage sources: a realtime cross-ticker feed (provider=options_flow, the default) and a bulk alternative-data feed (provider=alternative_data).
  • US Congress roster: Live member list with trade counts per politician.
  • Corporate PAC donations: Campaign contributions from a company's corporate PAC to politicians, linked by ticker.

Real-world use: monitor what members of Congress trade in names you follow, line trades up against committee assignments and votes, and see where a company's PAC money goes.

Access

Note:

2 credits/call. Available in Starter and up.

Endpoints

MethodPathMCP toolDescription
GET/api/v3/intel/congressintel_congressRecent congressional trades, cross-ticker or for one ?ticker=. ?provider= picks the coverage source (options_flow, the default realtime feed, or alternative_data; with alternative_data, a ticker switches from the live cross-ticker feed to that ticker's history); ?limit= (1–500, default 50; the default options_flow feed returns at most 200 trades per call whatever limit asks for, while alternative_data returns up to 500). Each trade carries ticker, politician, party, chamber, transaction_type, amount (the disclosed range), transaction_date and reported_date. Returns {provider, ticker, items, count}.
GET/api/v3/intel/politiciansintel_politiciansUS Congress roster (House and Senate) with disclosed trade counts: bioguide_id, name, party, chamber, state, trade_count. Use it to resolve a name to a BioGuide ID before pulling trades. ?limit= (1–1000, default 100). Returns {items, count}.
GET/api/v3/intel/corporate_donors/{ticker}intel_corporate_donorsCorporate-PAC donations linked to the ticker's parent company: candidate_name, bioguide_id, company_committee, committee, amount, transaction_date, cycle. ?limit= (1–500, default 50). Returns {ticker, items, count}. When the source answers and holds no records for the company, items is empty and a note says so: many companies have no corporate PAC.

Disclosures are filed after the trade, so reported_date is later than transaction_date, and amount is the value range the member reported, not an exact figure. party is null when it is not known.

With provider=alternative_data and a ticker, trades come from a warehouse copy of the feed first (source: "warehouse:congressional-trades-archive"), and from the live feed only for a ticker the copy does not hold. The copy holds trades from 2025-05-20 onward, plus earlier history for some tickers from a one-time load. data_from (the oldest trade held for the ticker), history_floor, data_through, as_of and coverage_note say where it begins; older trades may exist at the source and are not included, so do not describe the answer as a member's complete history.

When the feed cannot be read, intel/congress, intel/politicians and intel/corporate_donors answer 503 with error: "upstream_unavailable" instead of an empty list, not billed, with an error_code such as upstream_dead_no_archive, archive_read_timeout or archive_read_failed and a Retry-After header. A 503 means the data could not be retrieved, not that nobody traded; see Alt-Data for the codes.

Examples

Bash: Recent congressional trades (all members)

Shell
curl -H "Authorization: Bearer $WEALTHNOW_API_KEY" \  "https://firm.wealthnow.io/api/v3/intel/congress?limit=25"

Response:

JSON
{  "ok": true,  "timestamp": "2026-09-24T14:32:18.123456+00:00",  "provider": "options_flow",  "ticker": null,  "items": [    {      "ticker": "NVDA",      "politician": "...",      "party": "...",      "chamber": "House",      "transaction_type": "Buy",      "amount": "$15,001 - $50,000",      "transaction_date": "2026-09-02",      "reported_date": "2026-09-19",      "issuer": "...",      "notes": ""    }  ],  "count": 1}

Python: Congressional trades + politicians roster

Python
import os, requests KEY = os.environ["WEALTHNOW_API_KEY"]headers = {"Authorization": f"Bearer {KEY}"} # Get recent congressional tradestrades = requests.get(    "https://firm.wealthnow.io/api/v3/intel/congress",    headers=headers,    timeout=30,).json()print(f"Latest trades: {trades['count']} items")print(trades["items"][:2]) # Get Congress roster with trade countscongress = requests.get(    "https://firm.wealthnow.io/api/v3/intel/politicians?limit=50",    headers=headers,    timeout=30,).json()print(f"Congress members: {congress['count']}")for member in congress["items"][:3]:    print(f"  {member['name']} ({member['chamber']}): {member.get('trade_count', 0)} trades") # Get corporate donations for a tickerdonors = requests.get(    "https://firm.wealthnow.io/api/v3/intel/corporate_donors/NVDA",    headers=headers,    timeout=30,).json()print(f"NVDA PAC donations: {donors['count']} recipients")print(donors["items"][:2])