Sources & methods

How it works

The essentials

  • We compare recorded votes, using the same rules for every senator.
  • Issue pages also show a separate position from the bills each senator backed. It is never combined with the vote figures.
  • The map groups senators who vote alike. It does not rate them as good or bad.
  • We leave out near-unanimous votes. Voice votes and unanimous consent cannot be measured.
  • Small samples are labeled “Not enough votes,” and exact records remain available.

The map places each senator so that distance reflects how often two senators cast the same vote. This page lists every rule it uses. No rule is applied to some senators and not others.

Sources

Roll call votes and each senator's vote come from Voteview, which publishes the official Senate records. Names, Bioguide IDs, states, and the caucus of independent senators come from the congress-legislators project. The map uses no third-party ratings. Committee assignments and leadership roles also come from the congress-legislators project. They are records only, and no vote is involved. Earmark records come from the explanatory statements printed in the Congressional Record with the enacted fiscal 2026 laws. They are records only, and no vote is involved.

Senator portraits are stored with the site and matched by Bioguide ID. They come from the public-domain congressional photo collection, with Alan Armstrong’s portrait from the Senate HELP Committee. Portraits are for identification and do not affect any figure.

What counts as a vote

A Yea and a Nay are the votes that count. Every other position, including Present, Not Voting, and announced or paired positions, is treated as missing. Only senators' own recorded votes are used, so records for the President and other non-senators are left out.

Which roll calls are used

A roll call is kept when the losing side received at least 10% of the votes cast, counting senators only. Votes on nominations are included.

Only recorded roll calls can be counted. The Senate also passes measures by unanimous consent or voice vote, and those leave no record of how each senator voted. Agreement on those measures cannot appear in any figure on this site, so agreement rates describe recorded, contested votes, not everything the Senate does.

Agreement between two senators

Agreement is the number of shared votes on which both voted the same way, divided by the number of shared votes, where a shared vote is one that both cast as a Yea or a Nay. A pair is compared only when it has at least 50 shared votes. Details show each match as a percentage of its shared votes.

Who is on the map

The map has a core and placed senators. The core is chosen first: senators are removed one at a time until every remaining pair has at least 50 shared votes. Each step removes the senator with the most pairs under 50. Ties go to the senator with fewer contested votes cast, and then to the lower Bioguide ID. Pairs usually fall short when one senator followed another in a seat, so the two never voted together; an appointed replacement is the usual case.

A senator outside the core is placed on the map when they have at least 50 shared votes with at least 50 percent of the core senators (100 core senators in this build). This is the same rule for every senator. 2 senators are placed in this build. Each placed senator is marked on the map. Anyone who meets neither test is listed separately with the reason.

The details panel for a senator lists the five closest senators in the same party or caucus and the five closest in the other party. Each has its percentage and shared votes. Ties go to the lower Bioguide ID.

Layout

Core senators are positioned by classical multidimensional scaling of the distance 1 minus agreement. The map uses the same scale on both axes, so distance on the map means the same thing in every direction. Core senators do not move when a senator is placed.

A placed senator is put where map distances, read at the scale bar's scale, best match that senator's measured pairs with core senators in the least-squares sense: the position that makes the sum of the squared differences between map distance and true distance as small as it can be. Every measured pair counts equally. The same rule applies to everyone. A placed position rests on fewer votes than a core position, so the map marks it with a dashed ring, and the details panel and profile give a note with the number of pairs that could not be measured.

Orientation is set by arithmetic only. On each axis, the senator farthest from the center is placed on the left or at the bottom. The sides carry no meaning of their own, so left, right, up and down say nothing about any senator.

Reading the map

Distance is agreement. Senators who vote alike sit close together, and senators who vote differently sit far apart.

Each dot sits at its exact computed position. The map makes no display adjustment, so no dot is pushed away from its neighbors. Crowded areas are crowded because those senators vote alike.

Left, right, up and down carry no meaning. Read the distance between two dots, not their direction.

