Request a tool
All toolsAutomationsGuidesMCP serverRequest a toolPlatformsCategories
Congress Stock Trades Scraper icon

Congress Stock Trades Scraper

Stock trades members of Congress report, read from the official House and Senate filings: ticker, purchase or sale, dates, amount range and filing link.

93 runs on Apify $0.00065 per trade ($0.65 / 1,000)
Run this in the cloudRun on Apify →

Developer & Research Tools

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust lastDays, disclosedFrom, disclosedTo (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00065 per trade = $0.65 per 1,000

You are charged forWhenPrice
Trade returnedOne congressional stock trade returned in the dataset. Paper filings are not charged.$0.00065

Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-14, and they are what you are actually charged.

Inputs

FieldWhat it doesType
lastDaysFilings disclosed in the last N days, today included. 7 means this week's filings, which suits a daily or weekly schedule. Used when Disclosed from is empty.integer
disclosedFromThe first day a filing was disclosed, as YYYY-MM-DD. Periodic transaction reports start in 2012. Leave it empty to use Last days instead.string
disclosedToThe last day. Leave it empty to run up to today.string
chamberWhich chamber's filings to read.string
membersNames, whole or in part: Pelosi, Nancy Pelosi, Tuberville. A filing matches when the member's name holds every word of one of these. Leave it empty for everyone.array
statesMembers from these states. The House also has delegates for DC and the territories. Leave it empty for every state.array
districtsSeats written like CA11 or NY14. An at-large seat is 00, as in AK00. Senators have no district, so giving one reads House filings only.array
tradedFromOnly trades made on or after this day. Members have up to 45 days to disclose a trade, so a trade from last month can sit in a filing disclosed this week.string
tradedToOnly trades made on or before this day.string
tickersOnly these tickers, such as NVDA or BRK.B. Many rows have no ticker at all (bonds, private companies, funds held in an account), and those never match.array
transactionTypesLeave it empty for all four.array
minAmountFilings give an amount range, not a figure. This keeps trades whose range starts at or above the one you pick.string
assetTypesEach row's category comes from how the member filed it. The Senate files most ETFs under Stock, for instance, so ETF finds mostly House rows.array
ownersWhose holding the trade was in. Leave it empty for all.array
includePaperFilingsSome members still file on paper. Those filings are scans, so their trades aren't read; each one comes back as a single row with its link, and none of them is charged. The trade filters above can't see inside them.boolean
maxTradesThe most trades returned in one run, newest filings first. Each trade returned is one charge.integer

What you get

A structured dataset — each result includes fields like:

memberNamechamberstatedistrictownertickerassetNametransactionTypetransactionDatedisclosureDateamountRangepaperFilingreportUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Developer & Research Tools

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

GitHub Scraper iconDeveloper & Research Tools

GitHub Scraper

Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.

18 use cases

Stack Overflow / Stack Exchange Scraper iconDeveloper & Research Tools

Stack Overflow / Stack Exchange Scraper

Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.

2 use cases

Package Registry Scraper (npm + PyPI) iconDeveloper & Research Tools

Package Registry Scraper (npm + PyPI)

Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.

2 use cases

arXiv Scraper iconDeveloper & Research Tools

arXiv Scraper

Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.

2 use cases

OpenAlex Scholarly Works Scraper iconDeveloper & Research Tools

OpenAlex Scholarly Works Scraper

Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.

2 use cases

Crossref Scholarly Works Scraper iconDeveloper & Research Tools

Crossref Scholarly Works Scraper

Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.

2 use cases

See all Developer & Research Tools →

Congress Stock Trades Scraper: House and Senate periodic transaction reports, as rows

The trades members of Congress disclose in their periodic transaction reports, one row per trade: the member, chamber, state and district, whose account it was, the asset and its ticker, purchase or sale, the day it was made, the day it was disclosed, the amount range, and a link back to the filing. Read from the House Clerk's disclosure site and the Senate's eFD search, nothing else.

Read this before you use the data. 5 U.S.C. § 13107 makes it unlawful to obtain or use these reports for any commercial purpose other than by news and communications media for dissemination to the general public, to set anyone's credit rating, or to solicit money for a political, charitable or other cause. The Attorney General can sue, and a court can add a penalty of up to $10,000. The Senate's site asks every visitor to confirm they understand that before it shows a report, and this run gives that confirmation for you. Whether your own use is allowed is your call, with a lawyer if you are not sure.

InputA disclosure date window, plus member, state, ticker and amount filters
OutputOne row per trade
Ceiling50,000 trades per run
Account neededNone, and no API key
Price$0.65 per 1,000 trades, flat on every plan

🏛️ What Congress Stock Trades Scraper does

It works from disclosure dates: the days filings landed on the two official sites. Give it Last days for a schedule, or a Disclosed from and Disclosed to range for a back-fill. Then it opens each filing in the window and reads its trades.

Trade dates are not disclosure dates. A member has 30 days from being told about a trade, and never more than 45 days from the trade itself, to report it. So a filing disclosed this week can hold a trade from six weeks ago. Filter on the trade date with Traded from and Traded to when that is what you mean.

The member, state and district filters run against the filing. Ticker, transaction type, amount, asset type and owner run against the individual trades inside it.

📥 What you give it

{
  "lastDays": 30,
  "chamber": "both",
  "tickers": ["NVDA", "MSFT"],
  "transactionTypes": ["purchase"],
  "minAmount": "15001",
  "maxTrades": 500
}
FieldDefaultWhat it is
lastDaysnone, box starts at 7Filings disclosed in the last N days, today included. Used when Disclosed from is empty.
disclosedFrom, disclosedTononeA disclosure date range instead, as 2026-08-01. Leave the end empty to run up to today.
chamberbothboth, house or senate.
membersnoneNames, whole or in part: Pelosi, Nancy Pelosi, Tuberville. Up to 100. A filing matches when the name holds every word of one of your lines.
statesnoneTwo-letter states. The House also seats delegates for DC and the territories.
districtsnoneSeats like CA11 or NY14, at-large as AK00. Senators have no district, so setting one reads House filings only.
tradedFrom, tradedTononeThe day the trade was made, not the day it was disclosed.
tickersnoneUp to 200, such as NVDA or BRK.B.
transactionTypesall fourPurchase, sale and the rest.
minAmountnoneKeeps trades whose range starts at or above the figure you pick, from $1,001 up to over $50,000,000.
assetTypesnoneThe category the member filed it under, which is not always the one you would use.
ownersnoneWhose holding the trade was in.
includePaperFilingsonLists paper filings as single uncharged rows with their link.
maxTrades1000, box starts at 50Trades in one run, newest filings first, up to 50,000.

📤 What you get back

A real row from a recent run:

{
  "chamber": "Senate",
  "memberName": "John Boozman",
  "state": "AR",
  "district": null,
  "owner": "Joint",
  "ticker": "OTIS",
  "assetName": "Otis Worldwide Corporation Common Stock",
  "assetType": "Stock",
  "assetCategory": "stock",
  "transactionType": "Purchase",
  "transactionDate": "2026-08-27",
  "notificationDate": null,
  "disclosureDate": "2026-09-11",
  "amountRange": "$1,001 - $15,000",
  "amountMin": 1001,
  "amountMax": 15000,
  "capitalGainsOver200": null,
  "comment": null,
  "description": null,
  "subholdingOf": null,
  "filingStatus": "New",
  "paperFiling": false,
  "note": null,
  "reportId": "0632f542-7ac2-46e4-bd9c-603e3673f0cd",
  "reportUrl": "https://efdsearch.senate.gov/search/view/ptr/0632f542-7ac2-46e4-bd9c-603e3673f0cd/",
  "rowInReport": 5
}
FieldWhat it is
amountRange, amountMin, amountMaxThe band the member reported, and both its ends as numbers. Where a member wrote an exact figure instead, both ends are that figure.
transactionDate, disclosureDateWhen the trade happened, and when the filing appeared. notificationDate is a House field.
tickernull on a great many rows: bonds, private companies, and funds held inside an account often have none.
assetType, assetCategoryThe filing's own words, and a tidied version of them.
capitalGainsOver200House only, and null on filings from 2015 to 2017, which had no such column.
filingStatusNew or amended. An amendment repeats its trades, so you get both copies.
reportUrl, rowInReportThe filing itself and which line this was, so any row can be checked against the source.

🧾 Reading the output

RowHow to spot itCharged
A tradepaperFiling: false and _sample absentyes
A paper filingpaperFiling: true and every trade field nullno
The sample row_sample: trueno

Paper filings are scans, so their trades cannot be read. Each arrives as one row with the member, the disclosure date, a link, and the note "Paper filing, not read. Open reportUrl to see its transactions." The trade filters cannot see inside them and you are never charged for one. Switch List paper filings off to leave them out.

Run it with no dates and you get the one sample row, a real trade, so you can see the shape first.

The status message leads with "Returned N trades from M filings disclosed from ... to ...", then paper filings, the stop reason, anything that could not be read, and "Today's filings may still be coming in." RUN_REPORT has one entry per filing and a count for every filter.

▶️ How to run it

1. Open Congress Stock Trades Scraper and click Try for free. 2. Set Last days, or a Disclosed from and Disclosed to range. 3. Narrow it if you want: Members, States, Tickers, Minimum amount. 4. Set Maximum trades, then click Start. 5. Download the dataset as JSON, CSV or Excel, or read it from the Apify API.

💰 How much does it cost?

$0.65 per 1,000 trades. Flat on every Apify plan, no volume tiers.

You pay per trade row delivered. Paper filing rows, trades your filters set aside, filings that could not be read, and the sample row are all free.

💡 What people use it for

  • A daily or weekly schedule on Last days, picking up whatever was disclosed since the last run.
  • Following one member by name, or one state's delegation, across both chambers.
  • Watching a ticker to see who in Congress has been trading it and when.
  • Comparing trade dates against disclosure dates to see how long a member took to report.
  • Back-filling years of filings with a Disclosed from date and letting it run.

🚧 What it does not do

  • Paper filings are not read. They are scanned forms. You get the link, not the trades.
  • Ranges, not amounts. Members report a band, so amountMin and amountMax are as precise as

this gets.

  • House filings start in 2015. The Clerk's yearly lists hold no periodic transaction reports

before that. The Senate's search goes back to 2012.

  • Older House filings scramble capital letters. Between 2015 and 2021 the text itself reads

"apple Inc." and "(TsLa)". Tickers are put back into capitals, names are left as filed.

  • Categories follow the filer, not a standard. The Senate files most ETFs as plain Stock, so an

ETF filter finds mostly House rows.

  • Amended filings repeat their trades, and both copies come back. filingStatus tells them

apart.

  • No prices, no returns, no holdings. Only what the filing says.
  • The two sites update on their own schedules, so the newest House filings can lag the Senate's

by a day or two.

  • A senator the state table does not place gets no state, and then falls outside any state

filter. The run counts those.

🧭 Which filings scraper do you need?

If you wantUse
Congressional stock trades from the official filingsThis one
SEC company filingsSEC EDGAR Scraper
Newly incorporated UK companiesCompanies House New Companies Scraper
Prediction market prices on politics and economicsKalshi Markets Scraper

❓ Questions people ask

Do I need an account for either site? No. No login, no API key.

Why is the trade date so far before the disclosure date? Members have 30 days from being told about a trade, and no more than 45 days from the trade, to file it. The gap is the law working as written.

Why does my ticker filter miss things? Plenty of rows carry no ticker at all. A bond, a private company or a fund held inside an account will not match one.

How do I run this daily? Set Last days to 2 rather than 1, so a filing that lands late still gets picked up, and dedupe on reportId plus rowInReport.

Can I go back years? Yes. Set Disclosed from and leave Disclosed to empty, and raise Maximum trades.

Is this legal to use? Read the notice at the top of this page. The restriction is in the statute, not in our terms, and it is about what you do with the reports. Apify's write-up on scraping and the law covers the scraping side, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Send the run ID and the dates you used. The status message and RUN_REPORT name which filings fell short.