Data and API
Everything behind this site is free to reuse, with no key or sign-up. It's collected from official public records, last checked Sep 15, 2026. The Legislature's newest recorded action is from Aug 18, 2026.
JSON API
Static JSON files, one for each record, rebuilt with every update of the site.
/api/v1/meta.json- When the records were last checked, and the newest recorded action.
/api/v1/sessions.json- Every session on record.
/api/v1/bills/2025/index.json- Every bill in one session, briefly. Swap 2025 for any session.
/api/v1/bills/2025/ab656.json- One bill with its sponsors, every action, its roll calls, and links to every version, amendment and document on the Legislature's site. The name matches the bill page's address.
/api/v1/votes/{id}.json- One roll call with every member's vote. The id matches the roll call page's address.
/api/v1/legislators/index.json- Every state lawmaker on record.
/api/v1/legislators/{name}.json- One lawmaker: their profile, election, bills and votes. The name matches their page's address.
/api/v1/executive-orders.json- Every governor's executive orders, newest first, each with its official link.
/api/v1/elections/statewide.json- Statewide races on the 2026 ballot, and past statewide results.
/api/v1/elections/us-house.json- U.S. House candidates on the 2026 ballot.
/api/v1/elections/seats/assembly-15.json- One legislative seat: who holds it, their 2026 race, and its certified results, each labeled with the district maps it was held under. Swap in any seat, like senate-5.
/api/v1/elections/judicial.json- Certified Supreme Court and Court of Appeals results, with each race's official canvass file.
/api/v1/elections/referenda.json- Certified results of statewide referendum questions, with each one's official canvass file.
/api/v1/committees/index.json- Every committee and its chair.
/api/v1/committees/{id}.json- One committee: its members, and its upcoming and past hearings. The id matches the committee page's address.
/api/v1/hearings.json- Every committee hearing on record, with the bills on its agenda.
/api/v1/subjects/index.json- Every heading in the Legislature's subject index, with how many bills it holds.
/api/v1/subjects/{subject}.json- The bills filed under one subject. The name matches the subject page's address.
/api/v1/federal/index.json- Wisconsin's members of Congress.
/api/v1/federal/{name}.json- One member of Congress and every floor roll call they voted on. The name matches their page's address.
/api/v1/local/{city}/index.json- One city council's members.
/api/v1/local/{city}/{member}.json- One council member and their latest votes.
Campaign money
The figures behind the money pages, over all the history we have, in their own files so they're never beside a vote. Individual donors appear only in totals, never by name. Each file carries the notes needed to read it: corporations can't give to Wisconsin candidates, a PAC's money is its own, and a contribution isn't an endorsement of any vote. Full methodology
/api/v1/money/legislators/{name}.json- A state lawmaker's collected campaign receipts in all the history we have: totals, by kind of source and by quarter, the committees that gave the most, and what individual donors reported doing for a living.
/api/v1/money/committees/index.json- Committees that gave today's legislators $1,000 or more.
/api/v1/money/committees/{id}.json- One committee: what it gave and to whom, and its own reported money. The id matches its page's address.
/api/v1/money/independent.json- Every outside-spending filing, exactly as filed, with the Ethics Commission's transaction ID and report.
Feeds
Atom feeds for any feed reader. Each page that has one links to it next to its Follow button. For a summary of the whole Legislature, there's this week in the Legislature.
/feeds/bills/{id}.xml- Each step in one bill's history. Linked from the bill's page.
/feeds/legislators/{name}.xml- A state lawmaker's roll-call votes.
/feeds/committees/{id}.xml- A committee's hearings.
/feeds/local/{city}/{member}.xml- A city council member's votes.
/feeds/districts/assembly-15.xml- The roll-call votes of whoever holds one seat now. Swap in any seat, like senate-5.
/feeds/subjects/{subject}.xml- The newest steps on bills under one subject. The name matches the subject page's address.
/feeds/laws.xml- New laws, as the governor's approval numbers each act.
/feeds/vetoes.xml- Vetoes, partial vetoes and veto override attempts.
/feeds/money/independent.xml- New outside-spending filings, one at a time, with each one's transaction ID.
Calendars
Calendar files (iCal) that any calendar app can subscribe to or import.
Each hearing on the calendar also has its own file.
Bulk downloads
Each release of this site publishes the whole record on GitHub, beside the source code. These addresses always lead to the newest files:
badger-politics-csv.zip- CSV files for every session: bills, their actions, sponsors, roll calls and each member's vote, plus every lawmaker.
wi-filtered.sqlite.gz- The site's whole database (SQLite, compressed), with what's left out below removed.
SHA256SUMS- Checksums for checking a download.
README.txt- What each file holds, and where the records come from.
Earlier copies are on the releases page. Individual donors appear in the database only in totals: each of their receipts keeps its amount, date and recipient, without a name, occupation or filer ID.
Query the database on your own computer
The database is one SQLite file, so any SQLite tool can open it, such as the free
DB Browser for SQLite or the
sqlite3 command-line tool.
Unzip it first:
gunzip wi-filtered.sqlite.gz
sqlite3 wi-filtered.sqlite ".tables"
sqlite3 wi-filtered.sqlite "SELECT identifier, title FROM bills WHERE session_id = '2025' LIMIT 10"
Check the download against SHA256SUMS with sha256sum -c --ignore-missing SHA256SUMS.
What's left out
- No records on the site come from LegiScan. If any ever do, they'll be credited and linked under its CC BY 4.0 license and left out of every API file, feed and download.
- Eye on Lobbying registrations are withheld from the site and from everything published here.
How the records are collected
Every night, the Legislature's official pages are read with the open-source Open States scrapers and loaded into a single database behind hard checks. Roll-call totals must match the official counts, and a lawmaker's name that could mean two people stops the update rather than being guessed. Every source and check is on the About page, and the code is on GitHub.