The scale bar

The scale bar under the map shows what a fixed length on screen means, in points of agreement. Its length changes with zoom, so it always matches the view.

The buttons that zoom to the Democrats or the Republicans fit one party to the view. They keep the same scale on both axes, so distances stay true to each other. A note under the map says when the view is zoomed.

How closely the map fits

Two axes cannot hold every difference between senators, so the map keeps the largest patterns and some small differences are lost. The table covers core pairs, the pairs among core senators that the layout is computed from. The last row, when shown, measures the placed senators against the core on their measured pairs. The table compares distance on the map with the true distance, one minus agreement. A correlation of 1 would be a perfect straight-line match. The average gap is the mean difference, in points of agreement, between true distance and what the scale bar would read for that pair. The largest gap is the single pair furthest from that reading.

Pairs comparedPairsCorrelationAverage gap (points)Largest gap (points)
All core pairs49500.9981.219.3
Pairs across the parties24910.9930.46.5
Pairs in the same party or caucus24590.8522.019.3
Pairs within the Democratic side10810.8382.610.1
Pairs within the Republican side13780.8811.619.3
Placed senators, measured pairs1860.9962.716.1

The bar is closest to true distance across the parties, with a correlation of 0.993 and an average gap of 0.4 points. Within a side the fit is looser: correlations run from 0.838 to 0.881, and average gaps from 1.6 to 2.6 points. So a bar length within a party can stand for fewer points than it does across the map: about 0.66 to 0.92 of the points. The largest gap for any single pair is 19.3 points. A single outlying senator can sit noticeably farther from their side than the bar implies, which is why the panel and the hover label give the exact figure.

Exact figures come from selecting a senator. The panel and the hover label show the agreement itself, not the position on the map.

Selecting a senator

Selecting a senator keeps every dot in its party color and shape. Lines are drawn from the selected senator to the three other-party senators closest to them, with the percentage of agreement on each line. Hovering another dot shows the exact agreement and shared votes for that pair.

Pairs under 50 shared votes show no number. The panel reads "Not enough shared votes" for them.

The pair numbers are precomputed by the pipeline from the official votes. The browser computes nothing from raw votes; it only reads the figures the build exports.

Most and least with their party

Below the map, two lists show the five senators on each side with the highest party adherence and the five with the lowest. Party adherence is defined under that heading below, and an independent counts with the caucus they join. Ties are broken by a fixed order of member IDs. The lists describe how often votes matched the party majority, not why.

Member profiles

Each senator has a profile page, reached from the View full profile link in the map's details panel or from a name in the lists below the map. A profile repeats the figures below for one senator and lists that senator's party breaks. Senators who are not on the map have a profile too, showing what their record supports.

Party adherence

Party adherence is the share of contested votes on which a senator voted with the majority of their party. The party majority is the side most members of that party took on the vote, counted among members of that party only. Independents are measured against the party they caucus with. Their profile labels them that way, and they are not counted in that party's majority. A vote on which the party split evenly has no majority, so it is left out of the count.

Attendance

Attendance is the share of roll calls a senator missed. The count covers every roll call held while the senator was serving, contested or not. Roll calls before they joined or after they left do not count. Present counts as attending, even though it is not a Yea or a Nay for agreement. A missed vote is any other recorded position.

Closest senators

A profile lists the 5 senators who agree most often with that senator in the same party or caucus, and the 5 in the other party. Each pair needs at least 50 shared votes, the same rule as the map. The lists include every senator who served this Congress, so they can name senators who are not on the map. Ties go to the lower Bioguide ID.

Party breaks

A party break is a contested vote on which a senator voted against the majority of their party. Each break is listed with its date, the question, a description of the vote, how the senator voted, how the party majority voted, and a link to the bill or nomination where there is one. A break is a fact about one vote. It can have many reasons, and the list does not say which applied.

Issue tags

