How the Conflict Score works
ConflictScore reads a congressional stock trade, looks up the member's committee assignments and the traded company's industry, and measures whether the two overlap. The result is a 0–100 score with a plain-language explanation that links back to the original filing.
What the number means
A Conflict Score uses a 0–100 scale, with the current base model assigning only 0, 18, 30, 50, or 65. Scores above 65 are not used in this release. This is not a probability of wrongdoing. Higher means a stronger overlap between what the member's committees oversee and the industry of the traded company. Two top-level outcomes:
- Not scored — we could not determine an overlap. This is not a zero; it means a needed input is missing (see What we need). A trade never silently scores 0.
- scored 0–100 — enough data existed, and the overlap strength maps to a tier.
The five tiers
Tiers are ranked by how directly a committee's jurisdiction covers the issuer's industry. The engine picks the single strongest tier that applies. Counts are from the current corpus (11,401 trades):
How the match is made
- Issuer domains. The traded ticker is matched to an SEC EDGAR filing, which gives an SIC industry code. That SIC maps to oversight domains (e.g. SIC 2836 → health, pharma) via a public lookup table.
- Committee domains. The member's committee and subcommittee assignments are resolved to oversight domains (subcommittees inherit the parent committee's domains).
- Overlap. If any issuer domain appears in any of the member's committee domains, that's a match. The strongest tier among all matches sets the score.
What we need
A trade is marked Not scored if any of these is missing. We never guess — the gap is named.
| Gap | Why it happens | Share |
|---|---|---|
| missing_ticker | No ticker (common for Treasuries, bonds, real estate, private funds). | 12.6% |
| ticker_not_matched | Ticker present but not found in SEC EDGAR (delisted, acquired, OTC). | 4.6% |
| missing_sic | Issuer matched in EDGAR but has no SIC industry code. | 0.2% |
| sic_unclassified | SIC exists but is not yet mapped in our domain table. | 23.1% |
| missing_member | Filer could not be matched to a current member (former member or name variant). | 6.9% |
| missing_committee_data | Member matched but has no committee assignments on file. | 0.5% |
Shares are computed from the stored corpus and shift as coverage improves. One trade can have more than one gap, so shares may overlap. Unavailable counts are never shown as zero.
A source-linked example
Rep. Rick Allen sits on House Energy and Commerce, whose mapped jurisdiction includes energy. Atmos Energy is classified as Natural Gas Distribution (SIC 4924), which maps to energy.
The shared energy domain produces a direct-jurisdiction score of 65. This filing discloses a spouse-owned purchase on Aug 19, 2025. The score uses the current committee roster, not historical assignments.
A zero means no overlap was found in the mapped domains, not an absence of all possible conflicts. A missing input is labeled “Not scored” instead.
How the less common tiers work
Subcommittee overlap (50) applies when no stronger full-committee match exists. Sector overlap (30) applies when an issuer has a mapped broad sector but no specific industry-domain match. Broad committees retain the lower cross-cutting weight of 18.
Coverage and freshness
House updates are scheduled daily at 06:00 UTC. A successful run means the pipeline completed; it does not guarantee every disclosure could be identified or scored. Filing dates and trade dates differ, so this is not a real-time trading feed.
Senate electronic Periodic Transaction Reports are imported separately and scored when the required member, issuer, and committee data are available. Paper reports and amendments requiring reconciliation remain pending review and are excluded from trade totals. Coverage is partial, not a complete historical archive; the status above reflects published trades and the latest import.
How scores are produced
- Disclosure scraping. Periodic Transaction Reports are scraped from the House Clerk system (PDF), parsed, and each trade archived with a SHA-256 checksum. Senate electronic PTR tables are archived as HTML with SHA-256 checksums and parsed by the scheduled pipeline. Missing tickers are preserved as missing rather than inferred from asset names.
- Company mapping. Tickers are matched to SEC EDGAR central index keys and SIC industry codes.
- Committee mapping. Members' committee and subcommittee assignments are resolved to oversight domains from official jurisdiction statements.
- Scoring. The engine produces a tier, a 0–100 score, and plain-language reasoning, linked to the original filing URL.
What this version does not yet include
This release is the base score only. The following inputs do not affect the current score:
- Trade size relative to the member's disclosed net worth.
- Timing relative to a related committee vote or hearing.
- Owner flags — trades by a spouse or dependent (covered by the STOCK Act).
- Options / derivatives — contract characteristics are not incorporated.
- Government-contract overlap — whether the issuer holds contracts from an agency the member's committee oversees (USASpending).
- Historical committee assignments — scores today use the member's current roster; assignment history at the trade date is on the roadmap.
Individual score explanations are free; this page documents the rules the engine applies.