Mo APIsenate.mo.gov ↗
Get Missouri Senate committee hearing schedules via API. Returns hearing title, date, UTC start time, and status for any day listed on senate.mo.gov.
What is the Mo API?
The Missouri Senate Hearing Schedule API exposes 1 endpoint — get_schedule — that returns committee hearing events published on senate.mo.gov, with 8 fields per hearing including title, date, UTC start time, and status. Query by a specific date or omit the date parameter to retrieve every hearing currently listed on the schedule page. Results are paginated using limit and offset controls.
curl -X GET 'https://api.parse.bot/scraper/dc9a4e32-a7d4-45d8-a54b-fafe4fd860fd/get_schedule?date=20261016' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace senate-mo-gov-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Missouri Senate hearing schedule — bounded, re-runnable."""
from parse_apis.senate_mo_gov_api import MissouriSenate, InputFormatInvalid
client = MissouriSenate()
# List all hearings currently on the schedule page, capped at 10 items.
for hearing in client.hearings.list(limit=10):
location_name = hearing.location.name if hearing.location else "TBD"
print(f"{hearing.title} | {hearing.date} {hearing.start_time_utc} | {location_name}")
# Fetch hearings for a specific day using a date filter.
try:
first = client.hearings.list(date="20250415", limit=1).first()
except InputFormatInvalid:
first = None
print("Invalid date format supplied")
if first is not None:
print(f"{first.title} — status: {first.status}, institution: {first.institution}")
if first.description:
print(f" {first.description[:120]}")
print("exercised: hearings.list / hearings.list(date=)")
Returns Senate committee hearings from the Missouri Senate Hearing Schedule page as one event per hearing, in one round trip. Each item carries the committee/hearing title, the hearing date (YYYY-MM-DD), start_time_utc converted from the Senate's Central time (America/Chicago) to UTC with a Z suffix, status (scheduled when the start is in the future, completed once it has passed), institution (always senate), the hearing's link, location name (the room, when stated) and a description with the remaining announced text (bills, chair, notes). The site publishes no video or stream for committee hearings, so player_url, stream_url, video_file and duration_minutes are always null, and event_id is null because the page carries no stable identifier. When date is supplied only hearings on that day are returned and data.date echoes it; when omitted all hearings currently listed are returned and data.date is today's date in Central time. Pagination is offset/limit over the filtered list: total is the number of items on this page, total_available the number matching, has_more true when offset + limit < total_available. Outside the legislative session the page states that no hearings are scheduled and the result is a valid empty page (items [], total 0, has_more false). A hearing announced without a clock time (e.g. 'upon adjournment') is anchored at 00:00 Central on its day. The in-session layout of the page was not observable during the build (the Senate was out of session); the hearing block parser is a best-effort reading of that layout and returns an extraction error rather than an empty success if hearings are listed but none can be parsed.
| Param | Type | Description |
|---|---|---|
| date | string | Day to return hearings for, as YYYYMMDD. Omitted = every hearing currently listed on the schedule page. |
| limit | integer | Maximum items per page, clamped to 200. |
| offset | integer | Zero-based index of the first item to return; the next page starts at offset + limit. |
{
"type": "object",
"fields": {
"date": "requested (or today's Central-time) day as YYYYMMDD",
"items": "array of hearing events: event_id (null), title, date (YYYY-MM-DD), start_time_utc (ISO 8601, Z), status (scheduled|completed), institution (senate), url, player_url/stream_url/video_file (null), location ({name} or null), description (string or null), duration_minutes (null)",
"limit": "effective limit after clamping",
"total": "number of items on this page",
"offset": "echoed offset",
"has_more": "true when another page exists at offset + limit",
"total_available": "number of hearings matching the request across all pages"
},
"sample": {
"data": {
"date": "20261016",
"items": [],
"limit": 50,
"total": 0,
"offset": 0,
"has_more": false,
"total_available": 0
},
"status": "success"
}
}About the Mo API
What the API Returns
The get_schedule endpoint returns Missouri Senate committee hearings as a structured list. Each hearing object includes a title (the committee or hearing name), a date in YYYY-MM-DD format, a start_time_utc field in ISO 8601 format converted from the Senate's Central time zone (America/Chicago), and a status field that indicates whether the hearing is scheduled or completed. The event_id field is present in each item but returns null for this source.
Filtering and Pagination
Pass a date parameter as YYYYMMDD to narrow results to a specific day. Omitting date returns all hearings currently visible on the schedule page. Results are paginated: limit caps the number of items returned per request (maximum 200), and offset sets the zero-based starting index. The response always echoes back limit, offset, total (items on the current page), total_available (total matching hearings across all pages), and a has_more boolean so you can determine whether a subsequent page exists.
Timezone Handling
All hearing times are normalized to UTC in the start_time_utc field, regardless of how times appear on the source page. The conversion uses the America/Chicago timezone, accounting for Central Standard and Central Daylight time transitions automatically. This means downstream consumers do not need to handle CST/CDT offsets themselves.
Coverage Scope
The API covers the Missouri Senate's published hearing schedule. It does not include Missouri House of Representatives hearings, full session calendars, or legislative bill text. The data reflects what is currently posted on the Senate Hearing Schedule page, so hearings added or removed from that page will be reflected in subsequent requests.
The Mo API is a managed, monitored endpoint for senate.mo.gov — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when senate.mo.gov changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official senate.mo.gov API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Alert lobbyists and advocates when a specific committee posts a new hearing date
- Build a legislative calendar app that displays Missouri Senate hearings with UTC-normalized start times
- Track
statuschanges fromscheduledtocompletedto log which hearings have concluded - Aggregate multi-day hearing schedules by looping over date parameters and storing results
- Power a public-facing widget showing today's Missouri Senate committee activity
- Feed hearing
titleanddatefields into a notification system for policy researchers
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does senate.mo.gov offer an official developer API for its hearing schedule?+
What does the `get_schedule` endpoint return when no `date` parameter is provided?+
date parameter returns all hearings currently listed on the Missouri Senate Hearing Schedule page, not just today's hearings. You can then use limit and offset to page through the full result set, and check has_more to know if additional pages exist.Does the API cover Missouri House of Representatives committee hearings?+
How fresh is the hearing data, and can hearings be cancelled or rescheduled?+
Does the API return hearing room location, agenda documents, or bill numbers?+
title, date, start_time_utc, status, and event_id — location, agenda documents, and associated bill numbers are not included in the response. You can fork this API on Parse and revise it to add those fields if the source page exposes them.