Search recorded motions, votes and amounts
search_decisionsWhat a body actually DECIDED, from the approved minutes — the motion as recorded, who moved it, the roll-call tally, and any dollar figure attached. This is the structured record, not people talking: use it whenever the question is what was approved, denied, tabled, or how much something cost.
WHEN: 'Which cities approved Flock Safety cameras?', 'Show me every contract over $100k in Texas this year', 'Where did accessory-dwelling ordinances stall?', 'What did Lehi vote on last month?'. WHEN NOT: For what someone SAID, use search_meetings. For one official's record across items, use track_position. For a project's lifecycle, use application_timeline.
TWO THINGS THAT WILL MISLEAD YOU IF IGNORED:
• Report outcome, not result. A passed motion TO TABLE means the item did NOT advance; 161 published motions are exactly that. outcome already combines motion_kind with result.
• amount_deferred: true means the money was named inside a motion to delay or table. Never describe it as spending.
• EMPTY IS NOT "NOTHING WAS DECIDED". Motions come only from minutes we have extracted, which lag the meeting and are missing for many cities. Read coverage / coverage_note before answering, and fall back to search_documents for the minutes or agenda.
• unofficial_decisions are decisions heard in the RECORDING of a meeting where no official motion covers that item — usually because its minutes are not published yet. They are NOT the official record: say "according to the meeting recording" and repeat the row's record_note (it says whether the minutes are unpublished or simply have no matching motion), never present their vote_count as an official roll call, and never count them into total. Verify a specific one with get_transcript_window at its timestamp_seconds.
q matches whole words, so 'Flock' will not return a person named Flocke. Every row carries a citation_url pointing at that exact motion.
EXAMPLES: { "q": "Flock Safety" } { "q": "accessory dwelling", "outcome": "tabled" } { "min_amount_usd": 100000, "basis": ["award"], "since": "2026-01-01" }
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Term matched as a WHOLE WORD or phrase against the motion text — a vendor ('Flock Safety'), an instrument ('Ordinance 26-08'), a subject ('accessory dwelling'). Whole-word matching means 'Flock' will not match a person named Flocke. Omit to browse by city, date or amount alone. | |
| basis | No | Restrict to how the money is being used. 'award' is a contract/grant/purchase; 'appropriation' is budget/bond/levy; 'fee' is a fee, fine or waiver. Rates and third-party figures are never returned. | |
| limit | No | Max motions returned, newest first. Default 40. | |
| match | No | How `q` is matched. 'phrase' (default): the whole of `q` as one whole-word phrase — for an instrument or vendor ('Ordinance 26-08', 'Flock Safety'). 'any': each word of `q` as a whole word, in any order, a plural matching its singular; a motion matching more of the words ranks first. Use 'any' for a subject described in a resident's words ('sycamore trees', 'budget adopted'). | phrase |
| since | No | Meetings on or after this date (YYYY-MM-DD). | |
| until | No | Meetings on or before this date (YYYY-MM-DD). | |
| cities | No | City-slug allow-list (e.g. ['lehi-ut']). Omit to search every city the plan allows. | |
| outcome | No | Filter by what happened to the ITEM, not to the motion. 'tabled' means a motion to table passed, so the item did not advance. Use 'denied' or 'tabled' to find where something stalled — for policy-diffusion questions that is the more informative half. | any |
| min_amount_usd | No | Only motions carrying a parsed dollar figure at or above this many whole dollars. Use 0 for every motion that carries any dollar figure. Excludes tax rates, third-party figures and deferred amounts automatically. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| total | Yes | Number of OFFICIAL motions returned, from published minutes (not an estimate — this is the row count). Does not include unofficial_decisions; see `returned`. | |
| blocked | Yes | Tabled, denied, continued or withdrawn — the item did not advance. | |
| summary | Yes | One sentence saying what came back, official and recording-reported separately. Read this first: `total` counts OFFICIAL motions only, so a response can carry decisions while total is 0. | |
| approved | Yes | ||
| coverage | Yes | Minutes coverage for each queried city that returned NO decisions, so an empty result can be told apart from a gap in our record. Omitted cities had hits. Empty when every city had hits, or when more than 8 cities came back empty (see coverage_note). | |
| returned | Yes | Everything returned: `total` (official motions) + `unofficial_total` (recording-reported decisions). | |
| decisions | Yes | ||
| citiesQueried | Yes | ||
| coverage_note | Yes | Plain-language caveat to relay when results are thin because minutes have not been extracted. Null when every queried city returned decisions. | |
| citiesWithHits | Yes | How many distinct cities appear in the results. The useful denominator for 'how many cities have done this'. | |
| totalAmountUsd | Yes | Sum of the returned motions' amounts, in whole dollars, excluding rates, third-party figures and deferred amounts. NULL when none carried a figure. Treat as a floor, not a budget: budgets, financings, awards and amendments legitimately overlap, so this can double-count the same dollars across instruments. | |
| unofficial_total | Yes | Number of unofficial_decisions returned. NOT included in `total`, `approved` or `blocked`, which count official motions only. | |
| unofficial_decisions | Yes | Decisions heard in the RECORDING of a meeting where no official motion covers that item: usually the approved minutes have not been published or extracted yet, and sometimes the published minutes have no motion for the item. NOT the official record: report them as 'according to the meeting recording' and repeat each row's record_note, which says which of the two cases applies. Never merge them into official results or present vote_count as an official roll call. A row is dropped when a published motion covers the same agenda item, so these do not restate `decisions`. Omitted when a dollar filter is set (transcript decisions carry no parsed amounts). |