All the congressional trading dashboards, the Pelosi tracker accounts, the paid APIs, the newsletter screenshots, every one of them drains from the same two upstream pipes, and both pipes are free. They are also two of the least pleasant government data sources I have ever worked with, which is most of the reason an entire aggregator industry exists on top of them. If you understand what each layer of the stack actually gives you, you can get most of what the paid products offer for nothing, as long as you accept some tradeoffs on speed and cleanliness.
Quick background so the rest of this makes sense. Members of Congress report their securities trades under the STOCK Act in a filing called a Periodic Transaction Report, a PTR. It is due within 30 days of the member becoming aware of the trade, and no later than 45 days after the trade itself. Amounts come in ranges rather than exact figures, so a filing tells you $15,001 to $50,000 and nothing more precise. Trades by spouses and dependent children are included and flagged as such. Hold on to both of those facts, because they shape everything this data can and cannot do.
The two primary sources
House filings live on the Clerk of the House financial disclosure site. There is a search interface, which is fine for looking up one member, and there is the thing that actually matters for anyone building something: a downloadable archive for each year containing an index of every filing plus the filing documents themselves. The index parses easily. The documents split into two populations. Electronic filings come out as PDFs generated from structured data, and those parse reliably once you have written the extraction logic once. Paper filings are scanned images, occasionally handwritten, and I have never seen a parser that fully solves them. A meaningful slice of House filings still arrive on paper, so any pipeline built purely on the electronic ones has a blind spot it cannot see.
Senate filings live on the eFD system, the electronic financial disclosure search run by the Senate Office of Public Records. Two quirks worth knowing before you script anything against it. First, the site makes you click through an agreement before searching, so an automated fetch has to establish that session before any query works. Second, there is no bulk download at all. Electronically filed Senate PTRs render as clean HTML tables, which is honestly the nicest format in this whole ecosystem, but you have to page through search results to find them, and paper filers show up as image scans just like on the House side.
So the raw material is free, public, and awkward. That awkwardness is the product the aggregators are selling back to you.
The layer built on top
Four names cover most of what people actually use, and they sit at usefully different spots on the free-to-paid spectrum.
- Capitol Trades is the best free browsing experience. Clean interface, quick to surface new filings, good member and issuer pages. There is no free API, so it is a place to look rather than a place to build on.
- Quiver Quantitative publishes congressional trading pages you can read for free and sells API access on top. If you want programmatic data without writing your own scrapers, this is the usual middle ground.
- Unusual Whales does strong analysis and tracking, including the year-end performance breakdowns that tend to go viral, but most of the useful data sits behind the paywall.
- Senate Stock Watcher and House Stock Watcher are community projects that parse the filings and publish the results as free JSON dumps. For bulk historical work this is the fastest starting point that costs nothing.
One honest caution on that last category. Community-maintained parsers break silently. A change in the filing format, or a maintainer getting busy, and the dataset quietly stops updating or starts mangling a field, with no status page to warn you. Before trusting any open dump, spot check its most recent entries against the primary source. Ten minutes of checking has saved me from building on stale data more than once.
What the data cannot tell you
The range problem is bigger than it first appears. A disclosure of $1,001 to $15,000 and a disclosure of $500,001 to $1,000,000 are different signals from the same politician, but within a band you cannot distinguish a token purchase from a conviction bet. Any analysis that needs position sizes has to pick a convention, usually the midpoint of the range, and accept that it is a guess. Every aggregator showing a "total traded" figure is doing this same guessing, they just do not always say so on the chart.
The lag problem matters even more. That 45-day window means a "new" filing can describe a trade from six weeks ago, and late filings stretch well past that, since the standard penalty has historically been a fine small enough to ignore. So the useful timestamp is the disclosure date, when the information became public, and never the trade date. If you backtest a strategy that enters on the trade date, you are trading on information nobody outside the member's household had. It is the single most common way I see people fool themselves with this dataset.
Then the grubby parsing details. Asset names are free text, so tickers are missing or wrong for bonds, funds, private placements, and crypto. Options get described in wildly inconsistent formats. Amendments arrive as fresh filings that duplicate or correct earlier ones, so a naive pipeline double counts trades unless it deduplicates on filing ID and reconciles amendments against originals. And the owner field, self versus spouse versus dependent, is worth preserving, because a spouse's index fund rebalance and a member's own single-stock purchase ahead of a committee hearing are very different kinds of events.
Matching the source to the job
For alerts, freshness of publication is the only thing that matters, so use whichever layer surfaces new filings fastest and verify it against the primary source once. In practice that means either a paid API with push notifications or your own poller hitting the House index and the eFD search on a schedule, and hourly is plenty given the disclosure lag already baked in. Anything marketed as real-time congressional data means real-time relative to the filing, and the filing is weeks behind the trade, so set your expectations accordingly.
For historical research, bulk beats fresh. Start from an open dump or the House yearly archives, normalize amounts to range midpoints, dedupe amendments, key everything on disclosure date, and keep the owner field. That is roughly the pipeline we built for the political trading feed in Blockcircle, and the cleaning took maybe five times the effort of the fetching, which tells you where the actual difficulty lives.
If you are just starting out, my suggestion is to skip the paid tiers for now. Spend an afternoon with one year of the House archive and a JSON parser. You will hit the ranges, the amendments, and the paper scans within the first hour, and after that every aggregator's pricing page will make a lot more sense, because you will know exactly what you are paying to avoid.