Methodology & sources

CivicRoll has one prime directive: we show, we never tell.We present the official record with links back to its source and let you draw your own conclusions. Here’s exactly how the data is gathered, kept correct, and checked.

Where the data comes from

Everything is sourced from official U.S. government records — all public domain or CC0. We never call these services live from the page; a separate pipeline pulls them into our own database, and the site reads only from that. Every figure on the site links back to its origin.

congress-legislators CC0
Member identity, party & term history (the arbiter for who served, in which party, on any date)
Visit source
Congress.gov API Public domain
Bills, summaries, member metadata
Visit source
House Clerk — EVS Public domain
House roll-call votes & member positions
Visit source
Senate.gov Public domain
Senate roll-call votes & member positions
Visit source

Upcoming votes & floor schedules

Upcoming-vote coverage comes from two live source lanes, each with real, disclosed limits — never the full floor calendar.

House: the docs.house.gov weekly floor-schedule XML. This covers only the bills listed on that schedule — not every bill the House may act on, and not committee markups.

Senate:senate.gov’s floor_schedule.xml. This source publishes session-day convene/adjourn/next-convene records only — it carries no measure-level upcoming-vote data, so Senate items here never carry a bill identity and can never be matched to a real vote. It is not the full Senate calendar.

Congress.gov’s upcoming floor legislation is unavailable in v1 and always will be until that changes: Congress.gov has no API endpoint and no RSS equivalent for upcoming floor legislation, and its site returns a 403 to non-browser access. CivicRoll does not impersonate a browser to bypass this. This lane always records a coverage status of error and contributes zero items — the House and Senate lanes above are the only live coverage.

Correct as of the date

Truth here isn’t static — it’s “correct as of a date.” Members switch parties, districts get redrawn, and seats change hands mid-term. We store party and seat as effective-dated history, not a single field that silently overwrites. So a vote always shows the party a member held on the day of that vote — for example, a representative who was Republican in 2024 and Independent in 2026 appears correctly for each period.

How we keep it accurate

Every ingest is validated before it’s trusted: vote tallies are reconciled against the individual recorded positions, every voter is cross-checked against the canonical member list, and any discrepancy is flagged for review rather than silently overwritten. The current dataset reconciles every roll-call vote with zero tally errors.

No thumb on the scale

Neutrality is the whole point. There is no “important votes” list reflecting our priorities — votes are sorted by neutral, disclosed rules like date. We present facts side by side and never assert or imply causation we can’t prove. If the numbers embarrass a side, that’s the data, not us.

Your vote & agreement

You can record how you would have voted on a roll call and see, honestly, where that lines up with your representatives. This is never framed as a ranking — it’s a literal count, and we say so on the page.

The universe: stance capture is offered only on verified final-passage votes — the disclosed thin slice, not every procedural motion or by-name vote (like a Speaker election).

The math: among the votes where you recorded Yea or Nay andthe member had an eligible Yea or Nay position, we count how many match: “You and [member] voted the same way on X of N votes you weighed in on.” Percentages appear once you’ve weighed in on 10 or more eligible votes with that member; below that threshold, we show the counts alone.

Exclusion accounting: a member’s Present, Not Voting, or any position label we don’t recognize is excluded from the count and shown separately as a count — never silently dropped. We always show how many eligible votes you haven’t weighed in on yet, and a standing note that this reflects only the votes you chose, not a member’s overall record.

Skip ≠ abstain:choosing Skip records that you deliberately declined to weigh in on that vote. It is not the same as a member’s Present vote, and it never counts toward agreement or disagreement — it just means you haven’t weighed in.

Where this lives:entirely in your browser’s local storage. It is never sent to our servers, never included in any analytics event, and never appears in a URL, query string, or request header. See Privacy for details.

Shareable agreement cards

From your agreement view, you can generate an image of your agreement counts with a representative to share elsewhere. It’s built entirely in your browser — there’s no server round-trip, no image is stored on our servers, and the counts on it come only from the same already-computed numbers shown on the page. It is never sent anywhere as part of generating it.

Same honesty rules as the page:the card uses the same wording, “You and [member] voted the same way on X of N selected eligible votes,” and follows the same no-percentage-below-10 rule. The line “This reflects only votes the user chose” is shown at the same size and weight as the result itself — never smaller print. There are no comparison or ranking cards, and no finance content on any card.

Not authenticated by CivicRoll:a downloaded or shared card is created by a user from their own locally stored choices. It carries a template-version identifier, a link back to this page, and the date it was made — but it carries no seal, checkmark, or “verified” mark, because CivicRoll does not authenticate downloaded images. Anyone can edit an image after downloading it; treat a card the same way you’d treat any screenshot someone shares with you.

AI-generated bill summaries

Some bill pages show a plain-language AI-generated summary, labeled as such and shown next to a link to the official source. Each one is generated only from the bill’s official congress.gov summary text already in our database — never full bill text — and is held for human review before it goes live. AI summaries currently cover bills with verified final-passage votes. If a bill has no AI summary, that section is simply absent — we never show a placeholder.

What this doesn't cover (yet)

Today CivicRoll covers federal legislators, bills, and roll-call votes for the 118th–119th Congress. Address-level representative lookup (“find your reps”) is live today. Campaign-finance data is not live yet — no finance figures appear anywhere on the site today.

When we do add money data, it will come from OpenFEC only, and we’ll be specific about scope rather than characterizing the money picture as a whole: official FEC records capture disclosedmoney, and some donors are not disclosed to the FEC under current law. Candidate-committee receipts and outside (independent) spending will always be shown as distinct figures, never combined or compared as if they were the same kind of money. We will not describe the scale of undisclosed money in vague magnitude terms unless we can cite an actual number for the exact scope being displayed.

Campaign-finance scope language above is provisional, pending review by counsel and a campaign-finance-law expert.