How scoring works

Every number here is math you can check.

RepCheck compares your answers to a representative’s actual roll-call votes. It does not read minds, rate parties, or decide who is right. It counts votes with a fixed formula — the same inputs always produce the same score. This page lists every question, every constant, and every rule, so you can audit any number you see.

Nothing about you is stored. Your answers and zip code live only inside the link in your address bar. There is no account and no database of users.

The 12 questions

You rate 12 statements. Each one names a specific government action, not a value judgment, so agreeing and disagreeing are both legitimate positions. This is the exact wording, in the exact order, used everywhere in the app. Six further questions are optional; they are listed under the compass.

  1. 1
    The federal government should protect access to abortion nationwide.abortion
    Policy areas used to suggest bills to the curator: Health
  2. 2
    The federal government should place stricter limits on who can buy firearms.guns
    Policy areas used to suggest bills to the curator: Crime and Law Enforcement
  3. 3
    The federal government should make it harder to enter and remain in the U.S. without legal status.immigration
    Policy areas used to suggest bills to the curator: Immigration
  4. 4
    The federal government should raise taxes on corporations and high earners.taxes
    Policy areas used to suggest bills to the curator: Taxation, Economics and Public Finance
  5. 5
    The federal government should regulate industry more strictly to reduce climate change.climate
    Policy areas used to suggest bills to the curator: Environmental Protection, Energy
  6. 6
    The federal government should take a larger role in providing health insurance.healthcare
    Policy areas used to suggest bills to the curator: Health
  7. 7
    The federal government should raise the federal minimum wage and strengthen union protections.labor
    Policy areas used to suggest bills to the curator: Labor and Employment
  8. 8
    The federal government should spend more on public education and student-debt relief.education
    Policy areas used to suggest bills to the curator: Education
  9. 9
    The federal government should increase military and defense spending.defense
    Policy areas used to suggest bills to the curator: Armed Forces and National Security
  10. 10
    The federal government should expand Social Security, Medicare, and food assistance.safetynet
    Policy areas used to suggest bills to the curator: Social Welfare, Economics and Public Finance
  11. 11
    The federal government should set national standards making it easier to vote.elections
    Policy areas used to suggest bills to the curator: Government Operations and Politics
  12. 12
    The federal government should increase support programs for farmers and rural communities.agriculture
    Policy areas used to suggest bills to the curator: Agriculture and Food

How you answer

Each statement is rated on a five-point scale, or skipped:

A neutral 3 and a skip are treated the same way: the topic is left out of your score. A score is only ever built from topics you took a side on.

How a single vote is scored

Your answer becomes a stance between −1 and +1. The formula subtracts the neutral midpoint and halves the result:

your stance s = (answer − 3) / 2 answer 1 → −1.0 answer 4 → +0.5 answer 2 → −0.5 answer 5 → +1.0 answer 3 → 0 (excluded) skip → excluded

A representative’s vote is +1 for Yea, −1 for Nay. Present and Not Voting are never scored — they are counted and shown separately (“Did not vote: 3”). The curated map records, for each roll call, a direction: whether a Yea vote supports the “agree” side or the “disagree” side of the statement. Direction times vote gives the representative’s position on the topic, and the vote counts as agreement when that position matches the side you picked.

Three weights, and nothing else

Not every vote counts equally. Exactly three multipliers adjust a vote’s weight. No others are permitted anywhere in the code.

1. Significance W_sig — how consequential the vote was

Set per roll call by the curator when the vote is added to the map:

TierWhat it meansWeight
3Final passage of major legislation, veto override, treaty ratification2.0
2Final passage of ordinary legislation; the substantive amendment that is the topic’s core question1.5
1Procedural vote that directly decides the bill’s fate (cloture on the measure, motion to table the key amendment)1.0

Purely administrative votes — quorum calls, journal approval, non-determinative motions — are never entered into the map at all.

2. Recency W_rec — how recent the vote was

Older votes count less. Weight is fixed by the Congress in which the vote happened, measured against the current 119th Congress:

CongressYearsWeight
119th2025–261.0
118th2023–240.8
117th2021–220.6
116th and earlier2019–20 and beforeExcluded — not ingested

3. Bipartisan context W_bip — voting against your own party

A vote against the representative’s own party majority is a costly, high-information signal, so it counts for more. This is computed from the party vote totals recorded on each roll call — it is never a party-alignment score, and it never appears in your result.

W_bip = 1.5 if the vote differs from the party majority on that roll call W_bip = 1.0 otherwise (including an exact 50/50 party split)

Putting a single vote together

The three weights and the strength of your opinion multiply into one number:

w = |s| × W_sig × W_rec × W_bip

The |s| term means a “strongly” answer (stance ±1) weighs a vote twice as heavily as a mild one (stance ±0.5). A neutral or skipped answer has s = 0, so the whole topic drops out.

From votes to a topic score

For one topic, the alignment score is the share of weight that landed on votes you agreed with:

AlignScore = 100 × Σ (agree × w) / Σ w

The sum runs only over roll calls the representative actually voted Yea or Nay on. If there are fewer than 3 such votes on a topic, no score is shown — you see “Not enough votes on this topic to score.” RepCheck never guesses to fill a gap.

Every topic score is shown with its denominator (for example, “72% aligned · 18 votes scored”) and links straight to the underlying roll calls, so you can open the record behind any number.

The overall score

The overall number pools every scorable topic into the same ratio, so a topic with more or heavier votes carries proportionally more of the total:

Overall = 100 × Σ_topics Σ_votes (agree × w) / Σ_topics Σ_votes w

Only topics you took a side on and that cleared the 3-vote minimum are included. If fewer than 4 topics can be scored — common for a representative seated mid-term — the number is labeled “Partial record — n topics scored” so it is never mistaken for a complete picture.

