The data
These are built from the same files the pages are drawn from, by the same run, so a download and a page cannot disagree. They are rebuilt whenever the site is.
Before you start
A bill number is not a key. HB100 names a different
bill in every biennium, so every table carries a term and
the pair bill + term is what joins
them. Getting this wrong silently merges two centuries of different
bills, which is a mistake this project has made and fixed.
The passage column in bills.csv is one
character per stop: where the bill started, then the House, the Senate,
the Governor and the statute book. p passed,
x stopped there, - never reached it. A
resolution has three characters rather than five, because it has fewer
places to go.
Where a number is missing it is missing on purpose. A hearing with no start time is one nobody has placed in the recording yet, not one that did not happen; a bill with no roll calls was decided on a voice vote, which records no individual member.
What is filled in, and for which terms
Every bill back to 1989 has a title and an outcome. The rest arrives term by term as the archived dockets are fetched, and a column that is empty below is empty because the record has not been collected yet — not because the bill had no sponsor.
| Term | Bills | Sponsor | Committee | Topic | Passage |
|---|---|---|---|---|---|
| 1989-1990 | 1,632 | none | none | none | none |
| 1991-1992 | 1,674 | none | none | none | none |
| 1993-1994 | 1,784 | none | none | none | none |
| 1995-1996 | 1,586 | none | none | none | none |
| 1997-1998 | 1,849 | none | 0% | none | none |
| 1999-2000 | 1,673 | none | 96% | none | none |
| 2001-2002 | 1,487 | none | 97% | none | none |
| 2003-2004 | 1,605 | none | 92% | none | none |
| 2005-2006 | 1,836 | none | 97% | none | none |
| 2007-2008 | 1,953 | none | 98% | none | none |
| 2009-2010 | 1,729 | none | 97% | none | none |
| 2011-2012 | 1,765 | none | 96% | none | none |
| 2013-2014 | 1,553 | none | 97% | none | none |
| 2015-2016 | 1,788 | none | 95% | none | none |
| 2017-2018 | 1,804 | none | 99% | none | 98% |
| 2019-2020 | 1,983 | none | 96% | none | 98% |
| 2021-2022 | 1,752 | none | 99% | none | none |
| 2023-2024 | 1,996 | 93% | 98% | none | 99% |
| 2025-2026 | 2,234 | 99% | 62% | 62% | 99% |
The tables
bills.csv
Every bill of every term: title, sponsor, committee, outcome and how far it got.
bill + term is the key every other table refers to. A bill number alone is not a key: HB100 names a different bill in every biennium.
Columns term, year, bill, title, sponsor, committee, topic, status, outcome, passage, roll_calls
legislators.csv
The sitting roster, with district, contact details and committee seats.
id is member_id in the vote and sponsor files.
Columns id, name, chamber, party, district, county, email, phone, committees, bills_sponsored, recorded_votes
rollcalls.csv
Every recorded vote: the question in the record's words and in plain English, the tally, and what it needed to carry.
roll_call is year-body-number and is the key the vote files use. bill + term joins bills.csv.
Columns roll_call, term, year, body, number, date, bill, question, question_plain, yeas, nays, not_voting, passed, procedural, threshold_needed, threshold_rule
proceedings.csv
Every hearing, executive session and floor debate on record, and the recording it is on where there is one.
bill + term joins bills.csv. video_id is a YouTube id.
Columns term, bill, body, kind, date, time, committee, venue, video_id, video_title, start_seconds, end_seconds, how_placed
sponsors.csv
Who put their name to which bill, and who was prime. Sponsoring is not voting and is not counted as one.
bill + term joins bills.csv; member_id joins legislators.csv.
Columns term, bill, member_id, member, party, chamber, prime, role
votes-2023-2024.csv
How every member voted on every roll call of 2023-2024. Join to rollcalls.csv on roll_call.
roll_call joins rollcalls.csv; bill + term joins bills.csv; member_id joins legislators.csv.
Columns roll_call, term, date, bill, question, member_id, member, party, chamber, vote
votes-2025-2026.csv
How every member voted on every roll call of 2025-2026. Join to rollcalls.csv on roll_call.
roll_call joins rollcalls.csv; bill + term joins bills.csv; member_id joins legislators.csv.
Columns roll_call, term, date, bill, question, member_id, member, party, chamber, vote
For programs
data/manifest.json lists every table with its rows, byte size and column names, so a script can discover what is here in one request instead of guessing from filenames. The site's own JSON is served from this origin too and is open to cross-origin requests: index.json (every bill), legislators.json, rollcalls_index.json.
Using it
The record itself is the State of New Hampshire's and is public. This site adds the parsing, the joining and the plain-English summaries. Use it for whatever you like; a link back to graniterecord.org helps somebody check your working, which is the point of publishing the whole thing rather than a chart of it.
Found something that looks wrong? It probably is, and the page for that bill links the General Court's own record so the two can be compared.