Bosco Labs

Tools › Finance & SEC

Congress Stock Trades API: US House STOCK Act since 2014

On Apify Store

Get congress stock trades: every stock, option, fund and bond trade that members of the US House of Representatives disclose in their Periodic Transaction Reports (PTRs) under the STOCK Act, one clean row per transaction: member, state/district, filing date, trade date, days to disclose, owner (self, spouse, joint, child), ticker, asset type, purchase/sale/exchange and the amount range as numbers. Straight from the official filings of the Clerk of the House, with a link to the PTR PDF on every row. For investors, journalists and AI agents tracking congressional trading. Pricing: $1.80 per 1,000 trades ($0.0018 per trade), no start fee. You only pay for trades delivered, and the Actor stops at your max charge limit.

Price$0.0018 per trade
DomainFinance & SEC
Call itApify API or MCP

Pricing: $1.80 per 1,000 trades ($0.0018 per trade), no start fee. You only pay for trades delivered, and the Actor stops at your max charge limit.

Questions agents ask

  • “Which options did Nancy Pelosi's household trade in 2025, and how many days after the trade were they disclosed?”
  • “Which House members disclosed NVDA trades in the last 30 days?”
  • “List House trades over $1 million filed in 2024.”

Example

Input

{ "members": ["Pelosi"], "years": ["2024", "2025"], "transactionTypes": ["purchase"], "maxResults": 500 }

Output

{
  "schema_version": "1",
  "transaction_id": "20033337-1",
  "member_name": "Nancy Pelosi",
  "first_name": "Nancy",
  "last_name": "Pelosi",
  "state_district": "CA11",
  "state": "CA",
  "filing_date": "2025-10-24",
  "transaction_date": "2025-10-22",
  "notification_date": "2025-10-22",
  "days_to_disclose": 2,
  "owner": "SP",
  "ticker": "AAPL",
  "asset_description": "Apple Inc. - Common Stock (AAPL) [ST]",
  "asset_type": "stock",
  "asset_type_code": "ST",
  "option_type": null,
  "transaction_type": "sale",
  "is_partial": true,
  "amount_min": 100001,
  "amount_max": 250000,
  "amount_text": "$100,001 - $250,000",
  "is_amendment": false,
  "doc_id": "20033337",
  "pdf_url": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2025/20033337.pdf",
  "source_url": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2025/20033337.pdf",
  "retrieved_at": "2026-11-05T16:38:21+00:00"
}

What you get

FieldTypeMeaning
schema_versionstringOutput schema version.
transaction_idstringdoc_id + position of the transaction in the PTR, e.g. 20035553-1. Stable across runs.
member_namestringFirst name, last name and suffix as listed in the Clerk's index.
first_namestringFirst name as listed in the Clerk's index.
last_namestringLast name as listed in the Clerk's index.
state_districtstring | nullState and district as listed in the index, e.g. CA11.
statestring | nullTwo-letter state code, the first two characters of state_district.
filing_datestringDate the PTR was filed (YYYY-MM-DD): when the trade became public.
transaction_datestringTrade date as reported (YYYY-MM-DD).
notification_datestringDate the member was notified of the trade, as reported (YYYY-MM-DD).
days_to_discloseintegerfiling_date - transaction_date in days. For amendments this counts to the amendment, not the first filing.
ownerstring | nullOwner code as filed: SP = spouse, JT = joint, DC = dependent child, null = the member.
tickerstring | nullTicker as filed in parentheses in the asset text, upper-cased; null when the filing gives none.
asset_descriptionstringAsset text as filed (older PDFs garble upper/lower case).
asset_typestring | nullFrom asset_type_code: ST = stock, OP = option, EF/MF = fund, GS/CS = bond, other codes = other. Filings before ~2018 have no code: option if the description says so, else null.
asset_type_codestring | nullThe Clerk's asset type code in square brackets, e.g. ST, OP, EF, GS (see fd.house.gov/reference/asset-type-codes.aspx).
option_typestring | nullcall or put, from the transaction description, for options only.
transaction_typestringP = purchase, S / S (partial) = sale, E = exchange.
is_partialbooleanTrue for a partial sale (S (partial)).
amount_minnumber | nullLower bound of the reported value range in USD, e.g. 15001; the value itself when the filer reported an exact amount (e.g. 318.74).
amount_maxnumber | nullUpper bound of the reported value range in USD; null for 'Over $50,000,000' and 'Spouse/DC Over $1,000,000'.
amount_textstringThe value range (or exact value) as filed, e.g. $15,001 - $50,000.
is_amendmentbooleanTrue when the transaction's filing status is Amended: the filing date is then not when the trade first became public.
doc_idstringThe Clerk's document (filing) ID.
pdf_urlstringThe PTR PDF on disclosures-clerk.house.gov.
source_urlstringWhere the row was extracted from (the PTR PDF).
retrieved_atstringUTC time the PDF was fetched and parsed.