Rounding: displayed percentages are rounded half-up to a whole number. The math itself uses full-precision decimals and rounds only at the very end, never in the middle.

A worked example

Suppose you answer the firearms statement with 5 (stance s = +1). The representative has three curated votes on that topic:

Roll callDirectionVoteAgree?W_sigW_recW_bipwagree × w
117 · Senate #235 — background checks (Yea = agree)+1Yeayes2.00.61.51.801.80
118 · House #41 — repeal rule (Yea = disagree)−1Yeano1.50.81.01.200
119 · Senate #12 — cloture (Yea = agree)+1Nayno1.01.01.01.000
AlignScore = 100 × 1.80 / (1.80 + 1.20 + 1.00) = 100 × 1.80 / 4.00 = 45 → "45% aligned · 3 votes scored"

The Gap

A Gap is a documented public statement by a representative that contradicts the direction of their own voting record on the same topic. It is measured the same way as a topic score, but with one deliberate difference: the strength of your opinion is left out, because a Gap is about the representative’s consistency, not about you.

A Gap is a serious claim, so it is built to fail closed. The product bar is blunt:

Every Gap card must survive being screenshotted and fact-checked by the representative’s own press office.

To reach that bar, a statement must clear all five of these gates. Any one failure drops it silently:

  1. Official channels only. Press releases and floor statements from the representative’s own .house.gov / .senate.gov site or the official Congressional record. Tweets, campaign sites, TV transcripts, and news articles are excluded — a defensibility decision, not a technical one.
  2. Verbatim-quote verification. The quoted sentence must appear word-for-word in the fetched official source, checked in code. An automated reader can misjudge a stance, but it cannot invent a quote — if the words are not there, the item is dropped.
  3. High confidence. An automated language model (run at temperature 0, so it is deterministic) reads the statement against the exact question wording. Its confidence must reach at least 0.90, enforced in the code and again as a database constraint.
  4. A consistent record only. A Gap is only declared when the voting record leans one way with a strength of at least 0.6 (roughly 80/20 or stronger) across at least 3 votes. A mixed record never produces a Gap. This is the anti-gotcha guarantee.
  5. At most three per representative. Only the three strongest Gaps are shown — one per topic at most. Restraint is the credibility strategy. When there is no Gap, nothing is shown; the absence of a contradiction is not advertised as a badge.

Every Gap card shows the exact quote, its date, and a link to the source, next to the contradicting votes and their dates and links. The closing line is fixed and non-editorial: “These are the records. You decide.”

The compass

The 12 questions above measure one thing well: how much the federal government should do in the economy. They say almost nothing about a second, independent question — how much power the state should hold over the individual. So there are 6 optional questions that measure exactly that, and only that. Answering them places you on a second axis. Skipping them leaves that axis blank; it is never guessed.

  1. 13
    The federal government should be able to collect Americans' phone and internet records without an individual warrant in order to prevent terrorism.surveillance
  2. 14
    The federal government should be able to require online platforms to remove content it designates as dangerous misinformation.speech
  3. 15
    The federal government should end the federal ban on marijuana and leave the question to the states.drugs
  4. 16
    The federal government should reduce mandatory minimum prison sentences and expand rehabilitation programs.justice
  5. 17
    The federal government should require Congress to authorize military action before the President commits U.S. forces to sustained combat.execpower
  6. 18
    The federal government should impose stricter penalties on protests that block roads or disrupt commerce.protest

Three of the six put the authority position on “agree” and three put the liberty position there. So someone who simply agrees with everything lands in the middle of the vertical axis rather than at a pole. That is deliberate, and it is a property the original 12 do not have.

What each question contributes

Every question pulls on one or both axes by a fixed amount, set out below. A positive economic number means “agree” is the smaller-government position; a positive liberty number means “agree” is the individual-autonomy position. These are editorial judgments, they live in one file (lib/compass.ts), and they can be challenged with a pull request exactly like the bill map.

QuestionEconomicLiberty
abortion1.0
guns-0.5-0.5
immigration-1.0
taxes-1.0
climate-1.0
healthcare-1.0
labor-1.0
education-1.0
defense0.5-0.5
safetynet-1.0
elections1.0
agriculture-1.0
surveillance-1.0
speech-1.0
drugs1.0
justice1.0
execpower1.0
protest-1.0

Your position on an axis is the average of your answers on it, weighted by those numbers. Your representatives are placed by the same formula, with their vote record standing in for their answers: for each question we take how consistently their curated votes back that statement (the same number the Gap engine uses), so a representative’s dot can never contradict their Gap card.

Two things the compass will not do

It will not place you vertically on the strength of the original 12. Five of them brush against state power, and they are enough to produce a number — but it would be a number inferred from questions written to ask something else. The vertical axis stays blank until at least 2 of the six are answered. Links shared before the six existed keep working, and keep their original scores exactly.

It will not place a representative we cannot place. A representative needs a scored record on at least 2 of the six. That bar is not always met, and where it is not, we say so instead of drawing a dot. Across the 117th, 118th and 119th Congresses the Senate held decisive floor votes on only two of these six subjects — surveillance and war powers. It cast none at all on speech, sentencing reform, or protest penalties. That is a fact about the Senate’s record, not a gap in ours, and the six questions still place you whether or not Congress ever voted on them.

The map is public

Deciding which roll call belongs to which topic — and its direction and significance — is an editorial act, and it is where a non-partisan tool lives or dies. RepCheck does not hide that act inside an algorithm. The entire bill-to-question map lives in the open repository as db/seed/bill-map.json, governed by three rules:

Bias is inevitable in any selection. Hidden bias is the only fatal kind. Every scoring input here is inspectable, and every one of them is open to challenge.

What this deliberately does not do