Filing preparation and locally-controlled CM/ECF automation for federal courts, powered by Claude API.
ECFiler is an open-source tool for preparing and filing documents on CM/ECF. The hosted app prepares, validates, and stages filings — the human files. The CLI additionally automates the mechanical filing steps with Playwright (CM/ECF has no filing API), running entirely on your own machine with your credentials in your OS keyring — no server ever sees a court password. Every filing requires explicit attorney confirmation before submission, and every filing action is recorded in an append-only, hash-chained attestation log.
- Smart Filing — drop a PDF, AI extracts case, court, party, event type. Zero form-filling.
- 207 federal courts — 97 district, 94 bankruptcy, 16 appellate
- 7 safety gates — PDF validation, redaction scan, event code verification, completeness check, attorney CONFIRM, typed YES at the CM/ECF confirmation screen, receipt capture
- Web UI + CLI + API — three interfaces, same engine
- Claude AI — document analysis, event code matching, redaction scanning, filing validation
- Certificate of Service — auto-generated with PDF export
- Pre-flight checks — catches errors before the browser even starts
- Filing history — SQLite audit log of all filings
Visit https://www.ecfiler.com — drop a PDF and go. No install needed.
git clone https://github.com/jackson-jpeg/ecfiler.git && cd ecfiler
export ANTHROPIC_API_KEY=sk-ant-...
# With Docker
docker compose up
# Or without Docker
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[web,dev]"
ecfiler serveOpen http://localhost:8000.
# One command — AI reads the document, you just confirm
ecfiler smart ./motion_to_dismiss.pdfecfiler # Interactive TUI menu
ecfiler smart motion.pdf # AI-powered filing (zero forms)
ecfiler smart motion.pdf --dry-run # Test without submitting
ecfiler validate brief.pdf # Check PDF meets CM/ECF requirements
ecfiler convert scanned.pdf # Convert to PDF/A with OCR
ecfiler courts --search california # Find courts
ecfiler courts --type appellate # List appellate courts
ecfiler setup # Store PACER credentials
ecfiler check # Verify setup (API key, browser, etc.)
ecfiler history # View past filings
ecfiler history --search "01234" # Search filing history
ecfiler save-template mtd --court nysd --event-code 12 --event-desc "Motion to Dismiss"
ecfiler quick mtd 1:24-cv-01234 brief.pdf # Quick file from template
ecfiler demo # Demo walkthrough (no account needed)
ecfiler serve # Start web UI + API server
ecfiler serve --port 8080 # Custom portecfiler checkThis runs diagnostics on your setup: config file, API key, PACER credentials, Playwright/Chromium, PDF tools, court data.
ecfiler setupStores your PACER password in the system keyring (never in plaintext).
Edit ~/.ecfiler/config.toml (created on first run):
[general]
default_court = "nysd"
claude_model = "claude-sonnet-4-20250514"
dry_run = false
[pacer]
username = "your@email.com"
[attorney]
name = "Jane Smith"
bar_number = "JS1234"
[pdf]
redaction_check = truepip install 'ecfiler[pdf-convert]'
apt install ghostscript tesseract-ocr # Linux
brew install ghostscript tesseract # macOS- Select court — choose from 207 federal courts
- Enter case number — looked up on PACER
- Describe your filing — Claude suggests the right event code
- Select documents — PDF validation + redaction scanning
- Pre-flight checks — catches errors before browser starts
- Review — full summary, type CONFIRM to proceed
- File (CLI, local) — Playwright submits to CM/ECF from your machine, captures the receipt and NEF; the hosted app instead stages a validated package for you to file
ECFiler never auto-submits. The attorney must:
- Type
CONFIRMat the review screen - Type
YESat the final CM/ECF confirmation - Both gates must pass for any filing to be submitted
Additional protections:
- Pre-flight checks block filings with missing/invalid data
- PDF validation blocks invalid documents
- Claude scans for unredacted personal identifiers (Rule 5.2)
- Claude validates event code matches document content
- Sealed/restricted hard-fail: a sealed document can never silently file publicly (see docs/sealed-document-policy.md); the hosted service refuses sealed content entirely
- Browser retry with error recovery for transient failures
- All filings logged to SQLite audit trail + append-only hash-chained attestation records (
ecfiler audit verify) - Screenshots captured at every step; audit traces start only after login so credential entry is never captured
- All court-facing traffic identifies itself with an honest ECFiler User-Agent, is rate-limited, and bulk operations honor the AO's 6pm–6am CT guidance
Start the server with ecfiler serve, then visit http://localhost:8000/docs for interactive API documentation.
| Endpoint | Method | Description |
|---|---|---|
/ |
GET | Web UI |
/api/file |
POST | Smart filing — upload PDF, get filing preview |
/api/file/multi |
POST | Multi-document smart filing |
/api/filing/stage |
POST | Stage a validated filing package (the human files) |
/api/filing/stage/{code} |
GET | Fetch a staged package (used by ecfiler stage-pull) |
/api/validate |
POST | PDF validation |
/api/redaction-scan |
POST | Rule 5.2 scanning |
/api/certificate-of-service |
POST | Generate certificate of service |
/api/certificate-of-service/pdf |
POST | Download CoS as PDF |
/api/courts |
GET | List/search courts |
/api/courts/{id}/events |
GET | Event codes per court |
/api/nature-of-suit |
GET | JS-44 nature of suit codes |
/api/nature-of-suit/categories |
GET | NOS categories |
/api/history |
GET | Filing history |
/api/health |
GET | Health check |
| Type | Count | Examples |
|---|---|---|
| District | 97 | S.D.N.Y. (nysd), C.D. Cal. (cacd), N.D. Ill. (ilnd) |
| Bankruptcy | 94 | S.D.N.Y. (nysb), C.D. Cal. (cacb), D. Del. (deb) |
| Appellate | 16 | 2nd Cir. (ca2), 9th Cir. (ca9), D.C. Cir. (cadc) |
python -m pytest tests/ -v # Run the test suite (~400 tests)
ecfiler check # Verify dev setupSee CONTRIBUTING.md for development guidelines.
MIT