Search meeting transcripts
search_meetingsWhat was actually said out loud at a city council meeting, planning-commission hearing, or any other public city-government meeting — about zoning, housing, the city budget, taxes, permits, ordinances, roads, parks, police, or public comment. Keyword search across transcript segments; each hit includes speaker, snippet, timestamp, and — when the speaker matches an elected official — an official_id UUID.
WHEN: 'What did people say about X?', 'When was Y last discussed?', or any query where the value is what was spoken in a meeting. WHEN NOT: For one person's complete speaking history, use search_by_official (better signal, no false positives from name collisions). For ordinance text, packets, or attached PDFs, use search_documents.
For 'recent' or 'this year' questions pass since — the corpus runs back years, and without a window old material competes with new. For 'what did OFFICIALS say' pass officials_only — it keeps segments whose speaker matched the city roster (elected, appointed or senior staff), because everyone else is unnamed by design and their quotes cannot be cited to a person.
EXAMPLES: { "q": "short-term rentals", "cities": ["lehi-ut"] } { "q": "housing affordability", "cities": ["lehi-ut"], "since": "2026-01-01", "officials_only": true } { "q": "downtown parking", "cities": ["lehi-ut"], "meeting_types": ["city_council"] } { "q": "developer Main Street" } — last meetings across allowed cities, newest first
hits: [] means no transcript segments matched — simplify the query and retry; never report it as missing access to a city.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Free-text query matched against transcript text and agenda items. Speaker names are not matched (except on plans that show every speaker's name) — to find what a named official said, use search_by_official. | |
| limit | No | Max hits returned. Default 25, up to 150. Results are spread across cities and meetings so one verbose meeting cannot fill the response. For statewide or multi-city questions pass a high limit and filter the results yourself — that is cheaper and more complete than many narrow queries. | |
| since | No | Only search meetings on or after this date (YYYY-MM-DD). Use for 'recent' / 'this year' questions — without it the corpus goes back years and old material outranks new. | |
| until | No | Only search meetings on or before this date (YYYY-MM-DD). | |
| cities | No | City-slug allow-list (e.g. ['lehi-ut']). Strongly recommended — searches every accessible city otherwise. | |
| meeting_types | No | Filter by meeting_type values (e.g. ['city_council', 'planning_commission']). | |
| officials_only | No | Return only segments whose speaker was matched to the city's official roster — elected members, appointed board members, AND senior staff (city administrator, attorney, recorder). NOT elected-only: filtering is on whether the speaker is identified at all. Use for 'what did OFFICIALS say about X'; without it, most hits are applicants and residents at the comment mic, whose names are withheld by design, so the quotes come back unattributed and cannot be cited to a person. To keep only elected speakers, cross-reference the returned official_id against list_officials. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| hits | Yes | Transcript segments matching the query, newest first. | |
| total | Yes | NOT a count of segments containing your full query, and never safe to report to a user as 'N mentions' — count `hits`, or say the record contains 'many'. With hybrid ranking on it is the number of hits returned; otherwise it is a rough upper bound on candidates, and because matching relaxes trailing words to keep recall up, a two-word query can report tens of thousands while only dozens contain both words. | |
| citiesQueried | Yes | Number of cities actually searched. |