OrbTop

Municipal Council Minutes & Agenda Scraper

OTHER

Municipal Council Minutes & Agenda Scraper

Fetch US city council meeting agendas, minutes, and documents from major municipal government platforms. Supports Legistar, PrimeGov, Granicus, and CivicWeb — covering 80%+ of US municipalities. Input a platform type and client slug to retrieve meeting records normalized into a single schema.


Features

  • Supports the Legistar, PrimeGov, Granicus, and CivicWeb municipal platforms.
  • Returns meeting body, date, time, location, agenda status, document URLs, video URL, and source link for each meeting.
  • Filter by date range (startDate / endDate) and governing body name (bodyName).
  • Single flat output schema across all platforms — one query, one dataset.

Who Uses Municipal Meeting Data?

  • Civic technology and government transparency tools — Track council votes, planning decisions, and public comment periods across municipalities.
  • Real estate and land use intelligence — Monitor zoning hearings, planning commission approvals, and variance requests before they become public news.
  • Local news and investigative journalism — Automate monitoring of city council, school board, and special district meetings.
  • Government relations and lobbying — Follow agenda items relevant to clients across dozens of municipalities without manual calendar checks.
  • Academic and policy research — Build longitudinal datasets of local government activity across cities and regions.

How It Works

  1. Choose a platform (legistar, primegov, granicus, or civicweb) and provide the municipality's client slug (e.g. chicago for Chicago on Legistar, longbeach for Long Beach, CA on PrimeGov, or squamish for Squamish, BC on CivicWeb). Each city is on exactly ONE platform.
  2. Optionally filter by date range or governing body name.
  3. The scraper queries the platform's public API and returns normalized meeting records.

Input

{
    "platform": "legistar",
    "clientSlug": "chicago",
    "startDate": "2024-01-01",
    "endDate": "2024-12-31",
    "bodyName": "City Council",
    "maxItems": 100
}

CivicWeb example:

{
    "platform": "civicweb",
    "clientSlug": "squamish",
    "maxItems": 10
}
Field Type Default Description
platform string legistar Platform vendor: legistar, primegov, granicus, or civicweb
clientSlug string chicago Municipality client slug on the platform (must match the platform — e.g. chicago, seattle on legistar; longbeach, renton on primegov; slco, richmondva on granicus; squamish, kamloops on civicweb)
viewId integer Granicus only — the archive view_id to read. Leave blank unless the default (1) returns nothing.
startDate string Filter meetings on or after this date (YYYY-MM-DD)
endDate string Filter meetings on or before this date (YYYY-MM-DD)
bodyName string Filter by governing body name (case-insensitive substring match)
maxItems integer 10 Maximum number of meeting records to return

Platform & Client Slug Guide

Each platform assigns a slug to each municipality. Here are examples:

Platform Example Slugs URL Pattern
legistar chicago, seattle, mountainview {slug}.legistar.com
primegov longbeach, renton {slug}.primegov.com
granicus slco, richmondva {slug}.granicus.com
civicweb squamish, kamloops {slug}.civicweb.net

A city is on exactly ONE platform — if a slug returns no meetings on one platform, it is almost certainly hosted on another. To find your city's slug: visit the city's portal (e.g. chicago.legistar.com) — the subdomain is the slug.


Output Schema

Each record represents one meeting:

Field Type Description
platform string Platform vendor (legistar, primegov, granicus, or civicweb)
city string Municipality client slug
state string US state abbreviation (when available)
body string Governing body name (City Council, Planning Commission, etc.)
meeting_type string Meeting type or status
meeting_date string Meeting date (YYYY-MM-DD)
meeting_time string Meeting start time (HH:MM)
location string Meeting location or address
agenda_status string Agenda document status (Draft, Final, etc.)
agenda_items string Agenda item titles (top-level, comma-separated)
document_urls string Space-separated list of agenda/minutes document URLs
video_url string URL to meeting video recording (where available)
source_url string Canonical URL for this meeting on the platform portal
meeting_id string Platform-internal meeting identifier

Example Output

{
    "platform": "primegov",
    "city": "longbeach",
    "state": "",
    "body": "City Council",
    "meeting_type": "Regular",
    "meeting_date": "2024-09-17",
    "meeting_time": "5:00 PM",
    "location": "City Hall - Council Chambers",
    "agenda_status": "Published",
    "agenda_items": "",
    "document_urls": "https://longbeach.primegov.com/meeting/4567/agenda.pdf",
    "video_url": "",
    "source_url": "https://longbeach.primegov.com/portal/meeting?compiledMeetingDocumentFileId=4567",
    "meeting_id": "4567"
}
{
    "platform": "civicweb",
    "city": "squamish",
    "state": "",
    "body": "Regular Council",
    "meeting_type": "",
    "meeting_date": "2026-07-07",
    "meeting_time": "18:00",
    "location": "Council Chambers",
    "agenda_status": "Published",
    "agenda_items": "",
    "document_urls": "",
    "video_url": "",
    "source_url": "https://squamish.civicweb.net/Portal/MeetingInformation.aspx?Org=Cal&Id=2097",
    "meeting_id": "2097"
}