When a bill receives a recorded roll call vote in the House or Senate, LegislationPatch retrieves the full vote data from the official clerk records — the House Clerk for House votes and the Senate for Senate votes. We pull member-level vote data, cross-reference each member against our 119th Congress member database, compute the party breakdown, and flag members who voted against their party's majority on close votes.
The Source: Official Roll Call Records
House roll call votes are published in XML format by the House Clerk at clerk.house.gov/evs/{year}/roll{N}.xml. Each file contains the full vote record: the question, the date, the vote totals (yea/nay/not voting/present by party), and the individual votes of every member who was recorded. The XML uses a standard structure that has been consistent for many years.
Senate roll call votes are published in XML format by the Senate at a similar endpoint. The Senate XML has a slightly different structure than the House version — notably, Senate XML doesn't include bioguide IDs for senators, so we match senators to our member database by last name and state rather than by a unique ID. This matching is generally reliable but can fail for senators who share a last name from the same state, a scenario we handle with additional disambiguation logic.
The Member Database
Our member database covers all 552 people who have held a seat in the 119th Congress, drawn from Congress.gov. The Congress has 541 seats at any one time — 100 senators, 435 voting representatives, and 6 non-voting members (5 delegates, from the District of Columbia, Guam, American Samoa, the U.S. Virgin Islands, and the Northern Mariana Islands, plus the Resident Commissioner of Puerto Rico). The number of individual profiles exceeds the number of seats because a single seat can be held by more than one person across a two-year Congress, as members resign, die, or arrive through special elections. Each member has a Bioguide ID, a unique identifier assigned by the Library of Congress that persists across that member's congressional career regardless of which chamber or district they represent. House members are identified by bioguide ID in the House XML, enabling exact matching.
For each member, we store: name, party, state, chamber, district, current term data, and biography sourced from Wikipedia (where available). The vote history on each member's profile page shows every bill in our database for which we have a recorded vote involving that member's chamber.
Crossover Vote Detection
Not all party-line votes are equally interesting. A 215-210 Republican vote where two Republicans voted no is more newsworthy than a 350-82 vote where the same two Republicans dissented. We apply a crossover detection threshold: crossover votes are only highlighted for bills where the margin between yeas and nays was within 30% of the total yea-plus-nay count. Bills outside that threshold aren't analyzed for crossovers even if crossovers occurred, because the vote wasn't competitive enough to make the crossovers politically significant.
When a bill meets the close-vote threshold, we identify members who voted against their party's majority direction — Republicans who voted nay when most Republicans voted yea, or vice versa — and feature them in the "Crossovers" section of the bill's voting record.
Voice Votes and Unanimous Consent
Not all floor votes produce roll call records. Many bills — particularly non-controversial legislation — pass by voice vote or unanimous consent, where no individual vote is recorded. When a bill in our database passed by voice vote or UC, we note the method but display no member-level vote data, because none was created. We don't treat the absence of a roll call record as a data gap — it accurately reflects how the chamber decided to handle the vote.
Updating Vote Data
Vote data for a given bill is retrieved after the vote occurs and stored as a static file in our database. We don't continuously poll for updates. For enacted legislation, the vote record is permanent; for in-progress bills, we update when the relevant chamber takes a recorded vote. The data is accurate as of the last time it was fetched for each bill.