People talk about congressional trading like it is one dataset. It is not. There are two chambers, two filing systems, two sets of quirks, and the gap between them is bigger than most of the summaries you read will admit. I spent an embarrassing amount of time learning this the hard way, mostly because I assumed a disclosure was a disclosure and that the only thing separating a Senator's trade from a Representative's was who filed it. The thing separating them is the plumbing, and the plumbing is what decides whether a filing turns into a signal you can act on or a scanned image you have to squint at.
The short version is that the Senate files through the eFD system run by the Secretary of the Senate, and the House files through the Clerk of the House. Both are supposed to give you the same kind of information under the same underlying law, the periodic transaction reports that members file after they buy or sell. But same information and same usability are not the same claim, and the difference lives entirely in the format.
Two systems, two very different outputs
The Senate eFD system is the one people usually praise, because a lot of what comes out of it is genuinely structured. When a Senator files a periodic transaction report electronically, you tend to get fields you can parse, so the ticker, the transaction type, the date, and a dollar range all arrive as data rather than as a picture of data. That sounds like it settles the question in the Senate's favor, and for a long time I assumed it did.
Then you actually try to build something on top of it and you hit the annoyances. The eFD search is gated behind an agreement step, the interface is not built for programmatic access, and the pages are structured in a way that makes scraping feel adversarial. It is doable, plenty of people do it, but it is not handed to you. And the structured filings only help if the member actually filed electronically rather than dropping in a paper report that gets scanned, which still happens.
The House Clerk side has the opposite personality. The disclosure portal is, in some ways, easier to pull from in bulk. You can get to the periodic transaction reports and, importantly, the House has historically published a machine-readable index of filings for a given year, so you can programmatically discover what was filed and when without scraping a search box. That index is the quiet hero of the whole setup. It tells you a document exists and gives you a handle to fetch it, which is exactly the part the Senate makes you work for.
The scanned-PDF trap
Here is the failure mode that will eat your afternoon if you are not ready for it. A lot of the actual transaction reports, on both sides but especially the ones you care about, are not clean data at the document level. They are PDFs. And a meaningful chunk of those PDFs are scanned images of a paper form a staffer filled out by hand or printed and signed. There is no text layer. Your parser opens the file, finds nothing, and either crashes or silently returns an empty trade, which is worse because you do not notice.
So the real pipeline is not "download the filing, read the fields." It is closer to this:
- Pull the filing index to learn what exists and get the document IDs.
- Fetch each document and check whether it has a real text layer.
- If it does, parse the fields directly and move on.
- If it does not, run OCR, and then treat everything downstream as suspect until you have validated it.
- Reconcile ticker symbols against a known universe, because handwritten and OCR-ed tickers are where the garbage enters.
That OCR branch is where accuracy quietly dies. A misread ticker turns one company into another. A misread date shifts a trade into the wrong window. And the dollar amounts are already ranges rather than exact figures, so you are stacking imprecision on top of imprecision. I treat any OCR-derived trade as a lower-confidence record and flag it, rather than letting it sit next to a cleanly parsed one as if they are equally trustworthy.
Which feed is actually actionable
If your strategy cares about lag, and for congressional trading it should, the format question turns into a timing question. The law gives members a reporting window, so there is already a built-in delay of up to roughly a month and a half between the trade and the filing, sometimes more when a report is late. You do not control that part. What you control is how fast a filing becomes a parsed, usable record on your side once it lands.
This is where the House often wins in practice, which surprises people who assumed the more structured Senate feed would dominate. Because the House publishes that discoverable index, you can poll it, notice a new filing quickly, and pull the document without waiting on a brittle scrape. The Senate's structured fields are nicer once you have the filing, but discovery is the slow, fragile step, and slow discovery on clean data can lose to fast discovery on messy data when you are chasing a short lag.
So the honest ranking depends on what you are optimizing. If you want the cleanest historical dataset to study after the fact, the Senate's structured filings are lovely and I reach for them for research. If you want the freshest realistic signal for a short-lag strategy, the House pipeline, index plus fetch plus an OCR fallback you actually trust, tends to be the one that gets a trade in front of you first.
A checklist before you trust any of it
Whatever you build, I would not treat a congressional trade as clean until it clears a few checks. This is roughly the gate I run:
- Confirm the source chamber and system, because the parsing path differs and you should never share one parser across both without knowing it.
- Confirm whether the record came from a text layer or from OCR, and carry that flag all the way through.
- Sanity-check the ticker against a real universe and drop or quarantine anything that does not resolve.
- Check the reporting window and note how stale the trade already is, because a filing that surfaces near the end of its window is old news dressed as new.
- Watch for amendments and re-filings, since a member can correct a report and you do not want to act on the version that got superseded.
None of this is exotic. It is mostly the discipline of not pretending two different systems are one, and of refusing to let a scanned image masquerade as structured data. The members are filing the same kinds of trades under the same law. The reason one chamber's feed reaches you faster and cleaner than the other's has almost nothing to do with the trades and almost everything to do with the machinery underneath, so that is the part worth understanding before you wire anything to it.