Legistar and CivicClerk have actual APIs, which is nice, although it's extremely easy for the City Clerk's staff to trip and make the Legistar API unusable.
My experiments with using LLMs to write crawlers for these has been extremely mixed; it's good at getting first page of data and less good at following weird pagination trails or follow-on requests.
All of this led me to build CivicBand (which tracks all the municipalities I can get my hands on) and CivicObserver (which is generalized full-text search alerting for municipalities via email, mastodon, bluesky, and slack webhook)