Search meeting documents
search_documentsWhat the city put in writing — agendas, minutes, staff reports, meeting packets, attachments, ordinances, and resolutions. Keyword search across extracted document text. Use this when the value is in the written record, not the spoken transcript.
WHEN: Looking for ordinance language, budget tables, agenda text, staff reports, attached PDFs.
WHEN NOT: For what was said in the meeting, use search_meetings. For metadata-only queries ('what meetings happened last week?'), search_meetings with q on a placeholder works better.
EXAMPLES: { "q": "ADU ordinance", "cities": ["lehi-ut"] } { "q": "FY2027 budget", "cities": ["lehi-ut"] } { "q": "developer presentation Main Street" }
hits: [] means no document text 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 extracted text from agendas, minutes, packets, and attachments. | |
| 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. | |
| cities | No | City-slug allow-list. Strongly recommended — searches every accessible city otherwise. | |
| doc_types | No | Filter by doc_type values, e.g. ['agenda', 'minutes', 'packet', 'attachment']. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| hits | Yes | Document matches, newest first. | |
| total | Yes | Rough upper bound on candidate documents, NOT a count containing your full query — matching relaxes trailing words to keep recall up. Never report this as 'N mentions'; count `hits` instead. | |
| citiesQueried | Yes | Number of cities actually searched. |