Skip to content

Congressional Trading API

Retrieve stock trading activity from US House Representatives and Senators disclosed under the STOCK Act. House and Senate trades are served by separate endpoints with an identical schema.

GET /v2/congress/house/{symbol}
GET /v2/congress/senate/{symbol}

The API supports multiple authentication methods:

Method Example
Bearer token (recommended) Authorization: Bearer YOUR_API_KEY
X-API-Key header X-API-Key: YOUR_API_KEY
Query parameter ?apiKey=YOUR_API_KEY
Legacy query parameter ?token=YOUR_API_KEY
Parameter Type Required Description
symbol string Yes Stock ticker symbol (e.g., AAPL, NVDA)
Parameter Type Required Description
startDate string No Start date (YYYY-MM-DD)
endDate string No End date (YYYY-MM-DD)
limit integer No Maximum number of results to return

startDate and endDate filter on the transaction date, not on disclosureDate. A trade executed inside the window is returned even if it was disclosed after endDate.

from finbrain import FinBrainClient
fb = FinBrainClient(api_key="YOUR_API_KEY")
house_df = fb.house_trades.ticker("NVDA",
date_from="2025-01-01",
date_to="2025-06-30",
as_dataframe=True)
senate_df = fb.senate_trades.ticker("NVDA",
date_from="2025-01-01",
date_to="2025-06-30",
as_dataframe=True)
print(house_df)
print(senate_df)
{
"success": true,
"data": {
"symbol": "AAPL",
"name": "Apple Inc.",
"chamber": "house",
"trades": [
{
"date": "2025-11-24",
"politician": "Debbie Dingell",
"transactionType": "Sale",
"amount": "$50,001 - $100,000",
"owner": "SELF",
"amountRaw": null,
"amountFlag": null,
"disclosureDate": "2025-12-16"
},
{
"date": "2024-03-11",
"politician": "Debbie Dingell",
"transactionType": "Purchase",
"amount": "$1,001 - $15,000",
"owner": "SP",
"amountRaw": "$1,001-15,000",
"amountFlag": null,
"disclosureDate": "2024-04-05"
}
]
},
"meta": {
"timestamp": "2026-01-19T15:06:31.764Z"
}
}

The Senate endpoint returns the same structure with "chamber": "senate".

Field Type Description
success boolean Whether the request was successful
data.symbol string Stock ticker symbol
data.name string Company name
data.chamber string Congressional chamber (house or senate)
data.trades array Array of trade objects
meta.timestamp string Response timestamp (ISO 8601)
Field Type Description
date string Transaction date (YYYY-MM-DD)
politician string Name of the House or Senate member
transactionType string Transaction type (Purchase or Sale)
amount string Transaction amount (exact value or range), normalized to the statutory STOCK Act brackets where possible — see Amount Ranges
owner string or null Beneficial owner of the account: SELF (the member’s own account), SP (spouse), DC (dependent child), JT (joint), or a member-specific account code. Senate filings that leave the owner column blank report UNKNOWN; House filings that leave it blank report SELF, per the House PTR-form instructions
amountRaw string or null The amount string as originally filed — set only when amount was rewritten to a canonical bracket, null when the filed value was already canonical
amountFlag string or null null on clean rows; review when the filed amount was unusable, ambiguous when it had two defensible readings (in both cases amount keeps the raw string as filed)
disclosureDate string or null Date the trade was publicly disclosed in the periodic transaction report (YYYY-MM-DD). The STOCK Act allows up to 45 days, so this is the correct point-in-time anchor for backtesting. Nullable, but nulls are rare — historical rows were backfilled

amount is normalized to the statutory STOCK Act brackets below whenever the filed string is an unambiguous formatting variant of one; the original filed string is preserved in amountRaw. Open-ended filing categories ("Over $1,000,000", "Under $1,000", "Over $50,000,000") and exact values are kept as filed. A filing whose amount could not be read reports amount as "Unknown" with amountFlag set to review.

Range Min Max
$1,001 - $15,000 $1,001 $15,000
$15,001 - $50,000 $15,001 $50,000
$50,001 - $100,000 $50,001 $100,000
$100,001 - $250,000 $100,001 $250,000
$250,001 - $500,000 $250,001 $500,000
$500,001 - $1,000,000 $500,001 $1,000,000
$1,000,001 - $5,000,000 $1,000,001 $5,000,000
Over $5,000,000 $5,000,001 N/A
Code Error Description
400 Bad Request Invalid symbol
401 Unauthorized Invalid or missing API key
403 Forbidden Authenticated, but not authorized to access this resource
404 Not Found Ticker not found
429 Too Many Requests Rate limit exceeded — wait and retry
500 Internal Server Error Server-side error