Each contested roll call carries one tag, the policy area of its bill. The Congressional Research Service at the Library of Congress assigns policy areas, and they are published on Congress.gov.

Tags are read at each build from GovInfo BILLSTATUS, or from the Congress.gov API when a key is available. The two carry the same policy area field, and when compared on 31 October 2026 they gave the same tag for every contested roll call. Tags were added on 31 October 2026.

A tag describes the bill, not the individual vote. An amendment or procedural motion carries its bill's tag, even when the vote concerns a narrower point.

Votes on nominations are listed under Nominations. A bill that has no policy area yet is listed under Bill without a policy area. A vote tied to no bill is listed under No bill. None of these tags is guessed.

Executive resolutions that authorize en bloc consideration of nominations are bills, so they carry the policy area their source gives, not Nominations.

A score by issue applies the 20-vote minimum described below. The coverage report lists how many contested votes and bills carry each tag, and which issues meet the minimum: the tag coverage report.

Where a senator stands by issue

The issue view on a senator's profile shows where that senator sits on each issue from votes, on the same main axis as the map. For each contested vote, find the average map position of the senators who voted the same way as this senator. The issue position is the average of those points across the issue's votes on which the senator voted Yea or Nay.

Only that issue's votes decide the position. The map supplies the scale, so every position sits on the map's main axis and lies inside its range. Two senators who cast the same votes on an issue get the same position on it. Only core senators set the averages, so a placed senator's position does not feed any other senator's figures. A senator who is not on the map can still have an issue position, because it comes from their own votes.

Averaging pulls positions toward the center, because each point is an average of many senators. For that reason the page also shows All contested votes, computed in the same way over every contested vote, so each issue can be compared with it.

A senator needs at least 20 votes cast on an issue before a position is shown. Below that, the page gives no position from votes and says how many votes were cast. The issue's votes are still listed, so the record behind the figure stays visible.

Party adherence on an issue follows the rule above for party adherence: a vote on which the party split evenly is left out of the count. Adherence and party breaks on an issue are shown only when at least 20 counted votes remain.

When one bill accounts for more than half of a senator's votes on an issue, the issue page says so, with the count. Tags describe the bill, not each vote, so an issue can include amendments and procedural motions on other topics.

A position shows where a senator sits relative to other senators on these votes. It is not a stance for or against a policy, and the left and right ends of the axis have no meaning of their own.

How the plain summaries are written

The plain summaries on a profile and on each issue page, the At a glance block and the sentence under each issue, are written by one template for every senator. No sentence is written by hand or by AI. Each one restates a number the page also shows, or a rank or median of the numbers exported for all senators.

A percent is a share of the distance between the two caucus medians. A median needs at least 10 senators in its caucus. No percent is given when the medians are closer than 0.25 on the map's axis. The sentence then says only which median is nearer.

Votes-with-party ranks are exact and count senators in the same caucus. Attendance ranks are exact and count all senators. Both leave out short records. Senators who share a rank are described as tied for it.

A record under 50% of the Senate median of contested votes is called short, and it is not ranked.

A position within 10% of the distance between the medians counts as close to the party median.

Attendance is mentioned when a senator misses 2 times the Senate median share of missed votes or more, or misses none.

Leading roles are open leadership roles and the titles on full committees listed here: Chairman, Ranking Member, Vice Chairman, Cochairman. At most 2 are named in a sentence, and any others are counted.

Which issues differ most from the party uses positions from votes only. Positions from bills backed sit beside them and are not used to rank issues.

None of this changes any score. These rules only decide how the plain summaries are worded. They are stated here so that every sentence can be checked against the figures beside it.

Position from bills backed

Issue pages also show a second position, built from the Senate bills and resolutions the senator sponsored and cosponsored in the 119th Congress. It shows which senators this senator legislates alongside, not whether the senator is for or against a policy. It sits beside the position from votes and is never combined with it. The map, agreement and party adherence use roll calls only.

