IP Litigation Data Pipeline · US Federal District Courts (RECAP / CourtListener)
CourtListener RECAP API: Online
Engine: node:sqlite
Host: 2.25.115.67
--
Total Ingested Cases
Normalized across 5 federal districts
--
Patent Litigation
Title 35 U.S.C. · D.Del, TXED, TXWD
--
Trademark Litigation
Lanham Act · SDNY, CACD
--
Copyright Litigation
Title 17 U.S.C. · SDNY, CACD
--
Design Litigation
Community Design Reg. · EUIPO
--
Domain Disputes
UDRP · WIPO Arbitration & Mediation Center
--
Utility Model Litigation
Japan IP High Court
--
Unfair Competition Litigation
Japan IP High Court
--
Pristine Snapshots
100% SHA-256 checksum verified
--
Indexed Documents
Filings with OCR text snippets
Case Caption / Name
Docket #
Court
IP Type
Filed
Disposition
Action
Loading litigation records from SQLite...
Ingestion & Normalization Lineage
Live Pipeline Verified
CourtListener / RECAP search results land directly onto disk in raw JSON format before parsing.
A cryptographic SHA-256 digest is generated immediately, establishing an immutable provenance trail for enterprise evaluation.
[CourtListener / RECAP API] (https://www.courtlistener.com/api/rest/v4/search/?type=r)
│
├──▶ 1. Land Raw Snapshot JSON (<repo>/storage/snapshots/COURTLISTENER_RECAP_*.json)
├──▶ 2. SHA-256 Checksum Calculation (Stored in SQLite raw_snapshots audit table)
│
▼
[ETL Normalization Service]
│
├──▶ IP Classification (Lanham Act 15:1114/15:1125 ➔ TRADEMARK, 35:271 ➔ PATENT, 17:501 ➔ COPYRIGHT)
├──▶ Shallow Patent Extraction (Regex extraction of referenced patents and shorthand)
├──▶ Entity Parsing (Structured arrays for parties, attorneys, and law firms)
└──▶ Store into SQLite (cases + documents tables with foreign keys)
Cryptographic Ingestion Snapshots (raw_snapshots)
Zero Fixtures / 100% Real API Pulls
Every row below represents an actual network landing from the Free Law Project CourtListener RECAP API. Checksums can be validated against the local snapshot JSON files on disk.
Snapshot ID
Source API & Query
Fetched At
Record Count
SHA-256 Checksum
Loading audit snapshots...
Pull More Data (Live Ingestion)
Demo Control · Live API Calls Only
Runs the same fetch → snapshot → normalize → upsert pipeline as the CLI ingestion scripts,
on demand. Pick a source, adjust the search term if you like, and pull up to 50 more real records —
they land in the same store the Docket Explorer reads from and appear immediately, no mock data.
Query the Raw REST Endpoints
Port 4100
These JSON endpoints power this UI and can be queried directly via curl or integrated into external ETL pipelines:
# 1. Search patent cases in D. Delaware
curl "http://localhost:4100/api/v1/cases/search?ipType=PATENT&court=ded&limit=5"
# 2. Free-text search by party or patent number
curl "http://localhost:4100/api/v1/cases/search?q=patent&limit=10"
# 3. Retrieve immutable raw audit snapshots with SHA-256 hashes
curl "http://localhost:4100/api/v1/snapshots"
# 4. Pipeline volume statistics by IP litigation classification
curl "http://localhost:4100/api/v1/stats"
Where Automation Stops & a Human Takes Over
Human-in-the-Loop QA
Every case below was auto-ingested and auto-classified successfully, but landed here because at least one
field genuinely cannot be filled in responsibly by code alone: case outcome (who prevailed
requires reading the actual order or judgment, not just docket dates), or a patent-in-suit number
that shallow caption/snippet regex couldn't find. These are examples of tasks where computational
extraction can be supplemented by analyst review before the structured record is finalized. A review
submitted here is written back to the structured record with a “Human-Verified” badge,
visible in the Docket Explorer.
--
Awaiting Review
Outcome unknown or asset unverified
--
Human-Verified
Outcome & points of law confirmed
Case Caption / Name
Court
IP Type
Why It's Flagged
Action
Loading review queue...
Entity De-Duplication Candidates
-- merged / -- rejected
Same Jaro-Winkler-plus-review pattern Chrisian runs for Harris County party matching, retargeted at name
variants across this corpus — e.g. a law firm whose name is punctuated three different ways across
filings. A score above 0.90 is a candidate, never an automatic merge.
Type
Name A
Name B
Similarity
Canonical Name (if merging)
Action
Loading candidates...
Possible Federal Circuit Appeals
-- pending / -- confirmed
Live full-text search against CourtListener's Federal Circuit (cafc) docket index,
using the most distinctive party name from each terminated patent case. A hit means that party is
mentioned in a CAFC docket — not that it's confirmed to be this case's appeal. Full-text search
surfaces false positives (a different suit against the same defendant), so nothing here is written back
as a link until a human confirms it.
District Court Case
Candidate Federal Circuit Case
Matched On
Action
No scan run yet — click "Scan for New Candidates".
USPTO Registration Enrichment
-- enriched
Live lookup against USPTO's Open Data Portal Patent File Wrapper API for each patent-in-suit number
(human-confirmed numbers preferred over shallow auto-extraction). Pulls invention title, filing/grant
dates, application status, and the full chain-of-title from assignment records — presented as a
history, not a single confident "owner," since chain-of-title disputes are a human question.
Requires a USPTO ODP API key server-side.
No USPTO_ODP_API_KEY configured on the server — add one to .env to enable this.
USPTO Trademark Registration Enrichment (TSDR)
-- enriched
Live lookup against USPTO's Trademark Status & Document Retrieval (TSDR) API for each extracted
serial/registration number on a US trademark case — a genuinely separate credential system from the
Open Data Portal key used for patent enrichment above (confirmed by testing: that key returns 401 here).
Pulls the mark text, prosecution status, owner of record, and goods/services classes. Requires a USPTO
TSDR API key server-side.
No USPTO_TSDR_API_KEY configured on the server — add one to .env to enable this.