Coverage

Periodic Transaction Reports of House members filed online, from January 2014 to the latest update of the Clerk's index. Scanned paper PTRs are skipped (their PDF links are listed in the run's SUMMARY record). The Senate and annual financial disclosure reports are not included.

Use with AI agents (MCP)

Add this URL to your MCP client (Claude, Cursor, VS Code, ...) to load the Actor as a tool through the Apify hosted MCP server. It signs you in with OAuth or accepts Authorization: Bearer <APIFY_TOKEN>.

https://mcp.apify.com?tools=bosco_labs/us-house-trades

For “Which options did Nancy Pelosi's household trade in 2025, and how many days after the trade were they disclosed?” the agent passes:

{"members": ["Pelosi"], "years": ["2025"]}

stable, typed JSON, one row per transaction. Every row has schema_version and a source_url pointing to the PTR PDF on the Clerk's site, so the agent can cite its source. House only: Senate trades are not included.

Or call the Apify API: POST https://api.apify.com/v2/acts/bosco_labs~us-house-trades/run-sync-get-dataset-items with the input as JSON body. Cost: $0.0018 per trade.

Input fields

FieldTypeMeaning
membersarrayCase-insensitive part of the member's name as listed by the Clerk, e.g. ["Pelosi"] or ["Josh Gottheimer"]. Empty = all House members.
tickersarrayOnly trades whose filing names one of these tickers, e.g. ["NVDA", "MSFT", "BRK.B"]. Trades without a ticker in the filing are left out when this is set. Empty = all.
transactionTypesarrayAny of purchase, sale (full or partial), exchange, e.g. ["purchase"]. Default all three.
filedFromstringEarliest filing date (when the trade became public), YYYY-MM-DD, e.g. "2025-01-01". Empty = 365 days ago when members is set, else 30 days ago; ignored when years is set without dates.
filedTostringLatest filing date, YYYY-MM-DD, e.g. "2025-12-31". Empty = today.
yearsarrayWhole filing years to load, as strings, e.g. ["2024", "2025"] (one Clerk index per year; online PTRs start in 2014). Without dates, returns those whole years. Use this or filedFrom for history.
minAmountUsdintegerOnly trades whose reported range starts at or above this USD amount, e.g. 15001 leaves out the smallest $1,001 - $15,000 range, 1000001 keeps trades over $1 million. Empty = no minimum.
maxResultsintegerMaximum trades, newest filings first, e.g. 500. Default 100. You pay per trade returned.
onlyNewSinceLastRunbooleantrue = skip (and don't charge for) trades an earlier run with the same filters already delivered. For scheduled runs. Default false. Remembered in a named key-value store in your account.

Sources, licence and limits

Which filings are covered? Periodic Transaction Reports of House members filed online, from January 2014 to the latest update of the Clerk's index. Annual financial disclosure reports and the Senate are not included.

What about paper filings? Some PTRs are scanned paper forms (about 12% in 2026, more than half in 2014). They have no text, so they are skipped rather than guessed; the run log and the SUMMARY record list their PDF links so you can read them yourself.

Why is the ticker empty? The ticker is taken only from the filing, when the member wrote it in parentheses. Bonds, Treasury bills, private funds and many older filings have none. Nothing is looked up or guessed.

Why is asset_type empty on old rows? Filings before about 2018 carry no asset type code. Options are still recognised from their description; other rows stay null.

Amendments? is_amendment is true when the transaction was filed as an amendment. Its filing_date is the amendment's date, not when the trade first became public, so days_to_disclose overstates the delay for those rows.

Why upper/lower case oddities? Some older PDFs garble the case of the asset text (e.g. (bAbA)). asset_description is kept as filed; ticker is upper-cased.

How fresh? As fresh as the Clerk's yearly index, which is regenerated regularly: the copy fetched on 2026-11-05 was dated 2026-11-04 and listed filings up to 2026-11-03.

Is this trading advice? No. This is a copy of public disclosures, with ranges instead of exact amounts and trades that become public weeks after they happen.

Legal? These are public disclosures published by the Clerk under the STOCK Act. Users are responsible for complying with applicable law on the use of these disclosures, including 5 U.S.C. 13107.