Each measure first gets a position from the map. Suppose a measure is backed by four senators on the map, at -0.2, 0.1, 0.5 and 0.9. For the senator at 0.9, the measure's position is the average of the other three, which is about 0.13. For the senator at -0.2, it is the average of 0.1, 0.5 and 0.9, which is 0.5. The senator being measured is always left out, so nobody sets their own position. A senator with no position on the map cannot set a measure's position.

A senator's position on an issue is the weighted average of the positions of the measures they backed in that policy area. A sponsored measure counts 2 times as much as a cosponsored one. Each senator is counted once per measure, and a sponsorship takes precedence over a cosponsorship. A withdrawn cosponsorship does not count.

A measure with no other backer on the map has no position. It is listed on the profile and marked as not counted, and it counts toward neither the position nor the minimum.

A position is shown only when at least 20 measures with a position count toward it, the same minimum as votes. Because the minimum counts measures, the same measures count at every weight. Where an issue has too few votes for a position from votes, the bills position stands alone and the page says so. Where an issue has too few of both, the page lists the actual votes and bills instead.

Measure positions are averages, so positions from bills sit closer to the middle of the axis than positions from votes. Read each one against the caucus rows beside it, not number against number. Each profile also shows an overall position from all bills backed, beside the overall position from votes. Each position also states which caucus median it is nearer and how many senators each median comes from. On some issues a caucus has only a handful of senators with a position from bills, so its median rests on few senators.

The sponsor weight is a fixed setting and was not tuned to these results. Correlation with the map is 0.900 at the weight used here, over 102 senators on the map. A correlation of 1 would mean positions from bills line up exactly with the map, and 0 would mean no straight-line relationship between them. The table shows how far positions would move at other weights, compared with the weight used here. Each move is measured on the map's main axis, which runs from -0.55 to 0.45.

Sponsor weightCorrelation with mapOverall mean moveOverall largest moveIssue mean moveIssue largest move
10.9220.0120.0510.0150.081
2 (used here)0.900————
40.8610.0170.0600.0200.094

Each row shows what would change if the sponsor weight were that value instead of 2. The largest move is the biggest shift for any one position, so it shows the effect at its extreme.

Legislative records

Each profile lists the Senate bills and resolutions that senator sponsored and cosponsored in the 119th Congress. The records come from GovInfo BILLSTATUS, the official bill status data, and cover S., S.J.Res., S.Con.Res., S.Res.. House measures are left out because senators cannot sponsor or cosponsor them.

A senator sponsors a measure when they introduce it, and cosponsors when they join as an additional supporter. A withdrawn cosponsorship is not counted, so a senator who withdrew from a measure and did not rejoin it is not counted for that measure. Each senator is counted once per measure.

A measure counts as having become law only when the official status data says that measure itself became law. The law number is shown where it is published. A Senate measure enacted through a House companion bill is not counted as having become law. Simple and concurrent resolutions cannot become law.

These are records. They feed no agreement, party adherence or map figure. Only the separate position from bills backed reads them. Sponsoring or cosponsoring a measure does not mean it moved.

Where a senator has no position on an issue, the issue still lists these records, with no position. Each measure appears under one issue, by its policy area. A measure with no policy area appears under "Bill without a policy area".

Legislative records through Oct. 29, 2026.

Amendments

Each profile lists the Senate amendments that senator filed in the 119th Congress. The records come from GovInfo BILLSTATUS, the official bill status data, which lists each amendment on the record of the measure it amends. All eight measure types are read, because senators amend House measures as well as Senate ones.

As of Sept. 30, 2026, the source holds 6848 Senate amendments, numbered up to 6848. 0 numbers in that range have no record in the source. An amendment to a treaty would not appear in BILLSTATUS, so a missing number could be one of those.

The official record gives purpose text for 398 of the 6848 amendments on the profiles. The text is shown exactly as given. It is mostly on amendments proposed on the floor, and the record gives none for the rest.

