home

MyTown · Research

Primary-source US local-government records · CC BY 4.0

This is a queryable snapshot of the MyTown corpus: records from US city councils, county boards and school districts, together with the public disclosure data that sits beside them. The meeting layer is collected from each government's own agenda portal (over a dozen different vendor platforms), and the rest comes from state comptrollers, state disclosure agencies and federal sources, with every row keeping the URL of the document it was read from. What is unusual here is the evidence trail: where a dollar figure, a decision or a vote was extracted from a document, the verbatim supporting text is stored in the row next to it, so you can read the sentence before you quote the number. The limits are just as real: coverage follows whatever each government actually chooses to publish, so some places have full minutes with named roll calls while many have only an agenda, and several tables cover a handful of states rather than the country. Parts of the corpus are machine-extracted, and a few tables are discovery indexes whose amounts must not be added together, so read the methodology before you publish anything from here.

94,727,099 rows across 74 tables · 8,372 governments in this snapshot · rebuilt nightly from the live database Rows are rows, not distinct events. One procurement or one meeting can appear in several rows and in more than one table, so a count(*) is not a count of things that happened.

Data dictionary: every table, its grain and its caveats →

New here? How to get an answer out of this →

Read before using: how these records were collected, what is machine-extracted, and which numbers are not safe to sum →

01

Explore prepared investigations

Saved queries with their caveats written into them. Start here if you want a figure you can defend in print.

  • Surveillance and police technology: the conservative total deduped, stated amounts only, a floor rather than a total
  • What is wrong with that table, counted duplicates, "not to exceed" ceilings, suspect attribution
  • Line items for one vendor, with the quote and the source document
  • Vendor totals by record type run this before quoting any vendor total; federal awards are not local spending
  • Awards, contracts and payments for one vendor
  • How one town's council voted name search; the largest councils can exceed the query time limit

All prepared queries and all 74 tables →

02

Query the database

Read-only SQL over the whole snapshot. Every result exports as CSV or JSON, and the query travels in its own URL, so a query is citable.

select mu.name as government, m.meeting_date,
       mv.motion, mv.member_name, mv.vote,
       coalesce(m.minutes_url,
                m.agenda_url) as source_doc
from member_votes mv
  join meetings m on m.id = mv.meeting_id
  join municipalities mu on mu.id = mv.muni_id
where mv.meeting_id = 870314
order by mv.motion, mv.member_name

The full roll call of one Denver City Council meeting, 20 July 2026: every named member's vote on every motion, next to the minutes PDF it was read out of. Change the meeting_id for any other meeting.

Run this query and edit it →

Queries are capped at 9 seconds and 2,000 returned rows. Substring searches over the multi-million-row tables (cf_transactions, member_votes) will hit that ceiling; filter by muni_id or state first.

03

Download for research

Two options, and they are not the same thing.

  • This exact database a 39.2 GB uncompressed SQLite file. A complete snapshot, not a sample: every table above is exported in full. It is a point in time, rebuilt nightly, so it lags the live database, and how far behind varies by table. The methodology page carries the per-table detail. Two tables in it are research-use only and are excluded from the redistributable dataset: evictions (CC BY-NC-SA, non-commercial) and mobility_outcomes (no explicit open license).
  • The packaged open dataset the CC BY 4.0 release of the core meeting layer (municipalities, meetings, briefs, decisions, extracted agenda and minutes text, transcripts, demographics) as gzipped SQLite, mirrored to Hugging Face as Parquet. Smaller, license-clean, and the right choice if you want the core rather than everything.
  • One result at a time: add .csv or .json to any table or query URL.

Data license: CC BY 4.0 · Data source: MyTown

mytown-research

94,727,099 rows across 74 tables Full-text search indexes for briefs, decisions, meeting_attachments and member_votes are held in separate FTS5 tables and are not counted above: they are search internals for those four tables, not additional records.

cf_transactions, food_inspections, professional_licenses, member_votes, lobbying_registrations, ...

Powered by Datasette · Data license: CC BY 4.0 · Data source: MyTown