Skip to content

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.