A single week of congressional disclosures can contain hundreds of transactions. Most are routine: small rebalancing trades, index fund purchases, partial sales for liquidity. Buried among them are the rows a careful reader would actually stop at, such as an unusually large purchase filed quickly, or three members buying the same ticker within days of each other. Scoring is the process of making the interesting rows rise to the top automatically. This article explains how the DataSignals scoring method works, step by step, from official filing to ranked row.
Step 1: Start from the official record
Everything begins with the primary source. House members file Periodic Transaction Reports with the Clerk of the House, published at disclosures-clerk.house.gov. The Senate publishes through its own system at efdsearch.senate.gov, with terms that restrict commercial reuse. The legal requirement behind both comes from the STOCK Act of 2012, Public Law 112-105, on congress.gov: transactions over $1,000 must be disclosed within 30 days of the member learning of them, and never later than 45 days after the trade.
Working from the official record rather than from second-hand aggregations has one decisive property. Every parsed row can carry a link back to the exact PTR PDF it came from. In the DataSignals dataset, every row does. If a score looks surprising, you can open the underlying filing and check the primary source yourself in seconds. Data without that traceability asks for trust. Data with it only asks for verification.
Step 2: Parse the filing into fields
A PTR is a document, not a dataset. Parsing extracts the fields that scoring needs:
- The member's name and chamber
- The asset name and ticker
- The transaction type: purchase, sale, or exchange
- The transaction date and the filing date
- The disclosed amount range
- The owner code: member, spouse, dependent child, or joint
Parsing also handles the unglamorous cases. Amendments must supersede the originals they correct. Tickers need normalization. Non-stock assets such as bonds and options need classification. Filings that are scanned images rather than e-filed documents need to be treated differently from machine-readable ones, because extracted text from scans carries a real error rate.
Step 3: Estimate size from the disclosed range
Congressional disclosures never state exact amounts. They use brackets: $1,001 to $15,000, $15,001 to $50,000, $50,001 to $100,000, and larger ranges beyond. Scoring needs a number, so the method uses the midpoint of the disclosed range as the size estimate. A trade in the $15,001 to $50,000 bracket is treated as roughly $32,500. A trade in the $100,001 to $250,000 bracket is treated as roughly $175,000.
The midpoint is a modeling convention, and it is presented as one. The true amount could sit anywhere in the bracket. But the convention is unbiased in a useful sense, it is applied identically to every row, and it preserves the ordering that matters: a trade disclosed in a higher bracket always scores as larger than a trade disclosed in a lower one. Size matters for scoring because it separates conviction from noise. A five-figure purchase is a decision. A four-figure one is often just housekeeping.
Step 4: Weight by freshness
The second scoring input is time. Because the law allows up to 45 days between trade and disclosure, and because members use varying amounts of that window, the trades in any batch of filings differ widely in age. A purchase executed last week and a purchase executed six weeks ago are not equally informative about the present, even at the same size.
Freshness weighting encodes that. Recent filings score higher, and the score decays as the transaction date recedes. The effect on the ranked output is exactly what a human prioritizer would want: a large purchase from days ago outranks an equally large purchase from over a month ago, and a stale small trade sinks to the bottom regardless of who made it.
Step 5: Combine into an impact score
Size and freshness combine into a single impact score per transaction. The design goal is a one-number answer to the question a reader brings to each row: how much should this trade command my attention right now? Big and recent scores high. Small or old scores low. Big but old and small but recent land in between.
A single scalar cannot capture everything, and it does not try to. What it does is convert an unsorted pile of transactions into a ranked list, so that attention starts at the top instead of being spent evenly across hundreds of routine rows.
Step 6: Look across members for consensus
Individual trades are one layer. The second layer looks across filers. When multiple members trade the same ticker within the covered window, the dataset builds a consensus view for that ticker, including the balance between buying and selling.
The buy/sell lean is the key output. Five members buying a ticker and none selling is a different picture than three buying and three selling. The consensus view does not claim the members coordinated, and it does not claim they are right. It states an observable fact of the record: this many filers, this direction, this recently. Independent decisions pointing the same way are simply a stronger pattern than one decision alone, which is the same logic that makes cluster detection standard practice in corporate insider analysis.
Consensus also acts as a natural noise filter. Any one member's trade can be explained by personal circumstances. It is harder for personal circumstances to explain several members converging on one ticker in one direction in one window.
What the scoring does not claim
Clear boundaries make data usable, so these are stated plainly.
The score measures the observable properties of a disclosure: how large, how recent, how many filers, which direction. It does not predict returns. No backtest results are attached to the scores, and none are implied. The academic evidence on modern congressional trading, discussed at length elsewhere on this site, finds no average outperformance in trades disclosed under the STOCK Act. Scoring exists to organize attention over a public record, not to promise that the top of the list will beat the market.
The score also inherits the limits of the underlying disclosures. Amounts are ranges, so sizes are estimates. Trades can be up to 45 days old at disclosure, and occasionally older when filings are late. Owner codes mean some trades belong to spouses or dependent children rather than the members themselves. The dataset preserves these facts rather than papering over them, and the link on every row leads back to the official PTR PDF where the original ranges, dates, and codes are stated.
The pipeline in one view
From end to end: collect filings from the official source, parse documents into structured fields, reconcile amendments, estimate sizes from range midpoints, weight by freshness, combine into an impact score, aggregate into per-ticker consensus with a buy/sell lean, and keep every row traceable to its source PDF. Each step is simple. The value is in running all of them, continuously, so the ranked output is ready when the filings land.
The Congress Stock Trades Report is the output of this pipeline, turning raw filings into one scored, ranked document. Get the free preview.
DataSignals Lab publishes data and research. This is not investment advice.
Prefer the tool to the write-up? Browse all data feeds or connect the free MCP server.