About CongressForVotersBot

How Congress For Voters copies the House's and the Senate's own published vote records: what it asks for, how often, and how to reach a person about it.

Last updated

How it names itself

Every request it makes to senate.gov, clerk.house.gov or docs.house.gov carries this User-Agent, and never one a web browser would send:

CongressForVotersBot/1.0 (+https://congressforvoters.com/bot; support@congressforvoters.com)

The name, CongressForVotersBot, does not change from one request to the next. If the version number changes, this page will say so.

How to tell it is really us

A name is easy to copy, so every request also carries a signature, made with a key only we hold, over the address it is sent to. The matching public key is published at https://congressforvoters.com/.well-known/http-message-signatures-directory, so anyone can check a request against it.

The signature follows the Web Bot Auth proposal (HTTP Message Signatures, RFC 9421, with an Ed25519 key): the Signature, Signature-Input and Signature-Agent headers, tagged web-bot-auth, with Signature-Agent naming https://congressforvoters.com. Treat a request that uses our name without a valid signature as someone else's.

What it is for

Congress For Voters is a free, independent, non-partisan website that turns what Congress publishes about itself into a plain-language record, so a voter can see what the people they elected have done. Each bill and vote page links back to the House's or the Senate's own copy, which stays the official record.

The program copies the chambers' published vote files so that every vote page shows how each member voted, counted from the chamber's own file rather than retyped.

What it asks for

Only these published files. It does not crawl, follow links, load pages, images or scripts, sign in, or submit anything.

  • senate.gov — the list of the Senate's recorded votes for each session of the current Congress (/legislative/LIS/roll_call_lists/vote_menu_{congress}_{session}.xml), each vote's own file (/legislative/LIS/roll_call_votes/vote{congress}{session}/vote_{congress}_{session}_{number}.xml), and, when a senator joins or leaves, the two lists of senators (/about/senator-lookup.xml and /legislative/LIS_MEMBER/cvc_member_data.xml).
  • clerk.house.gov — each House vote's own file (/evs/{year}/roll{number}.xml), once for each vote.
  • docs.house.gov — the House's weekly floor schedule (/floor/), once a day.

How often, and how fast

Every 30 minutes it reads the Senate's two vote lists, then the file of each vote that is new or less than 7 days old — the days in which a chamber still corrects a tally. A vote older than that is read once and kept; it is not asked for again.

  • When a bill changes, the site updates it within ten minutes, and fetches the file of any vote the bill cites that it does not already hold — once for each vote, from either chamber.
  • One request at a time within each of these jobs. On a normal run of the Senate's that is the two lists and a few dozen vote files. The jobs run on their own schedules, so now and then two or three of them overlap.
  • When a request fails, it waits 2, 5, 15 and then 30 seconds between tries, and gives up after two minutes; the next run is 30 minutes later.
  • A run stops after six minutes, however much is left, and picks up where it stopped on the next run.

Where the requests come from

From Google Cloud, in the United States, where the site's scheduled jobs run. Now and then a person running the site repairs a record by hand, and those requests come from that person's own computer, with the same User-Agent and signature.

If it is causing a problem

Write to support@congressforvoters.com. A person reads every message, and we will slow it down, change what it asks for, or stop it — whatever you need. You can also see the contact page.