An amendment counts as adopted when an official action says the Senate agreed to it. Actions that record a withdrawal are excluded, because two withdrawn amendments carry the agreed-to action code. 160 of the amendments on the profiles are adopted by this rule.

A roll call is linked to an amendment only when it is a contested roll call in our data. A roll call can be on a motion about the amendment, such as a motion to table it, and not on the amendment itself. Each link shows the question and the result. The Yea and Nay counts are of senators only, so when the Vice President breaks a tie the counts shown are equal and the official action shows one more.

An amendment is credited to the sponsor the official record names. When another senator submitted or proposed it for that sponsor, it is still credited to the sponsor. Amendment cosponsors are not counted.

These are records. The count does not measure effort or success, many amendments are procedural or filed in bulk, and the records feed no score on this site. The amendments on each issue page are listed under the policy area of the bill they amend, which can differ from the amendment's own topic.

Amendments through Sept. 30, 2026.

Committees and leadership

Each profile lists the Senate committees and joint committees the senator sits on in the 119th Congress, with any title the source gives, and any Senate leadership roles that overlap the 119th Congress. The data comes from the congress-legislators project, which publishes committee rosters and legislator records. It does not come from a vote.

Committee rosters list senators only. Subcommittees appear under their committee. Joint committees show their Senate members, and House members of joint committees are left out, so a chair from the House does not appear.

Titles are shown as the source prints them, such as Chair, Ranking Member, or Ex Officio. Leadership roles are shown with their dates as the source gives them.

The source lists current assignments only. A senator who has left the Senate shows no assignments, and a new senator may not appear yet. Past assignments are not shown.

The date shown is when the source last published its files. The lists may have been gathered earlier than that date.

Committees and subcommittees are listed alphabetically by name, and the order is not a ranking. Nothing here feeds any score, agreement figure, party adherence, attendance figure or map position.

Committees are not linked to issues. The source describes the jurisdiction of Senate committees in prose and does not tie any committee to a policy area, so the site does not infer a link.

Committee data published Sept. 24, 2026.

Earmarks

An earmark, officially Congressionally Directed Spending, is an amount in an appropriations law set aside for a named project, at a senator's request. These items come from the tables printed with the enacted fiscal 2026 laws. The tables list funded projects only and do not state the amount each senator requested, so the amounts here are what the law provided for the project, not money a senator received.

The source for each law is the explanatory statement printed in the Congressional Record. The statements are:

The tables list funded items only. Requested amounts and requests that went unfunded are not shown. The committee publishes a table of all requests, and this site cannot read that table automatically.

Some senators decline to request earmarks, so an empty list is a record and not a gap. Because the tables list funded items only, an empty list means no funded project and does not show whether a request went unfunded.

A project requested jointly is listed in full on each senator's page. Each total counts a project once at its full amount, with the part shared with other senators shown separately, so totals should not be added across senators.

For Energy and Water, the amount is the table's Additional Amount column, which the source defines as the earmark.

Fiscal 2025 is not shown. That year was funded by a full-year continuing resolution, P.L. 119-4, which excluded earmarks.

Fiscal 2027 is not shown. The Senate committee has not reported its fiscal 2027 bills, and its table of requests could not be read automatically.

Fiscal 2026: 3896 items name no Senate requestor, and 0 name a Senate requestor that could not be matched to one senator. Both kinds are left out of the profiles.

Nothing here feeds any score, agreement figure, party adherence, attendance figure or map position.

Minimum of 20 votes

A score that rests on fewer than 20 votes reads "Not enough votes" and shows no figure. The votes are still listed with no position. The party break count and list are held back too, because the count together with the number of contested votes would reveal the same score.

Outside check

DW-NOMINATE scores are used only as an outside check on the layout. They feed no number shown on the map.

Version and updates

Method version 1.6. The newest vote in this build is from Sept. 30, 2026, and 893 of 915 roll calls are used. The data is generated when the site is built. There is no scheduled refresh yet. Changes to these rules are recorded in the project's changelog.