WhoVotedWhy

About and methodology

WhoVotedWhy keeps three records for each member of the 119th Congress: what they say about AI in their own press releases, how they vote when AI reaches a roll call, and who is spending money for or against them. This page says where each record comes from, what was selected and why, what the classifiers do and how well, and how to report an error.

Said

What they say

Official press releases that take a position on AI policy, tagged toward or away from government oversight. Each links to the member’s own site. The tag is a model’s reading and is labelled as such.

Voted

How they vote

Every House and Senate roll call on a tracked AI bill, every amendment vote whose own text mentions AI, and committee tallies where a committee reported one. Read from the chambers’ own XML.

Funded

Who is spending, and on whom

Independent expenditures by AI-industry super PACs for and against candidates, who funds those PACs, electioneering ads by their affiliated nonprofits, and itemized contributions from AI-company employees and PACs to members. Spending on a race is not money the candidate received; the site keeps the two apart.

How bills and votes are selected

Bills

Congress.gov has no subject search, so every bill title and every CRS summary in the 119th Congress is scanned against an AI vocabulary, and a Claude model scores each match for relevance and writes a plain-English summary. Bills scoring 0.5 or higher are shown; anything from 0.3 is kept in the data so the threshold can be inspected. A short hand-curated watchlist covers bills the vocabulary misses; those are marked on their page. Last run: 18,613 titles scanned, 220 matched by title, 71 more found only in a summary, 3 of 3 watchlist entries resolved.

Votes

