CourtListener Scraper | 16 Fields, Opinions & Dockets
Pricing
from $0.60 / 1,000 court records
CourtListener Scraper | 16 Fields, Opinions & Dockets
Scrape US federal and state court opinions, case law, and dockets from CourtListener. Filter by query, court, and date. Get case name, judge, citations, docket number as structured JSON, no API key. Use it as an MCP server in Claude, ChatGPT & AI agents.
Pricing
from $0.60 / 1,000 court records
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
4
Monthly active users
2 days ago
Last modified
Categories
Share
CourtListener Scraper: 16 Fields, Opinions & Dockets
Pay only for results delivered. Browse all Actors.
๐ฐ From $0.60 / 1,000 results.
How to search US case law and dockets without PACER fees
Search CourtListener, the Free Law Project's database of US federal and state court records, by keyword or quoted phrase. Get back 16 structured fields per record: case name, full case name, court and court ID, filing and argument dates, docket number, judge, reporter citations, citation count, precedential status, nature of suit, cluster and docket IDs, and a direct CourtListener URL.
No API key is required. A free CourtListener token is optional and only raises your rate limit. Up to 10,000 records per run, paginated automatically.
โ No API key required ยท โ 16 fields per record ยท โ Opinions and dockets ยท โ Court and date-range filters ยท โ MCP-ready for AI agents
Search US case law by topic
The core run. resultType defaults to opinions.
{"query": "patent infringement","maxResults": 50}
Quoted phrases work as you would expect: "\"inevitable disclosure\"" searches the phrase, not the words.
Restrict a search to one court
court takes a CourtListener court slug, scotus, ca9, cafc, ded, and so on.
{"query": "patent infringement","resultType": "opinions","court": "ca9","maxResults": 100}
Pull dockets instead of opinions
resultType: "dockets" searches RECAP docket records rather than written opinions, the right choice when you care about what was filed, not what was decided.
{"query": "securities class action","resultType": "dockets","dateFrom": "2026-01-01","maxResults": 200}
Monitor recent filings on a topic
Set a tight dateFrom, save it as a task, and schedule it. Deduplicate downstream on cluster_id or docket_id.
{"query": "artificial intelligence copyright","resultType": "opinions","dateFrom": "2026-07-01","dateTo": "2026-08-01","maxResults": 500}
Raise your rate limit with a free token
CourtListener issues free API tokens. Supplying one lifts the anonymous rate limit, worth doing before a large backfill.
{"query": "trade secret misappropriation","maxResults": 5000,"apiToken": "YOUR_COURTLISTENER_TOKEN"}
The token is optional. Without it the actor still runs, just under the anonymous limit.
What data do you get for each court record
Captured from a live run against query: "patent infringement", court: "ca9":
{"case_name": "Cpc Patent Technologies Pty Ltd. v. Apple Inc.","case_name_full": "","court": "Court of Appeals for the Ninth Circuit","court_id": "ca9","date_filed": "2024-10-24","date_argued": "2024-09-24","docket_number": "23-3449","judge": "","citations": ["119 F.4th 1126"],"cite_count": 3,"status": "Published","nature_of_suit": "","cluster_id": 10160745,"docket_id": 69032034,"url": "https://www.courtlistener.com/opinion/10160745/cpc-patent-technologies-pty-ltd-v-apple-inc/","scraped_at": "2026-07-15T04:14:18.606Z"}
Every record carries these 16 fields:
| Field | Description |
|---|---|
๐ case_name | Short case name (e.g. Smith v. Jones) |
๐ case_name_full | Full official case name; blank when CourtListener has none on file |
๐๏ธ court | Court name |
๐ court_id | CourtListener court slug, use it in the court filter |
๐
date_filed | Filing date (YYYY-MM-DD) |
๐ฃ๏ธ date_argued | Oral argument date, where applicable |
๐ข docket_number | Court docket number |
๐จโโ๏ธ judge | Presiding judge if published; blank when not recorded |
๐ citations | Array of reporter citations |
๐ cite_count | How many later opinions cite this one, a rough authority signal |
โ
status | Precedential status (e.g. Published) |
โ๏ธ nature_of_suit | Nature of suit if classified; blank when not set |
๐ cluster_id | CourtListener opinion cluster ID, stable, deduplicate on this |
๐ docket_id | CourtListener docket ID |
๐ url | CourtListener record URL |
๐ scraped_at | ISO timestamp when the record was captured |
Blank strings are honest, not missing data: CourtListener genuinely has no full case name, judge, or nature-of-suit classification on file for many records, and we surface exactly what the source holds rather than inventing a value. Results are ordered by relevance score, and a final _type: "summary" row reports total_available so you know how much of the result set you pulled.
How does this work without an API key or PACER
CourtListener is run by the Free Law Project and exposes a public REST API. This actor calls the v4 search endpoint over plain HTTP, no browser, no proxy, no anti-bot to defeat, paginates via the cursor CourtListener returns, and normalises each result into a flat record.
PACER charges roughly $0.10 per page for federal court documents. CourtListener's RECAP archive holds a large share of the same material, contributed by users, at no per-page cost. That is the arbitrage this actor exists to make easy.
Requests retry automatically on 429 and 5xx responses with a capped backoff. A run that matches nothing logs it and charges nothing.
What does court record data cost here
| Event | Price | You pay when |
|---|---|---|
| Record delivered | $0.001 | A court record lands in your dataset |
$1.00 per 1,000 records on the FREE plan, falling to $0.60 on GOLD and above. Empty searches and failed requests are never charged.
Common use cases
Legal research pipelines. Build a corpus of primary law on a topic and feed it into your own search or RAG system.
Docket monitoring. Watch a court or a topic for new filings on a schedule.
Litigation intelligence. Track how often a doctrine is cited, and by whom, via cite_count and citations.
Compliance and risk. Surface enforcement and litigation patterns in a regulated category.
Getting started
- Enter a search query, plain keywords or a quoted phrase.
- Choose
opinions(written decisions) ordockets(RECAP filings). - Optionally narrow by
courtslug and adateFrom/dateTorange. - Set
maxResults(up to 10,000). - Click Start, then export as JSON, CSV, or Excel, or pull it via API or MCP.
Run it on a schedule
- Run the actor once with the input you want repeated, then click Save as a task.
- In the Apify Console, go to Schedules โ Create new.
- Name it, set your timezone, and pick a frequency or a cron expression (e.g.
0 6 * * *). - Under Actors or tasks to run, add the task you saved.
- Save. Nothing is charged just for a schedule existing.
Full options are in Apify's Schedules documentation.
FAQ
Do I need a CourtListener API key? No. A free token is optional and only raises your rate limit, which matters on large backfills.
What is the difference between opinions and dockets?
Opinions are written court decisions. Dockets are the RECAP filing records for a case. Set resultType accordingly.
How do I find a court ID?
Every returned record carries court_id. Run a broad search first, read the court_id values, then re-run filtered.
Why are judge and nature_of_suit sometimes blank?
Because CourtListener has no value on file for that record. The field is surfaced as blank rather than filled with a guess.
How many records can I pull in one run? Up to 10,000, paginated automatically via the API cursor.
How do I deduplicate across scheduled runs?
Match on cluster_id for opinions or docket_id for dockets.
Is this a substitute for PACER? For much federal material, RECAP covers it at no per-page cost. It is a contributed archive, so coverage is not guaranteed to be complete for every case.
Use from Claude, ChatGPT and any MCP agent
https://mcp.apify.com/?tools=themineworks/courtlistener-court-records
Or call it programmatically:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/courtlistener-court-records').call({query: 'patent infringement',court: 'ca9',maxResults: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Complete your legal & compliance pipeline
Got the case law. Now widen the picture:
- FDA Recalls Scraper: drug, device, and food enforcement actions.
- FDA 510(k) Scraper: medical device clearances for regulatory context.
- Crossref Scholarly Metadata: academic literature that cites or informs the topic.
Typical flow: courtlistener finds the case law, fda-recalls surfaces the enforcement, crossref adds the academic backing.
Disclaimer: This actor is an independent tool and is not affiliated with the Free Law Project. Court records are public documents; nothing here is legal advice.
Questions or need a custom field set? Reach out through the Apify profile.
Related guides
- CourtListener API: How to Search US Court Records and Case Law Programmatically
- Building a Legal & Regulatory Intelligence Pipeline with Court Records, Federal Rules, and Contract Data
- PACER vs CourtListener: Accessing US Court Records Without Paying $0.10 Per Page
Last verified: 2026-08