How every score is built
This is an independent project. It is not published, endorsed or reviewed by Democratic Socialists of America. It applies DSA's published program as a measuring stick to the public legislative record.
1. The evidence base
A member's score is the share of their scored actions that match the DSA position. Two kinds of action count, and each counts once:
- Cosponsorship of a priority bill in the member's own chamber. Being the sponsor also counts. Cosponsoring is voluntary and public.
- A recorded roll-call vote on a priority bill: Yea on a DSA-supported bill, or Nay on a DSA-opposed bill.
Missing a vote is not treated as opposition. A member who is absent is simply not scored on that vote, so illness, travel and late entry into office do not mechanically lower a score. Every member's page shows exactly how many cosponsorships and votes went into the legislative score, and how the AIPAC penalty was applied.
2. What gets tracked
The catalog contains β bill entries across seven DSA pillars: labor, universal healthcare, housing, climate and public power, peace and anti-imperialism, taxing the rich, and civil rights and justice. β of them have a recorded roll call; β are tracked for cosponsorship. House and Senate versions are scored separately because members can only cosponsor and vote in their own chamber.
Bills are selected for one reason: they force a clear choice between working-class interests and corporate, carceral or imperial interests. Bills that are purely symbolic, or whose DSA position would be genuinely ambiguous, are left out. The full list, with the reason for each position, is on the Legislation page.
3. The AIPAC-linked money penalty
DSA's program is explicitly anti-imperialist, and AIPAC is one of the largest institutional vehicles for pro-Israel political money in U.S. elections. A member can vote well on domestic policy and still be materially entangled with that project, so the scoreboard separates the two:
- Legislative score β cosponsorships and recorded votes, as described above.
- AIPAC support penalty β a deduction applied after the legislative score, based on disclosed AIPAC PAC direct support and United Democracy Project independent expenditures for the member.
| AIPAC-linked support | Deduction |
|---|---|
| Under $10,000 | 0 |
| $10,000 β $49,999 | β12 |
| $50,000 β $199,999 | β16 |
| $200,000 β $999,999 | β20 |
| $1,000,000 or more | β25 |
Only money spent supporting the member is penalized. Money spent against a member is shown on their page as context β being targeted by AIPAC is not treated as a reward, and opposition spending is not added to anyone's score.
The source is the FEC-derived AIPAC tracker published by GovGreed, which aggregates AIPAC PAC (FEC ID C00797670) direct contributions and United Democracy Project (FEC ID C00799031) independent expenditures for and against sitting members. The figures are cumulative for 2022β2026. They are disclosed domestic political spending, not foreign-government money. If the feed is unavailable, the last cached copy is used and the build is flagged; if there is no cached copy, no penalty is applied and the methodology page says so.
4. Campaign finance and lobbying (context)
Money is shown in two layers. The AIPAC penalty above affects the score. The campaign-finance and lobbying panels are context only and never change a grade.
- Campaign finance β FEC summary for the 2026 cycle: total contributions, individual contributions, all PAC contributions, disbursements, cash on hand and debts.
- Lobbying β AIPAC's own Senate LDA quarterly filings (LD-2), including total reported spending, quarters, issue codes and the committees and agencies lobbied.
- Votes β member-level positions still come from the official House Clerk and Senate LIS roll calls via Voteview. CIV.IQ's House roll-call tool returns vote totals, and its per-member history is capped at the latest 50 votes, so it is not used to score votes.
5. Grades and coverage
Letter grades group the percentage: A+ at 95+, A at 90, Aβ at 85, then five-point steps down through B+, B, Bβ, C+, C, Cβ, D+, D and Dβ, with F below 40. A grade is only as strong as its evidence, so every dossier carries a coverage label:
- High: at least 5 cosponsorship opportunities and 5 recorded votes.
- Medium: at least 3 cosponsorship opportunities or 2 recorded votes.
- Low: a thin record; treat the number as provisional.
Non-voting delegates from D.C., Puerto Rico, Guam, the U.S. Virgin Islands, American Samoa and the Northern Mariana Islands appear in the dataset and have cosponsorship records, but they are not given a letter grade because they cannot vote on the floor. Vacancies are not imputed.
6. Sources and refresh
The pipeline is deterministic and rebuilds from the same public sources every day. It never invents a vote, a cosponsor or a bio. If a source is unavailable, the build either falls back to the last cached copy and flags the dataset as degraded, or refuses to publish when too much of the record is missing.
7. Known limits
- Cosponsorship is cheaper than voting. A member can cosponsor a bill they know will never reach the floor. The score reflects that mixed reality rather than pretending only floor votes matter.
- Only the roll calls listed on the Legislation page are used. They are selected because the DSA position is clear, not because they are a random sample of the Congress.
- Committee votes, amendments, discharge petitions that never received a roll call, and state-level action are not scored.
- AIPAC money is a penalty, not a full campaign-finance audit. It covers AIPAC PAC and the United Democracy Project, cumulative 2022β2026. Other PACs, dark money and individual donors are not scored.
- The AIPAC totals are cumulative. A member who took AIPAC support in 2022 and broke with the group later is still penalized for the earlier money. The member page shows the raw dollars and the penalty so the judgment is visible.
- Party is a powerful predictor in a polarized Congress. The interesting signal is the deviation from party, which is why the map and the filters let you compare within a party.
8. Corrections
If a vote, cosponsor or bill title is wrong, the fix belongs in the pipeline, not in a hand-edited JSON
file. Re-run python3 scripts/update_scorecard.py --force, check the audit log, and the
site picks up the corrected build. The dataset version and every source fetch are recorded in
scripts/updater_audit.json.