The House Clerk's index of every roll call and senate.gov's vote menus are joined against the tracked bills on every run, so a bill tracked today picks up the votes it had last year. A vote is kept when it is on a tracked bill, when its own question or description mentions AI (that rule captures the Senate's 99-1 vote to strike the state-law moratorium from H.R. 1, an amendment to a budget bill), or when it is an amendment to a bill that is itself about AI. Amendment votes on omnibus bills that happen to contain AI provisions are not counted as AI votes. Each roll call carries the vote category (passage, amendment, cloture, procedural) and the number of roster seats that could not be matched to a member, which is zero unless the page says otherwise. Last run: 1,547 roll calls listed by the chambers, 17 kept with full rosters. Congress.gov's own list of recorded votes for each tracked bill is reconciled against what was collected, and a missing vote fails the run.

Members

Everyone who has served in the 119th Congress, from the unitedstates/congress-legislators project. A member who leaves keeps their votes and statements and is marked as having left.

What the classifiers do, and how well

Two fields per bill and three per statement are written by a model: the bill's relevance score and summary, and the statement's relevance, stance, and one-line summary. Every such row records which model, which prompt, and which input produced it. The relevance number is the model's judgement, not a calibrated probability.

Not yet measured

A reference set is being hand-labelled. Until it exists this page reports no accuracy figure, because there is none to report. Labels have been spot-checked while building the site, which is not a measurement.

The statement corpus leans one way: 196 releases tagged toward oversight, 9 away, 66 neutral or mixed. Members rarely issue a press release against AI safety; that is the corpus, not the classifier.

Said and voted, side by side. No score.

Where a member both voted on a bill and cited it in a release (by number, or by the bill's exact title), the two are shown together on the member's page: the position, the vote category, the stance tag, and the text. No percentage is drawn from them. A stance is toward oversight of AI in general; a vote is on one measure, which may loosen oversight, strike a section, or be a procedural motion. Calling the pair consistent or not would need a reading of each bill's direction that the data does not carry. An earlier version of this site computed such a score; it has been withdrawn. Currently 5 such pairs across 3 members.

Donor influence and conflict indices are not computed and are not shown. Both would need data sources (lobbying, STOCK Act trades) that are not wired up.

Money: what each table can and cannot show

Super PAC spending (Schedule E)

Independent expenditures by the committees listed in super_pacs.json, a reviewed registry with an evidence link and review date for each. Totals are FEC's own per-candidate aggregate, which reconciles 24/48-hour notices with the periodic reports that restate them; a total built any other way is labelled. A filer can also amend a filing after making it, and only the amended figure counts: where that happened the line keeps what the earlier version said, so spending that was reported and then withdrawn is visible as such rather than as a $0 line. Every listed committee id is checked against FEC on every run, and other super PACs spending large sums in the same races are flagged for review rather than added on their own; those reviewed as not AI-industry money are recorded with what they are in excluded_committees.json. Every network is read from the same endpoint with the same rules.

What the targeted candidates say

A sitting member's position is their press releases (the Said record). A challenger has none here, so for every non-member candidate with $1 million or more of listed-network spending, candidate_positions.json holds their own words on AI, quoted verbatim from a linked source, or records that the campaign site says nothing about it. No stance is assigned.

Who funds the networks

Each super PAC's own receipts, from Schedule A. This is where the two networks differ in what can be seen, not in how they are treated: Leading the Future: The super PAC's donors are itemized on its own FEC Schedule A, so the funders above can be checked against filings. Its affiliated nonprofit, Build American AI, does not disclose donors. Public First: Jobs and Democracy and Defending Our Values are funded mainly by Public First Action, a 501(c)(4) that does not disclose its donors. Anthropic's gift is known because Anthropic announced it, not from a filing; the PAC says that money is restricted to public education. Dream NYC is the exception: its $2.8M is itemized on its own Schedule A, so the AI-lab money in it is checkable by name — except its largest single source, an entity called Elevate America ($1.15M), which is not the Michigan super PAC of that name and about which the record says nothing. Guardrails Alliance: The super PAC's donors are itemized on its own FEC Schedule A, so the funders above can be checked against filings.

Electioneering ads (Form 9)

A broadcast ad naming a candidate inside 60 days of the general election or 30 days of a primary must be reported even by a nonprofit that files nothing else. This is the only FEC window onto the 501(c)(4) side of the networks. Outside those windows, and for digital advertising, that spending is not in any filing this site can read.

Contributions to members (Schedule A)

Itemized receipts where the employer or contributor resolves through employer_aliases.json. The employer field is free text, so the alias table names each spelling it accepts and each substring hit it rejects. The FEC itemizes a contributor once their gifts to a committee pass $200 in aggregate; gifts below that appear only for donors who also gave more. Employees' personal giving and company PAC giving are separate categories.

Freshness, changes, and corrections

Each table records when it was last read from its source and whether that run completed; pages show it, and the manifest carries it per table with a checksum. Votes and money refresh daily, everything weekly. Every run appends what it added, removed, and changed to changes.json.

  • bills: Sep 9, 2026
  • donations: Sep 9, 2026 (incomplete)
  • electioneering: Sep 11, 2026
  • funders: Sep 9, 2026
  • outside_spending: Sep 11, 2026
  • politicians: Sep 9, 2026
  • scores: Sep 11, 2026
  • statements: Sep 9, 2026
  • votes: Sep 11, 2026

If a row disagrees with its primary source, the primary source is right and the row is wrong. Reviewed corrections are recorded in overrides.json with the reason and evidence, and are applied on every rebuild so a reseed cannot undo them. Report an error by email with the row id or page and the source that shows the problem.

For researchers and agents

Every page is generated from committed JSON tables, and the same tables are published at the same commit. Start with the manifest, which lists each table with its schema, row count, checksum, and freshness; the llms.txt guide describes every field, which are model output, and how to cite. Each member, bill, vote, and candidate page links its own JSON document, joined the way you would join it.

Cite the primary record for the event, and this site's commit for the selection, labels, and totals it added.

Who runs this

Built and run by Jonas Neves, independently. No funding, no affiliation with any AI company, campaign, or PAC. The site takes no position on AI regulation.

WhoVotedWhy is for informational purposes only and does not endorse any candidate, party, or position. The data is published in full; the pipeline that builds it is described on this page. Home