Skip to the content.

CI codecov License

Case Calendar turns federal court dockets into calendar feeds. Point it at a case on CourtListener, and it writes the hearing dates and filing deadlines into an ICS file you can subscribe to from any calendar app — Apple, Google, Proton, Outlook, Thunderbird — and optionally pushes the same events directly into Google Calendar or Microsoft 365.

If you’re a journalist covering several cases at once, a researcher watching a docket of public interest, or anyone tracking more cases than you can comfortably refresh by hand, the goal is the same: not having to ask “Wait, when is that hearing again?” because your calendar already knows.

Features

See it live

A deployment of the public index page — running this code against real federal-court dockets, with AI case summaries enabled — is at casecalendar.net. Browse it to get a sense of what the rendered output looks like before installing anything.

Quick start

If you’d rather just see it working locally:

git clone https://github.com/seanthegeek/case-calendar
cd case-calendar
uv sync
cp .env.example .env       # add COURTLISTENER_TOKEN + one *_API_KEY
cp config.example.yaml config.yaml   # list your cases
uv run case-calendar sync

Limitations

Case Calendar is a supplement to docket-watching, not a replacement for it. Three constraints are inherent to the design and worth knowing before you rely on it:

With the first two latencies mitigated — the webhook receiver plus an occasional self-pulled docket sheet on the upstream side, and a controllable-refresh client or direct push on the downstream side — extraction errors are the remaining risk for inaccurate or outdated calendar information.

Even so, Case Calendar is not a substitute for the calendaring software a practicing attorney uses to manage filing deadlines on their own cases. Treat it as a convenience layer on top of the public docket, not the authoritative record.

If you find an issue with event extraction, case summarization, or some other bug, please report it.

Complete documentation

Page What it covers
Installation Python deps, API keys, and the optional but recommended local OCR tools.
Configuration The config.yaml file — every option, with examples.
CLI reference Every case-calendar subcommand and flag.
Calendar backends ICS files, Google Calendar push, Microsoft 365 / Outlook push, attendee invites, and reminders.
Cost What the LLM and CourtListener APIs cost — measured per-provider numbers, rate limits, and how to measure your own spend.
Local models (Ollama) Run extraction and/or summaries on local open models — no API key, no per-token cost, and a way to benchmark local models against the hosted ones.
Subscribing to a feed Step-by-step subscribe-by-URL instructions for Apple, Google, Outlook, Proton, Fastmail, and Thunderbird.
Real-time webhooks Skip the polling quota — have CourtListener push updates to you the moment they land.
AI case summaries The optional 2-4 sentence prose summary rendered on the index page, how it stays current, and how to fill CourtListener gaps.
Public index page Generate a static index.html that lists every calendar, with subscribe buttons and case details — ready to put behind any HTTP server.
Architecture What’s going on under the hood: pipeline shape, design choices, and the data model.
LLM prompts The exact system prompt behind every extraction, verification, and summary call, reproduced verbatim.
Development Set up a dev environment, run the tests, and iterate on the prompts and models cheaply.

Case Calendar is an independent project. It is not affiliated with the Administrative Office of the U.S. Courts, the Free Law Project, or CourtListener. Calendar entries are best-effort summaries of public docket information and are not a substitute for reading the docket itself.