feat: courtlistener local bulk import for keyless US caselaw

↗ view on GitHub · Eli Ziff · 2026-07-28 · a78e30c2

Add fetch_courtlistener_bulk.py: downloads CourtListener's official,
no-auth bulk CSVs (citations 127 MB, opinion-clusters 2.46 GB in full)
and a deterministic HTTP-Range prefix of the 54.6 GB opinions file,
cut at the last complete CSV record with a quote/escape-aware scanner.
The existing import_courtlistener_bulk.py loads the slice unchanged.
Measured: 2.68 GB downloaded, 30m26s import, 5.87 GB SQLite with
18.1M citations, 10.07M clusters, 17,343 full-text opinions; citation
lookup, case-name search, and opinion retrieval all serve locally with
no COURTLISTENER_API_TOKEN.

Test drives the slicer over a truncated multi-stream bz2 fixture via
file:// and the real importer, proving slicer, importer, and reader
agree on schema.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016yXxuitxX5h4wm1v88hnga
Repository eliziff/Beaver
Author Eli Ziff <eliasziff@gmail.com>
Authored
Parents c3928839
Stats 3 files changed , +253
Part of A2AJ / CourtListener Canadian legal-source integration

Capture this commit into my fork

Download a Markdown prompt that tells Claude how to port this exact commit into your working tree. Run it via claude -p < capture-commit-a78e30c2.md from inside the repo you want the change in.

⬇ Download capture-commit-a78e30c2.md