MyTown API v2

Look up local government meetings and selected community context. Public requests need no key. Responses are bounded; search returns a sample of matching summaries and decisions, not an exhaustive census.

API capabilities · Search meetings · MCP tools · Browse civic pages

Public endpoints

GET https://search.theboringparts.com/v2/info
GET https://search.theboringparts.com/v2/cities?q=Chicago&state=IL&country=CA&limit=10
GET https://search.theboringparts.com/v2/cities/SLUG/meetings?period=recent&limit=5&country=CA
GET https://search.theboringparts.com/v2/cities/SLUG/context?sections=demographics&limit=5&country=CA
GET https://search.theboringparts.com/v2/search?q=school+budget&limit=5&country=CA

Find the city slug with /v2/cities. City listing supports q, state, country, limit, and cursor. Pass the returned next_cursor unchanged to continue city or meeting results. Meeting periods are recent and upcoming. Context returns only the requested supported sections; start with demographics. Consult /v2/info for available limits.

Search takes q, limit, state, country, and kind (city or school). State names and abbreviations are accepted. Country is US or CA.

Response shapes

{"cities": [], "count": 0, "next_cursor": null}
{"city": "Example", "state": "IL", "page": "…", "generated": "…",
 "period": "recent", "results": [], "count": 0, "next_cursor": null}
{"query": "school budget", "count": 0, "results": [], "sampled": true, "api_version": 2}

Search results include city, state, meeting date, headline, snippet and available source links. An empty sample does not prove that a jurisdiction has never discussed a topic. Coverage varies. Treat snippets as text: escape markup before rendering. Verify facts in the linked official documents.

Migration

The unversioned API, static city and meeting JSON routes, unrestricted query interfaces and legacy MyTown database-download endpoints are retired. Old API routes return HTTP 410. Switch API clients to v2. Research access requires authentication and uses server-owned named queries. Never put research credentials in browser code. Human civic pages, feeds and subscriptions remain available.

Handle HTTP 400 for invalid parameters, 410 for retired routes, and temporary 429/503 responses with bounded retries. Public output is intentionally compact.

Open dataset downloads

The MyTown open dataset on Hugging Face is publicly downloadable without an access request. Download Parquet tables or the compressed SQLite database.

License: CC BY 4.0. Credit MyTown / theboringparts.com. Dataset DOI: 10.57967/hf/9676.

Commercial investigations use a separate authenticated service. Public dataset availability does not expose their prepared SQL definitions.

Usage measurement

We measure request counts, response sizes and latency by endpoint family. Query text, credentials, raw IP addresses and individual city or investigation names are excluded from these metrics. Private keyed IP pseudonyms estimate returning clients for up to 90 days; shared or changing addresses affect the estimate. Requests with DNT: 1 or Sec-GPC: 1 omit that pseudonym.

Embed meetings

Keep using the city page's /city/SLUG/embed/ widget for upcoming and recent meetings. The /search/embed/ widget accepts a query, state, kind and bounded limit.

Credit MyTown / theboringparts.com with a link. AI summaries can contain errors; official records are authoritative.