City Council Agenda Scraper (Legistar, Granicus, CivicPlus)
Pricing
from $4.00 / 1,000 council agenda monitors
City Council Agenda Scraper (Legistar, Granicus, CivicPlus)
Scrape city council, county board and planning commission agendas, minutes and agenda items from Legistar, Granicus, CivicPlus AgendaCenter, PrimeGov and CivicClerk. Keyword alerts with PDF text snippets.
Pricing
from $4.00 / 1,000 council agenda monitors
Rating
0.0
(0)
Developer
ryan smith
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
City Council Agenda & Minutes Scraper (Legistar, Granicus, CivicPlus)
Scrape and monitor city council, county board, planning commission and school board agendas and minutes from Legistar, Granicus, CivicPlus AgendaCenter, PrimeGov and CivicClerk, with keyword alerts and PDF text snippets.
Track what your local governments are about to vote on without opening 20 different websites. You get one clean record per meeting with agenda, minutes, packet and video links, the agenda items, and the exact passages where your keywords (rezoning, data center, police budget...) appear in the agenda or minutes PDFs. Schedule it daily with Only new meetings since last run and it becomes an alert feed.
Try it now: the input is prefilled (Seattle Legistar + Wichita CivicPlus), so just click Start. A first run takes under a minute.
Supported platforms
| Platform | What to enter | Agenda/minutes links | Agenda item list | Notes |
|---|---|---|---|---|
| Legistar (Granicus) | Client name, e.g. seattle, oakland, or https://seattle.legistar.com | ✅ | ✅ (with file numbers) | Uses the official public Legistar Web API |
| CivicPlus AgendaCenter | Site root or https://www.city.gov/AgendaCenter | ✅ | — (use PDF text) | All categories (boards) on the site, including past years |
| Granicus (classic ViewPublisher) | https://<city>.granicus.com/ViewPublisher.php?view_id=N | ✅ (+ video) | — (use PDF text) | |
| PrimeGov | https://<city>.primegov.com | ✅ | ✅ | |
| CivicClerk | https://<tenant>.portal.civicclerk.com or civicclerk:<tenant> | ✅ (+ packet) | ✅ |
You can mix platforms in a single run.
Use cases
- Journalists and newsrooms: a morning digest of every agenda posted in your coverage area; keyword alerts for
settlement,no-bid,emergency contractorconsent decreethat return the paragraph, not just the PDF; a searchable archive of minutes. - Lobbyists and government-affairs teams: monitor dozens of jurisdictions for ordinances that affect clients (
short-term rental,franchise fee,cannabis,5G); see items before the meeting so there is time to comment or brief a council member; push results to a CRM, Slack or Google Sheets through Apify integrations. - Realtors and real-estate agents: catch
rezoning,annexation,varianceandsubdivision platitems early and tell clients what is coming to a neighborhood. - Developers and site selectors: follow planning commission and zoning board agendas for
site plan,PUD,impact fee,data centerorincentiveitems across every market you are evaluating. - Civic tech and researchers: build open meeting archives, vote trackers and transparency dashboards from structured JSON instead of scraping five platforms yourself.
- Also used by advocacy groups and community organizers (
affordable housing,bike lane,public hearing) and by consultants who sell to local government.
Verified cities and counties (tested Oct 16, 2026)
Each of these returned meetings with agenda links in a quick test fetch. Paste the value from the Input column into sources.
| Jurisdiction | Platform | Input |
|---|---|---|
| Seattle, WA | Legistar | seattle |
| Oakland, CA | Legistar | oakland |
| Boston, MA | Legistar | boston |
| Denver, CO | Legistar | denver |
| Mesa, AZ | Legistar | mesa |
| Kansas City, MO | Legistar | kansascity |
| Milwaukee, WI | Legistar | milwaukee |
| Columbus, OH | Legistar | columbus |
| Pittsburgh, PA | Legistar | pittsburgh |
| Baltimore, MD | Legistar | baltimore |
| Richmond, VA | Legistar | richmondva |
| Nashville, TN (Metro) | Legistar | nashville |
| Louisville, KY (Metro) | Legistar | louisville |
| Jacksonville, FL | Legistar | jaxcityc |
| San Jose, CA | Legistar | sanjose |
| Fresno, CA | Legistar | fresno |
| Sacramento, CA | Legistar | sacramento |
| Alameda, CA | Legistar | alameda |
| Corpus Christi, TX | Legistar | corpuschristi |
| El Paso, TX | Legistar | elpasotexas |
| Ann Arbor, MI | Legistar | a2gov |
| King County, WA | Legistar | kingcounty |
| Pima County, AZ | Legistar | pima |
| Clark County, NV | Legistar | clark |
| DeKalb County, GA | Legistar | dekalbcountyga |
| Fulton County, GA | Legistar | fulton |
| Hillsborough County, FL | Legistar | hillsboroughcounty |
| Wichita, KS | CivicPlus | https://www.wichita.gov/AgendaCenter |
| Murfreesboro, TN | CivicPlus | https://www.murfreesborotn.gov/AgendaCenter |
| San Marcos, TX | CivicPlus | https://www.sanmarcostx.gov/AgendaCenter |
| Ankeny, IA | CivicPlus | https://www.ankenyiowa.gov/AgendaCenter |
| Los Angeles, CA | PrimeGov | https://lacity.primegov.com |
| San Jose, CA | Granicus | https://sanjose.granicus.com/ViewPublisher.php?view_id=60 |
| Lakewood, CO | CivicClerk | https://lakewoodco.portal.civicclerk.com |
Not every city exposes the Legistar API (for example Chicago, Philadelphia, Houston and Austin don't, and NYC needs a token). Any other city on a supported platform should work; see Finding your city's platform below.
Input
| Field | Description |
|---|---|
sources | List of portal URLs or Legistar client names (see the table above) |
startDate / endDate | Meeting date range. Defaults: 30 days back to 30 days ahead |
keywords | Case-insensitive matches. Single words match whole words; phrases work too |
downloadPdfText | Download agenda and minutes (PDF or HTML), extract the text and return snippets |
includeFullText | Also include the full extracted text in each record |
onlyKeywordMatches | Output only meetings that match at least one keyword |
onlyNewSinceLastRun | Monitoring mode. Skips meetings already delivered. A meeting is sent again when its minutes get posted |
includeItems | Fetch structured agenda items (Legistar, PrimeGov, CivicClerk) |
maxMeetingsPerSource, maxPdfPages, snippetChars | Limits |
legistarTokens | Optional { "client": "token" } for the few Legistar clients that require one (e.g. NYC) |
Sample input
{"sources": ["seattle", "denver", "https://www.wichita.gov/AgendaCenter"],"startDate": "2026-10-01","endDate": "2026-11-15","keywords": ["zoning", "housing", "budget"],"downloadPdfText": true,"onlyKeywordMatches": true,"maxMeetingsPerSource": 50}
Sample output (one item per meeting)
{"platform": "legistar","jurisdiction": "seattle","body": "Select Budget Committee","title": "Select Budget Committee","date": "2026-10-15","time": "9:30 AM","location": "Council Chamber, City Hall 600 4th Avenue Seattle, WA 98104","agendaUrl": "https://legistar2.granicus.com/seattle/meetings/2026/10/6766_A_....pdf","minutesUrl": null,"detailUrl": "https://seattle.legistar.com/MeetingDetail.aspx?LEGID=6766&...","items": [{ "number": "1.", "title": "Policy Considerations: Seattle Police Department ...", "fileNumber": null }],"itemCount": 17,"keywordMatches": ["budget", "police"],"matchedSnippets": [{ "keyword": "police", "source": "agenda", "snippet": "…Policy Considerations Seattle Police Department…" }],"agendaTextLength": 3927}
Other fields: meetingId, packetUrl, videoUrl, sourceUrl, agendaStatus and minutesStatus (Legistar), textErrors (for example a scanned PDF with no text layer), and scrapedAt. A RUN_SUMMARY record in the key-value store lists any sources that failed and why.
Tips
- Finding your city's platform: open the city's "Agendas & Minutes" page. A link to
*.legistar.com,*.granicus.com,*.primegov.com,*.civicclerk.comor/AgendaCentertells you which one it uses. - Legistar client name: it's the subdomain. For
https://oakland.legistar.com, enteroakland. - Monitoring: schedule a daily run with
onlyNewSinceLastRunandonlyKeywordMatchesturned on, then connect a Slack or email integration.
Pricing
Pay per event, starting October 29, 2026:
| Event | Price | When it is charged |
|---|---|---|
| Meeting | $4 per 1,000 meetings ($0.004 each) | each meeting record saved to the dataset |
| Document text | $6 per 1,000 document texts ($0.006 each) | each agenda or minutes document whose text is downloaded and extracted (only when downloadPdfText is on) |
You only pay for results. With downloadPdfText off, a run costs just the meeting fee. Examples: a newsroom tracking 25 jurisdictions daily (about 260 meetings and 400 documents a month) pays about $3.50 a month. Pulling 1,000 meetings without text costs $4. Apify platform usage is billed separately by Apify under your plan.
FAQ
Which platforms are supported? Legistar (Granicus), Granicus ViewPublisher, CivicPlus AgendaCenter, PrimeGov and CivicClerk. You can mix them in one run.
How do I find my city's input? Open the city's "Agendas & Minutes" page. A link to *.legistar.com means Legistar (enter the subdomain, e.g. oakland); /AgendaCenter means CivicPlus (enter the site URL); *.granicus.com/ViewPublisher.php?view_id=N, *.primegov.com or *.civicclerk.com mean the others.
Can I get alerts only for new agendas? Yes. Turn on onlyNewSinceLastRun (and onlyKeywordMatches), schedule the Actor daily and connect an email, Slack or webhook integration. A meeting is sent again when its minutes are posted.
Does it search inside the PDFs? Yes, with downloadPdfText on. It returns each match with surrounding context (snippetChars). Scanned PDFs without a text layer can't be searched (no OCR) and are marked in textErrors.
Why did one of my sources fail? Some Legistar clients don't enable the public API or need a token (add it under legistarTokens). The run continues with the other sources and lists the failure in the RUN_SUMMARY record of the key-value store.
Do I need a proxy? Usually not. If a CivicPlus site rate-limits you, enable Apify Proxy.
Is this legal? It collects only public meeting records that governments publish for the public. Respect each site's terms and don't schedule runs more often than you need.
Can I export to Google Sheets or CSV? Yes. Every dataset can be downloaded as CSV, Excel or JSON, or sent to Google Sheets with an Apify integration.
Limitations
- Scanned (image-only) PDFs have no text layer. No OCR is done; the record carries
textErrors. - Documents larger than 40 MB (usually full agenda packets) are skipped for text extraction.
- CivicPlus and Granicus don't publish structured item lists, so keyword search there depends on
downloadPdfText. - Some cities' Legistar instances don't enable the public API (for example Chicago) or require a token (NYC). The run reports a clear error for that source and continues with the rest.
- Only public data is collected. Respect each site's terms and don't schedule runs more often than you need.