DEV Community

Cover image for Congress Stock Trading Data: How to Query Financial Disclosures by API in 2026
Truffle Pig Data
Truffle Pig Data

Posted on

Congress Stock Trading Data: How to Query Financial Disclosures by API in 2026

Every stock trade a member of Congress makes is public record under the STOCK Act, filed as a Periodic Transaction Report on the House financial disclosure portal or its Senate counterpart. Public does not mean usable: the filings are documents, split across two portals, and a fair number are scanned images. I wanted this data as rows, not PDFs. The Congress Financial Disclosures and Stock Trades API on Apify turns the whole record into a queryable dataset: search by member, ticker, or date range, get JSON back.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Is there an official API for congress stock trades?

No. The House and Senate each run their own disclosure portal, both built for looking up documents one at a time, and neither offers a developer API. The underlying filings are per-member PDFs, some typed, some scanned. So congress stock trading data as an API means a scraper-backed dataset you query like an API: filters in, one clean row per transaction out.

What the congress stock trading data API returns

The API returns one row per disclosed transaction as structured JSON: who traded, what, which direction, the filed amount bracket, and the dates and filing IDs to verify it.

Field Example Notes
First_Name, Last_Name, House "Nancy", "Pelosi", "House" Plus State_District
Ticker, Asset "NVDA", "NVIDIA Corporation" Ticker blank for unlisted assets
Transaction_Type P P purchase, S sale, S (partial), E exchange
Amount_Range "$1,001 - $15,000" The bracket exactly as filed
Date, Notification_Date 2024-06-14, 2024-07-10 Trade date and report date
Filing_ID, PDF_Quality 20024561, "text" Trace any row to its source filing

Each result set carries a search_metadata object with total_results_found and the query echoed back, so exports are self-documenting.

Who this is for

Journalists doing accountability reporting, compliance and ESG teams screening for exposure or conflicts, quants testing whether disclosed trades carry signal, and transparency advocates who want the record in a spreadsheet.

The manual way, and where it breaks

Doing this by hand means working two separate portals with different search forms, opening filings one at a time, and transcribing tables from PDFs. The scanned filings are the killer: a meaningful share of reports are images, so you are running OCR and fixing its mistakes. Member names vary across filings, tickers hide inside asset descriptions, and by the time you have one member's year assembled, the next reporting cycle has landed. I tried the manual route for exactly one afternoon.

The faster way: run the congress trades scraper

Apify Console

  1. Open the Congress Financial Disclosures API and click Try for free.
  2. Filter by Last_Name, Stock_Symbol, or a Start_Date and End_Date range.
  3. Run it and download the dataset as JSON, CSV, or Excel.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~us-congress-financial-disclosures-and-stock-trading-data/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "Last_Name": "Pelosi", "Start_Date": "2024-01-01", "End_Date": "2024-12-31", "Max_Results": 100 }'
Enter fullscreen mode Exit fullscreen mode

Run endpoint reference: the Apify API docs.

Query congress trades in Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/us-congress-financial-disclosures-and-stock-trading-data").call(
    run_input={"Stock_Symbol": "NVDA", "Max_Results": 200}
)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["Date"], row["Last_Name"], row["Transaction_Type"], row["Ticker"], row["Amount_Range"])
Enter fullscreen mode Exit fullscreen mode

Name and ticker filters are case-insensitive partial matches, which forgives the inconsistencies in the underlying filings.

Track a single member's trades

Track Nancy Pelosi stock trades is the member-watch recipe: one last name, a date range, every disclosed transaction with brackets and filing IDs.

Watch one ticker across all of Congress

The ticker series flips the question to "who is trading this stock": Nvidia, Tesla, and Apple are ready to run, and the same pattern exists for Amazon, AMD, Google, Meta, Microsoft, Palantir, and TSMC.

Pull a year of disclosures in one run

Get congress stock disclosures last year uses only the date range, which produces the base dataset for any analysis that starts with "across all members".

Monitor new filings daily

Track US congress stock trades daily pairs the Actor with an Apify Schedule so new disclosures land in your dataset the day they are filed, which is how newsroom tip sheets get built.

Use it from Claude and other MCP clients

Connect the Apify MCP server (https://mcp.apify.com/?tools=actors,docs,johnvc/us-congress-financial-disclosures-and-stock-trading-data) and Claude, Claude Code, or Cursor can answer "which members traded semiconductor stocks this quarter" with rows instead of recollection. If you have not used Claude with tools, start at claude.ai.

FAQ about scraping congress stock trades

How much does the congress trades scraper cost?

Billing is per transaction returned plus a small per-run start fee. A 100-row member query runs about $0.19 on the free tier and a full 1,000-row pull about $1.91, with volume tiers lowering the per-row price. Max_Results caps any run, and new Apify accounts include free platform credit.

Where does the scraper's data come from?

From the public record: Periodic Transaction Reports filed under the STOCK Act on the House and Senate disclosure portals. Every row carries a Filing_ID and DocID, so any number can be traced back to the source filing.

Can compliance and ESG teams use this scraper?

Yes, that is a core use. Screen a watchlist of tickers or members on a schedule, and route hits into your case system. The bracket amounts and notification dates are exactly what a conflicts or ESG review needs to document.

Can Claude query the scraper through MCP?

Yes. Over the Apify MCP server the Actor becomes a callable tool, so an agent can filter by member, ticker, or date range mid-conversation and cite the filing IDs it found.

Can I schedule the scraper to catch new disclosures?

Yes. Save a task with your filters, attach a daily schedule, and diff new id values against your store. Start from the Congress Financial Disclosures API.

Why does the scraper show amount ranges instead of exact values?

Because exact values do not exist anywhere in the source: members file brackets like "$1,001 - $15,000", and that is what you get. Two more honest limits: filings trail trades by 30 to 45 days under the reporting deadline, so this is research data rather than a live feed, and rows with PDF_Quality of "image" came through OCR, so spot-check those against the source PDF when a number matters.

More from Truffle Pig Data

The long-form walkthrough lives on Medium: How to track congress stock trades with the Financial Disclosures API. Related Actors on the finance shelf: the SEC Investment Advisor Contacts API and the Google Finance API.

Wrapping up

The record is public; now it is also queryable. Point the Congress Financial Disclosures and Stock Trades API at a member, a ticker, or a year and see what the filings say.

Top comments (0)