Congress Stock Trades API: Disclosures to Structured JSON
Query US Congressional stock trades as an API. Give it a member name, a ticker, or a date range and get one clean JSON row per disclosed transaction from House and Senate Periodic Transaction Reports (PTRs), with the member, chamber, asset, transaction type, amount bracket, and filing IDs already parsed out of the source PDFs.
When to use this skill
- The user wants a congress stock trades api or asks how to query congressional trades programmatically.
- They want a member's disclosed trades (for example "every Pelosi trade in 2024") as JSON or CSV.
- They want every member who traded a specific ticker, or all filings in a date range.
- They are collecting data for journalism, academic research, or a transparency dataset.
Not for: real-time trade signals (filings trail trades by 30 to 45 days by law), exact dollar amounts (members file brackets, not values), or investment recommendations (this is public-records data collection, not advice).
What you get (one row per transaction)
id (stable row identifier), First_Name, Last_Name, House (House or Senate), State_District, Ticker (blank when the asset is not publicly listed), Asset, Asset_Type_Code, Transaction_Type (P, S, S (partial), E), Amount_Range (the filed bracket, such as "$1,001 - $15,000"), Date (transaction date), Notification_Date, Year, Details (free text, for example option strikes when present), Capital_Gains_Over_200 (often blank), Filing_ID, DocID, PDF_Quality (text or image source filing), created_at, and a search_metadata object echoing the query (max_results, search_timestamp, total_results_found, query_execution_time).
Prerequisites
The Actor
Run it with the Apify CLI
One member over a date range:
apify actors call "johnvc/us-congress-financial-disclosures-and-stock-trading-data" -i '{"Last_Name":"Pelosi","Start_Date":"2024-01-01","End_Date":"2024-12-31","Max_Results":100}' \
--json \
--user-agent apify-awesome-skills/apify-congress-stock-trades-api \
2>/dev/null
Every member who traded one ticker:
apify actors call "johnvc/us-congress-financial-disclosures-and-stock-trading-data" -i '{"Stock_Symbol":"NVDA","Max_Results":200}' \
--json \
--user-agent apify-awesome-skills/apify-congress-stock-trades-api \
2>/dev/null
Every call carries the three flags this repo expects: --json, --user-agent apify-awesome-skills/apify-congress-stock-trades-api, and 2>/dev/null.
Run it from Claude or another AI agent (MCP)
The Actor is MCP-ready. Add the hosted server URL:
https://mcp.apify.com/?tools=actors,docs,johnvc/us-congress-financial-disclosures-and-stock-trading-data
Then ask, for example: "Pull every disclosed Congress trade in NVDA this year and export the rows as JSON." MCP setup docs: https://docs.apify.com/platform/integrations/mcp
Workflow
- Pick the filter. All inputs are optional; run with none to get the most recent filings. Narrow by
First_Name plus Last_Name (case-insensitive partial match), Stock_Symbol, or a Start_Date and End_Date range in YYYY-MM-DD.
- Bound the volume.
Max_Results caps rows returned (1 to 1000, default 100). Start at 50 to 100 for a member query; a single ticker across all of Congress is usually well under 200 rows.
- Estimate cost, then confirm with the user if the run is large. See
references/gotchas.md.
- Run the Actor and read the dataset. Deliver rows as JSON or CSV, or hand back the dataset link.
- Post-process. Filter
Asset_Type_Code for stock-only rows, Transaction_Type for purchases or sales, and dedupe across runs on id.
Inputs
First_Name (string): member first name, case-insensitive partial match
Last_Name (string): member last name, case-insensitive partial match
Stock_Symbol (string): ticker filter, for example AAPL or NVDA, partial match
Start_Date and End_Date (string, YYYY-MM-DD): inclusive transaction date range
Date_Reported (string, YYYY-MM-DD): exact transaction date, use the range instead for most queries
Max_Results (integer, 1 to 1000, default 100): cap on rows returned
Cost
Billing is per transaction returned plus a small per-run start fee. A 100-row member query is about $0.19 on the free tier; a full 1000-row pull is about $1.91. Volume tiers lower the per-transaction price. Estimate first and confirm large runs; live prices are in references/gotchas.md.
Honest limits
- Filings trail the actual trades by 30 to 45 days (the STOCK Act reporting deadline), so this is a research dataset, not a live feed.
Amount_Range is a bracket exactly as filed; no exact dollar values exist anywhere in the source.
Ticker is blank for unlisted assets (private funds, real estate, treasuries).
Asset_Type_Code carries more codes than the common ST, OP, MF, BD, ET, CT set; treat it as an open vocabulary.
- Rows where
PDF_Quality is "image" came from scanned filings read by OCR; spot-check those against the source PDF via Filing_ID when a number matters.
- This skill collects public disclosure records. It does not evaluate, recommend, or time trades.
Troubleshooting
- Empty dataset: check the name spelling (partial match still needs the right letters), widen the date range, or drop the ticker filter.
- Fewer rows than
Max_Results: normal; the filters matched fewer filings.
- A member seems missing: very recent trades may simply not be filed yet; the deadline is 30 to 45 days.
- Odd rows for a common last name: partial matching can catch multiple members; add
First_Name.
See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.
Related financial-data Actors
1---2name: apify-congress-stock-trades-api3description: Pull US Congressional stock trades and financial disclosures as structured JSON with the Apify Congress Financial Disclosures and Stock Trades Actor (johnvc/us-congress-financial-disclosures-and-stock-trading-data). Filter Periodic Transaction Reports from the House and Senate by member name, ticker, or date range and get one row per transaction with Ticker, Asset, Transaction_Type, Amount_Range, Date, House, State_District, and Filing_ID. Use when the user wants a congress stock trades api, wants to scrape congressional financial disclosures, export House or Senate stock trades to JSON or CSV, pull a member's disclosed trades, look up which members traded a ticker, or build a congressional trading dataset for research. Pay-per-transaction billing, MCP-ready for Claude and other AI agents.4license: MIT5---67# Congress Stock Trades API: Disclosures to Structured JSON89Query US Congressional stock trades as an API. Give it a member name, a ticker, or a date range and get one clean JSON row per disclosed transaction from House and Senate Periodic Transaction Reports (PTRs), with the member, chamber, asset, transaction type, amount bracket, and filing IDs already parsed out of the source PDFs.1011## When to use this skill1213- The user wants a congress stock trades api or asks how to query congressional trades programmatically.14- They want a member's disclosed trades (for example "every Pelosi trade in 2024") as JSON or CSV.15- They want every member who traded a specific ticker, or all filings in a date range.16- They are collecting data for journalism, academic research, or a transparency dataset.1718Not for: real-time trade signals (filings trail trades by 30 to 45 days by law), exact dollar amounts (members file brackets, not values), or investment recommendations (this is public-records data collection, not advice).1920## What you get (one row per transaction)2122`id` (stable row identifier), `First_Name`, `Last_Name`, `House` (House or Senate), `State_District`, `Ticker` (blank when the asset is not publicly listed), `Asset`, `Asset_Type_Code`, `Transaction_Type` (P, S, S (partial), E), `Amount_Range` (the filed bracket, such as "$1,001 - $15,000"), `Date` (transaction date), `Notification_Date`, `Year`, `Details` (free text, for example option strikes when present), `Capital_Gains_Over_200` (often blank), `Filing_ID`, `DocID`, `PDF_Quality` (text or image source filing), `created_at`, and a `search_metadata` object echoing the query (`max_results`, `search_timestamp`, `total_results_found`, `query_execution_time`).2324## Prerequisites2526- Apify account (sign up at https://apify.com?fpr=9n7kx3&fp_sid=skillrepo).27- Authentication via `apify login`, or an `APIFY_TOKEN` environment variable (Apify Console, Settings, Integrations).2829## The Actor3031- Store page: https://apify.com/johnvc/us-congress-financial-disclosures-and-stock-trading-data?fpr=9n7kx3&fp_sid=skillrepo32- Actor ID: `johnvc/us-congress-financial-disclosures-and-stock-trading-data`33- Pricing: pay per transaction returned, plus a small per-run start fee (see `references/gotchas.md`).3435## Run it with the Apify CLI3637One member over a date range:3839```bash40apify actors call "johnvc/us-congress-financial-disclosures-and-stock-trading-data" -i '{"Last_Name":"Pelosi","Start_Date":"2024-01-01","End_Date":"2024-12-31","Max_Results":100}' \41 --json \42 --user-agent apify-awesome-skills/apify-congress-stock-trades-api \43 2>/dev/null44```4546Every member who traded one ticker:4748```bash49apify actors call "johnvc/us-congress-financial-disclosures-and-stock-trading-data" -i '{"Stock_Symbol":"NVDA","Max_Results":200}' \50 --json \51 --user-agent apify-awesome-skills/apify-congress-stock-trades-api \52 2>/dev/null53```5455Every call carries the three flags this repo expects: `--json`, `--user-agent apify-awesome-skills/apify-congress-stock-trades-api`, and `2>/dev/null`.5657## Run it from Claude or another AI agent (MCP)5859The Actor is MCP-ready. Add the hosted server URL:6061`https://mcp.apify.com/?tools=actors,docs,johnvc/us-congress-financial-disclosures-and-stock-trading-data`6263Then ask, for example: "Pull every disclosed Congress trade in NVDA this year and export the rows as JSON." MCP setup docs: https://docs.apify.com/platform/integrations/mcp6465## Workflow66671. Pick the filter. All inputs are optional; run with none to get the most recent filings. Narrow by `First_Name` plus `Last_Name` (case-insensitive partial match), `Stock_Symbol`, or a `Start_Date` and `End_Date` range in YYYY-MM-DD.682. Bound the volume. `Max_Results` caps rows returned (1 to 1000, default 100). Start at 50 to 100 for a member query; a single ticker across all of Congress is usually well under 200 rows.693. Estimate cost, then confirm with the user if the run is large. See `references/gotchas.md`.704. Run the Actor and read the dataset. Deliver rows as JSON or CSV, or hand back the dataset link.715. Post-process. Filter `Asset_Type_Code` for stock-only rows, `Transaction_Type` for purchases or sales, and dedupe across runs on `id`.7273## Inputs7475- `First_Name` (string): member first name, case-insensitive partial match76- `Last_Name` (string): member last name, case-insensitive partial match77- `Stock_Symbol` (string): ticker filter, for example AAPL or NVDA, partial match78- `Start_Date` and `End_Date` (string, YYYY-MM-DD): inclusive transaction date range79- `Date_Reported` (string, YYYY-MM-DD): exact transaction date, use the range instead for most queries80- `Max_Results` (integer, 1 to 1000, default 100): cap on rows returned8182## Cost8384Billing is per transaction returned plus a small per-run start fee. A 100-row member query is about $0.19 on the free tier; a full 1000-row pull is about $1.91. Volume tiers lower the per-transaction price. Estimate first and confirm large runs; live prices are in `references/gotchas.md`.8586## Honest limits8788- Filings trail the actual trades by 30 to 45 days (the STOCK Act reporting deadline), so this is a research dataset, not a live feed.89- `Amount_Range` is a bracket exactly as filed; no exact dollar values exist anywhere in the source.90- `Ticker` is blank for unlisted assets (private funds, real estate, treasuries).91- `Asset_Type_Code` carries more codes than the common ST, OP, MF, BD, ET, CT set; treat it as an open vocabulary.92- Rows where `PDF_Quality` is "image" came from scanned filings read by OCR; spot-check those against the source PDF via `Filing_ID` when a number matters.93- This skill collects public disclosure records. It does not evaluate, recommend, or time trades.9495## Troubleshooting9697- Empty dataset: check the name spelling (partial match still needs the right letters), widen the date range, or drop the ticker filter.98- Fewer rows than `Max_Results`: normal; the filters matched fewer filings.99- A member seems missing: very recent trades may simply not be filed yet; the deadline is 30 to 45 days.100- Odd rows for a common last name: partial matching can catch multiple members; add `First_Name`.101102See `references/gotchas.md` for cost guardrails and error recovery, and `references/actor-index.md` for the Actor routing table.103104## Related financial-data Actors105106- Earnings Call Transcript API: https://apify.com/johnvc/earnings-call-transcript-api?fpr=9n7kx3&fp_sid=skillrepo107- Google Finance API: https://apify.com/johnvc/google-finance-api?fpr=9n7kx3&fp_sid=skillrepo108- Google News API: https://apify.com/johnvc/GoogleNewsAPI?fpr=9n7kx3&fp_sid=skillrepo