Congressional Stock Trade Tracker
Track stock trades by US Congress members. Search House and Senate financial disclosures by member name, ticker symbol, or transaction type. Returns trade details and filing dates.
Maintenance Pulse
92/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| trade-fetched | Charged per congressional stock trade disclosure retrieved. | $0.002 |
Example: 100 events = $0.20 · 1,000 events = $2.00
Documentation
Track stock trades and financial disclosures filed by members of the United States Congress. This actor pulls Periodic Transaction Reports (PTRs) from both the House Clerk's official XML feed and the Senate Electronic Financial Disclosures (EFD) portal, giving you a single consolidated dataset of congressional trading activity sourced directly from government systems.
Under the STOCK Act of 2012, every member of Congress must publicly disclose stock transactions exceeding $1,000 within 45 days. This actor automates the collection of those filings so you can monitor, analyze, and research congressional trading patterns without manually navigating two separate government websites.
Why use Congressional Stock Trade Tracker?
Manually tracking congressional stock trades means checking two completely different government systems -- the House Clerk Financial Disclosure portal and the Senate EFD search system -- each with its own interface, data format, and quirks. The House publishes a structured XML feed, while the Senate uses a session-based search portal that requires accepting a legal agreement and handling CSRF tokens before you can even query it. This actor handles all of that complexity behind a single, clean API call.
Whether you are a retail investor curious about what Congress is buying before a big vote, a journalist investigating potential conflicts of interest, or a data scientist building quantitative models around political trading signals, this actor delivers clean, structured output you can pipe directly into spreadsheets, databases, dashboards, or automated workflows. Every result includes a direct link to the official PDF disclosure document so you can verify the raw data yourself.
Key features
- Dual-chamber coverage -- Retrieves filings from both the U.S. House of Representatives and the U.S. Senate in a single run
- Official government sources only -- Pulls directly from
disclosures-clerk.house.gov(House Clerk XML feed) andefdsearch.senate.gov(Senate EFD portal) with no third-party intermediaries - Member name search -- Filter by any congressperson's name with partial matching (e.g., "Pelosi", "Tuberville", "Cruz")
- Chamber selection -- Focus on House-only, Senate-only, or both chambers simultaneously
- Transaction type filtering -- Narrow results to purchases, sales, or both
- Configurable time window -- Search anywhere from the last 1 day up to 730 days (2 years) of filings
- Ticker annotation -- Enter a stock ticker to annotate results with your search context for easier cross-referencing with filing PDFs
- Direct PDF links -- Every result includes a URL to the original disclosure document on official government servers
- Sorted by recency -- Results are automatically ordered by disclosure date with the newest filings first
- Lightweight and fast -- Typical runs complete in 10-30 seconds using only 256 MB of memory
How to use
Using Apify Console
- Navigate to the Congressional Stock Trade Tracker on the Apify Store.
- Click Try for free to open the actor in your Apify Console.
- Configure the input parameters -- or leave the defaults to pull the latest 90 days of filings from both chambers.
- Click Start and wait for the run to complete (typically 10-30 seconds).
- View results in the Dataset tab. Export as JSON, CSV, Excel, or connect directly to Google Sheets.
Using the API
You can start the actor programmatically via the Apify API or any official client library. Here is a basic cURL example:
curl "https://api.apify.com/v2/acts/CkxfuZrYkYFMctI4R/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"member": "Pelosi",
"chamber": "house",
"daysBack": 180,
"maxResults": 100
}'
Replace YOUR_API_TOKEN with your actual Apify API token from the Integrations page.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
member | String | (empty) | Congress member name to search. Partial match supported (e.g., "Pelosi", "Tuberville"). Leave empty for all members. |
ticker | String | (empty) | Stock ticker symbol to annotate results with (e.g., "AAPL", "MSFT", "NVDA"). See tips below. |
chamber | String | both | Filter by congressional chamber: both, house, or senate. |
transactionType | String | both | Filter by transaction type: both, purchase, or sale. |
daysBack | Integer | 90 | How many days back to search for filings. Range: 1 to 730. |
maxResults | Integer | 50 | Maximum number of results to return. Range: 1 to 1000. |
Example input
{
"member": "Tuberville",
"chamber": "senate",
"transactionType": "both",
"daysBack": 365,
"maxResults": 200
}
Tips
- Start broad, then narrow down. Run with no filters first to see what data is available, then add member name or chamber filters to focus your search.
- Check the filing PDFs. The metadata from official feeds provides filing-level information (who filed, when, and what type). The actual stock tickers, transaction amounts, and detailed asset descriptions are inside the linked PDF documents -- this is an important distinction.
- Ticker annotation is contextual. The
tickerinput does not filter results server-side because ticker data lives inside the PDF filings, not in the feed metadata. Instead, it annotates your results so you know which ticker you were researching. - Longer time windows for historical analysis. Set
daysBackto 730 to pull up to 2 years of filings for comprehensive research. - Senate site maintenance. The Senate EFD portal occasionally goes offline for scheduled maintenance. If Senate results come back empty, try again later -- House results via the XML feed are always available.
Output
Each item in the dataset represents a single financial disclosure filing. Here is an example of a House filing:
{
"member": "Nancy Pelosi",
"chamber": "House",
"party": "",
"state": "CA",
"district": "11",
"ticker": "",
"assetDescription": "See filing PDF for transaction details",
"transactionType": "Periodic Transaction Report",
"transactionDate": "",
"disclosureDate": "01/15/2025",
"amount": "",
"owner": "",
"filingUrl": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2025/20012345.pdf"
}
And here is an example of a Senate filing:
{
"member": "Tommy Tuberville",
"chamber": "Senate",
"party": "",
"state": "",
"district": "",
"ticker": "",
"assetDescription": "See filing for transaction details",
"transactionType": "Periodic Transaction Report",
"transactionDate": "",
"disclosureDate": "02/03/2025",
"amount": "",
"owner": "",
"filingUrl": "https://efdsearch.senate.gov/search/view/ptr/12345678-abcd-1234-efgh-123456789012/"
}
Output fields
| Field | Description |
|---|---|
member | Full name of the Congress member who filed the disclosure. |
chamber | Congressional chamber -- House or Senate. |
party | Political party affiliation (when available from the source data). |
state | Two-letter state abbreviation (e.g., CA, TX, NY). Parsed from the House Clerk StateDst code. |
district | Congressional district number (House members only, e.g., 11). |
ticker | Stock ticker symbol (when extractable from filing metadata). |
assetDescription | Description of the asset, or a note directing you to the linked filing PDF for details. |
transactionType | Type of filing -- Periodic Transaction Report, Periodic Transaction Notification, Amendment, etc. |
transactionDate | Date the transaction occurred (when available in feed metadata). |
disclosureDate | Date the disclosure was filed with the House Clerk or Senate EFD system. |
amount | Transaction amount range (when available in feed metadata). |
owner | Asset owner -- the member, spouse, dependent child, or joint. |
filingUrl | Direct URL to the official PDF disclosure document on government servers. |
Use cases
- Retail investors -- Track whether Congress members are buying or selling stocks in specific sectors before major legislation votes
- Investigative journalists -- Research potential conflicts of interest, late filings, or patterns of trading around committee assignments
- Financial analysts -- Build datasets of congressional trading activity for quantitative research and signal generation
- STOCK Act compliance monitoring -- Verify that elected officials are meeting the 45-day disclosure requirement
- Political watchdog organizations -- Create public-facing transparency dashboards around congressional financial activity
- Data scientists -- Build models correlating congressional trades with stock price movements or legislative outcomes
- Academic researchers -- Study the information advantages (or lack thereof) held by elected officials in financial markets
- Hedge funds and trading desks -- Monitor disclosure filings as an alternative data signal for investment decisions
- Civic technology platforms -- Integrate congressional trading data into voter information tools and accountability apps
API & Integration
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run_input = {
"member": "Pelosi",
"chamber": "house",
"daysBack": 180,
"maxResults": 100,
}
run = client.actor("CkxfuZrYkYFMctI4R").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['member']} -- {item['transactionType']} -- {item['disclosureDate']}")
print(f" Filing: {item['filingUrl']}")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("CkxfuZrYkYFMctI4R").call({
member: "Tuberville",
chamber: "senate",
daysBack: 365,
maxResults: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.member} -- ${item.transactionType} -- ${item.disclosureDate}`);
console.log(` Filing: ${item.filingUrl}`);
});
cURL
# Start a run
curl "https://api.apify.com/v2/acts/CkxfuZrYkYFMctI4R/runs" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"chamber": "both", "daysBack": 90, "maxResults": 50}'
# Fetch results from the default dataset
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Integrations
- Google Sheets -- Export results directly to a spreadsheet using the Apify Google Sheets integration
- Slack / Discord -- Set up webhook notifications to get alerts when new congressional trades are filed
- Zapier / Make -- Trigger automated workflows whenever new dataset items appear
- PostgreSQL / MongoDB -- Push results to a database using Apify integrations for long-term storage and querying
- Power BI / Tableau -- Export CSV data for visualization in business intelligence dashboards
How it works
The actor fetches data from two official U.S. government disclosure systems and merges the results into a single, unified dataset.
- Determine year range -- Based on the
daysBackparameter, calculate which calendar years need to be queried (e.g., 365 days back from mid-2025 requires both 2024 and 2025 data). - Fetch House filings -- Download the House Clerk's annual XML feed from
disclosures-clerk.house.gov/public_disc/financial-pdfs/{year}FD.xml. Parse the XML usingfast-xml-parserand filter for PTR filings (filing types P and X). - Fetch Senate filings -- Navigate the Senate EFD portal at
efdsearch.senate.gov: obtain a CSRF token, accept the site agreement via POST, then query the DataTables search API for Periodic Transaction Reports (report type 11, filer type 1). - Parse and normalize -- Extract member names, states, districts, filing dates, and construct PDF URLs. House PDFs use
ptr-pdfs/{year}/{docId}.pdffor type P filings andfinancial-pdfs/{year}/{docId}.pdfotherwise. - Apply filters -- Filter by member name (partial match), chamber, and transaction type. Annotate with the requested ticker symbol if provided.
- Sort and limit -- Sort all results by disclosure date descending (newest first) and apply the
maxResultscap. - Push to dataset -- Output the final results to the Apify dataset for download or API access.
User Input
|
+--------------+--------------+
| |
House Clerk XML Feed Senate EFD Portal
(fast-xml-parser) (CSRF + Agreement + Search)
| |
Filter PTR filings Parse HTML table rows
(types P and X) (report_type=11)
| |
Build PDF URLs Extract member + date
| |
+--------------+--------------+
|
Merge + Filter + Sort
|
Apify Dataset
Performance & cost
| Scenario | Memory | Run time | Compute units | Approx. cost |
|---|---|---|---|---|
| Default (90 days, both chambers, 50 results) | 256 MB | 10-20 sec | ~0.001 CU | Free tier |
| Single member, single chamber | 256 MB | 5-15 sec | ~0.001 CU | Free tier |
| Full 730 days, both chambers, 1000 results | 256 MB | 20-40 sec | ~0.002 CU | Free tier |
| Scheduled daily run (30 days per month) | 256 MB | 10-20 sec each | ~0.03 CU/month | Free tier |
| Scheduled hourly run (720 per month) | 256 MB | 10-20 sec each | ~0.72 CU/month | ~$0.36/month |
On the Apify Free plan you get approximately 0.1 compute units per day, which supports roughly 100 runs per day of this actor at no cost.
Limitations
- Detailed transaction data lives in PDFs. The official XML and search feeds provide filing-level metadata (who filed, when, and filing type). Specific stock tickers, transaction amounts, exact dates, and asset descriptions are inside the linked PDF documents -- not in the structured feed data.
- Party affiliation not included in feeds. Neither the House XML feed nor the Senate EFD search results consistently include political party information. The
partyfield is included in the output schema for future enhancement. - Senate EFD portal availability. The Senate EFD system occasionally goes offline for maintenance. When this happens, the actor gracefully logs a warning and returns House-only results. Senate data will be available again once the portal is restored.
- House data is annual XML files. The House Clerk publishes one XML file per calendar year. For searches spanning year boundaries, the actor fetches multiple XML files automatically.
- No real-time streaming. Filings appear in government systems 1-2 business days after submission. This actor retrieves whatever has been published at the time of the run.
- Transaction type filtering is approximate. Since detailed transaction types (purchase vs. sale) are inside filing PDFs, the transaction type filter works on filing metadata categories rather than individual transaction-level data.
- Rate limits on government portals. The actor uses reasonable delays and standard request patterns, but extremely frequent runs may encounter temporary rate limiting from government servers.
Responsible use
- This is public government data. All filings accessed by this actor are legally required public disclosures under the STOCK Act of 2012. No private or non-public information is collected.
- Respect government server resources. Avoid running the actor at extremely high frequency (e.g., every minute). Daily or hourly scheduling is reasonable for monitoring new filings.
- Verify before publishing. If using this data for journalism, research, or investment decisions, always verify findings against the original PDF filings linked in each result.
- Not investment advice. Congressional trading data is informational only. Trading decisions should not be based solely on congressional disclosure filings without independent analysis.
- Comply with terms of use. The Senate EFD portal has a usage agreement that prohibits commercial redistribution of bulk data. Ensure your use case complies with applicable terms.
FAQ
Q: Where does this data come from?
A: House filings come from the official House Clerk Financial Disclosure XML feed at disclosures-clerk.house.gov. Senate filings come from the Senate Electronic Financial Disclosures (EFD) search system at efdsearch.senate.gov. Both are official U.S. government sources mandated by the STOCK Act of 2012.
Q: Why are fields like ticker, amount, and transactionDate empty?
A: The official government feeds provide filing-level metadata -- who filed, when, and what type of report. The detailed transaction information (specific stock tickers, dollar amounts, exact transaction dates) is contained within the linked PDF documents. Each result includes a filingUrl that points directly to that PDF.
Q: How often is the source data updated? A: The House Clerk publishes new filings to their XML feed as they are received. The Senate EFD system updates in near-real-time as filings are submitted. New filings typically appear within 1-2 business days of the member submitting their report.
Q: What is the STOCK Act? A: The Stop Trading on Congressional Knowledge (STOCK) Act of 2012 requires all members of Congress, the President, the Vice President, and senior executive and legislative branch officials to publicly disclose financial transactions exceeding $1,000 within 45 days. This actor collects the resulting Periodic Transaction Reports (PTRs).
Q: Can I filter by political party? A: Not directly. The official data feeds do not consistently include party affiliation. You can filter by member name and cross-reference party information from a separate source.
Q: Why do I see "Periodic Transaction Report" for all House results? A: This actor specifically targets PTR filings (filing types P and X in the House Clerk system), which are the stock trade disclosures required by the STOCK Act. Other filing types such as annual reports, amendments, and termination filings are excluded to keep results focused on trading activity.
Q: What happens when the Senate EFD portal is down for maintenance? A: The actor handles this gracefully. It logs a warning about the maintenance and continues to return House filing data normally. Senate results will be empty until the portal is restored. The House XML feed is generally always available.
Q: Can I search for multiple members at once?
A: The member input accepts a single name string with partial matching. To search for multiple specific members, run the actor separately for each name, or leave the member field empty to retrieve all filings and filter the results afterward.
Q: How far back can I search? A: Up to 730 days (approximately 2 years). The House Clerk maintains annual XML files for recent years, and the Senate EFD portal supports date-range queries within this window.
Q: Does the ticker filter actually filter results?
A: Not in the traditional sense. Since ticker information is inside the PDF filings rather than the feed metadata, the ticker input annotates your results with the searched ticker symbol to help you cross-reference when reviewing the linked PDFs. It does not exclude filings that do not mention that ticker.
Q: How is this different from the SEC Insider Trading actor? A: This actor tracks stock trades by members of Congress (required by the STOCK Act). The SEC Insider Trading actor tracks SEC Form 4 filings by corporate insiders (officers, directors, and 10% shareholders). They cover different groups of people under different regulatory frameworks.
Q: Can I schedule this actor to run automatically? A: Yes. Use the Apify scheduling feature to run the actor daily, weekly, or at any interval. Combine with webhooks or integrations to get notified whenever new filings appear.
Q: Why are Senate results missing state and district information?
A: The Senate EFD search API returns limited metadata compared to the House Clerk XML feed. Senate results include the member name, filing date, and a link to the disclosure document, but do not include state information in the search response. The House XML feed includes a StateDst code (e.g., "CA33") from which state and district are parsed.
Q: What filing types does the actor target? A: For the House, the actor filters for filing type P (Periodic Transaction Report) and type X (Periodic Transaction Notification). For the Senate, it queries report type 11 (Periodic Transaction Report) with filer type 1 (Senator). These are the filing types that contain stock trade disclosures as required by the STOCK Act.
Related actors
| Actor | Description |
|---|---|
| SEC Insider Trading | Track SEC Form 4 filings for corporate insider stock trades by officers, directors, and major shareholders. |
| SEC EDGAR Filing Analyzer | Search and analyze SEC EDGAR filings including 10-K, 10-Q, 8-K, and other report types. |
| EDGAR Filing Search | Search the full EDGAR database for any filing type by company, CIK, or form type. |
| Congress Bill Search | Search current and historical bills in the U.S. Congress by keyword, sponsor, or status. |
| FEC Campaign Finance Search | Search Federal Election Commission data for campaign contributions, expenditures, and committee filings. |
| Federal Register Search | Search the Federal Register for proposed rules, final rules, executive orders, and agency notices. |
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
GitHub Repository Search
Search GitHub repositories by keyword, language, topic, stars, forks. Sort by stars, forks, or recently updated. Returns metadata, topics, license, owner info, URLs. Free API, optional token for higher limits.
Weather Forecast Search
Get weather forecasts for any location worldwide using the free Open-Meteo API. Returns current conditions, daily and hourly forecasts with temperature, precipitation, wind, UV index, and more. No API key needed.
EUIPO EU Trademark Search
Search EU trademarks via official EUIPO database. Find registered and pending trademarks by name, Nice class, applicant, or status. Returns full trademark details and filing history.
Nominatim Address Geocoder
Geocode addresses to GPS coordinates and reverse geocode coordinates to addresses using OpenStreetMap Nominatim. Batch geocoding with rate limiting. Free, no API key needed.
Ready to try Congressional Stock Trade Tracker?
Start for free on Apify. No credit card required.
Open on Apify Store