US Federal Court Cases Scraper
Search US federal court dockets: case name, court, docket number, filing date, nature of suit, judge and parties. One row per case.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
searchTerms,maxItems,courts(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0005 per case = $0.5 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Case scraped | One federal court case or docket from the public index. Rows that do not match the filters are dropped and never charged. | $0.0005 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-09-20, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
searchTerms | Full-text search across the docket record - the caption, the cause, the parties and the filing descriptions. Each term runs as its own search and the row budget is split between them. Quote a phrase to keep it together, like "artificial intelligence". Up to 10 terms per run. Leave it empty if you would rather select purely with the filters below. | array |
maxItems | Total rows across all search terms. Hard ceiling 2,000. Results come 20 at a time at a steady pace, and big runs take a while: a test run of 200 cases took about two and a half minutes, so allow about twelve for 1,000. Keep it low while you are testing; you pay per case. | integer |
courts | CourtListener court ids, lower case. `cand` is the Northern District of California, `nysd` the Southern District of New York, `mad` the District of Massachusetts, `txwd` the Western District of Texas, `ca9` the Ninth Circuit. Give several and a case in any one of them is kept. A court id the search does not recognise is silently ignored rather than reported, so every row is checked against this list before you are charged for it. | array |
filedAfter | ISO date, for example 2026-01-01. Filters on the date the case was filed with the court, not the date CourtListener picked it up. | string |
filedBefore | ISO date, for example 2026-09-30. Pair it with the field above for a window. | string |
natureOfSuit | The civil cover sheet code the clerk assigned. 820 is copyright, 830 patent, 840 trademark, 890 other statutory actions, 442 employment civil rights, 710 fair labor standards. Give the bare number; `820 Copyright` works too and the code is taken off the front. | array |
cause | The statute the case is brought under, as the docket spells it: `copyright`, `securities`, `15:1125` for Lanham Act false designation, `42:1983` for civil rights. A substring is enough. | string |
caseName | Words that must appear in the case caption. Narrower than a search term, because a search term also matches the body of the docket. | string |
docketNumbers | Exact docket numbers as the court writes them, for example 1:24-cv-11611. The same number is reused by different courts every year, so pair it with a court id unless you want every court's version. | array |
partyName | An organisation or person named as a party. Company names work well; common personal names return a lot of unrelated cases, because a docket index has no way to tell two people with the same name apart. | string |
judgeName | Surname of the judge the case is assigned to, for example Chhabria. Matches the assigned judge only; a magistrate the case was merely referred to is returned in its own column but is not searched on. | string |
attorneyName | An attorney of record. Only cases whose docket lists counsel will match, which is most civil cases and few criminal ones. | string |
sortBy | `newest` and `oldest` sort by filing date. `relevance` orders by how well the case matches your search terms and only makes sense when you have supplied some. | string |
proxyUrls | Leave this empty for a normal run. Fill it in only if you want the traffic to leave through proxy servers you already pay for, one URL per line, in the form http://user:pass@host:port. | array |
What you get
A structured dataset — each result includes fields like:
caseNamecourtdocketNumberdateFileddateTerminatednatureOfSuitcauseassignedJudgepartieslawFirmsjurisdictionTypedocketUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
US Federal Court Cases Scraper: federal dockets from CourtListener, no PACER account needed
Search terms or filters go in: a court, a filing date window, a nature-of-suit code, a party, an attorney or the assigned judge. One row per federal case comes out, with the caption, court, docket number, filing date, nature of suit, cause, judge, parties, counsel and a link to the public docket on CourtListener. It returns the case index, not the filings, so there is no complaint, no motion, no opinion and no PDF, and it is not fast: about 80 cases a minute.
| Input | Search terms, court ids, filing dates, nature-of-suit codes, cause, case name, docket numbers, party, judge or attorney |
| Output | One row per federal court case |
| Ceiling | 2,000 cases and 10 search terms per run |
| Account needed | None. No PACER account and no API key |
| Price | $0.50 per 1,000 cases, flat on every plan |
🔍 What US Federal Court Cases Scraper does
Each search term runs as its own search over the docket record, which covers the caption, the cause, the parties and the filing descriptions. Quote a phrase to hold it together. Your filters narrow every term the same way, and a case found twice in one run is delivered once.
Every row is checked against every filter you set before it is charged. A case from the wrong court, date, code, party or judge is dropped, and a free row tells you how many went and why.
Results come 20 to a page at a steady pace. A measured run of 200 copyright cases took two and a half minutes, so give 1,000 cases about twelve.
Party and counsel names come through exactly as the court published them. The internal person ids the source attaches to each party and attorney are dropped, so the rows cannot be joined into a profile of anyone.
📥 What you give it
| Field | If you leave it out | What it does |
|---|---|---|
searchTerms | none, the filters decide | Full text across the docket record, up to 10 terms. Each runs as its own search and they share the row budget. |
maxItems | 20 | Total cases, 1 to 2,000. |
courts | every federal court | Court ids in lower case, up to 30: cand Northern District of California, nysd Southern District of New York, mad District of Massachusetts, txwd Western District of Texas, ca9 Ninth Circuit. A case in any of them is kept. |
filedAfter | no start date | YYYY-MM-DD, the day the case was filed with the court. |
filedBefore | no end date | YYYY-MM-DD. Pair it with filedAfter for a window. |
natureOfSuit | any | Civil cover sheet codes: 820 copyright, 830 patent, 840 trademark, 890 other statutory actions, 442 employment civil rights, 710 fair labor standards. 820 Copyright works too. |
cause | any | The statute as the docket spells it, such as copyright, 15:1125 or 42:1983. A substring is enough. |
caseName | any | Words that must appear in the caption. Narrower than a search term. |
docketNumbers | none | Exact numbers such as 1:26-cv-14275, up to 10. Courts reuse numbers every year, so pair one with a court id. |
partyName | anyone | A company or person named as a party. Company names work well. A common personal name brings back unrelated cases, because the index cannot tell two people apart. |
judgeName | any judge | Surname of the assigned judge, such as Chhabria. A magistrate the case was only referred to is not searched. |
attorneyName | anyone | An attorney of record. Only dockets that list counsel can match. |
sortBy | newest | newest or oldest by filing date, or relevance, which only means something with search terms. |
proxyUrls | not used | Your own servers to send the traffic through, as http://user:pass@host:port. Leave it empty unless you need that. |
{
"searchTerms": ["\"artificial intelligence\" copyright"],
"courts": ["mad", "cand", "nysd"],
"natureOfSuit": ["820"],
"filedAfter": "2026-01-01",
"maxItems": 100
}
An input with nothing to search for, such as {} sent through the API, returns one free sample row so you can see the shape first.
📤 What you get back
A real row from a real run:
{
"ok": true,
"charged": true,
"recordType": "case",
"docketId": 74812464,
"caseName": "UMG Recordings, Inc. v. Suno, Inc.",
"caseNameFull": null,
"court": "District Court, D. Massachusetts",
"courtId": "mad",
"courtCitation": "D. Mass.",
"docketNumber": "1:26-cv-14275",
"dateFiled": "2026-09-18",
"dateTerminated": null,
"dateArgued": null,
"natureOfSuit": "820 Copyright",
"natureOfSuitCode": "820",
"cause": "17:101 Copyright Infringement",
"jurisdictionType": "Federal Question",
"juryDemand": "Plaintiff",
"assignedJudge": "F. Dennis Saylor IV",
"referredJudge": null,
"parties": [
"UMG Recordings, Inc.",
"Ultra Records, LLC",
"Capitol Records, LLC",
"Suno, Inc.",
"Arista Music",
"Volcano Entertainment III, LLC",
"Sony Music Entertainment",
"Arista Records, LLC",
"Zomba Recording LLC",
"John Does 1-10",
"Sony Music Entertainment US Latin, LLC",
"Alamo Records, LLC",
"Records Label, LLC",
"LaFace Records, LLC"
],
"partyCount": 14,
"lawFirms": [],
"attorneys": ["Daniel J. Cloherty", "Alexandra Arnold"],
"bankruptcyChapter": null,
"pacerCaseId": "306399",
"docketUrl": "https://www.courtlistener.com/docket/74812464/umg-recordings-inc-v-suno-inc/",
"addedToCourtListener": "2026-09-18T15:08:42.969152Z",
"scrapedAt": "2026-09-30T02:25:54.911Z"
}
| Field | What it is |
|---|---|
docketId | The stable key. docketNumber on its own is not unique: the same number exists in several courts and years. |
caseName, caseNameFull | The short caption, and the long form where one exists, which is usually null. |
court, courtId, courtCitation | The full court name, the id you pass back in courts, and the Bluebook abbreviation. |
dateFiled, addedToCourtListener | When the case was filed with the court, and when the record reached CourtListener. An old case can arrive years late, so do not use the second as the first. |
dateTerminated | When the case closed. null means open, or that nobody recorded a closing date, and from outside those look the same. |
natureOfSuit, natureOfSuitCode | The civil cover sheet classification, and just its number. Often null on criminal and bankruptcy dockets. |
cause | The statute as the clerk typed it. Spelling and punctuation vary between districts. |
assignedJudge, referredJudge | The judge the case sits with, and a magistrate it was referred to, usually null. |
parties, partyCount | Every party the docket names, in the source's order. Plaintiffs and defendants are not separated, because the index does not say which is which. |
attorneys, lawFirms | Counsel of record and their firms, once an appearance has been entered. |
bankruptcyChapter | 7, 11, 13 and so on, on bankruptcy dockets only. |
pacerCaseId | The court's own PACER id, useful when reconciling against a PACER export. |
docketUrl | The public docket page, where you can read the entry list yourself. |
🧾 Reading the output
Three kinds of row can share a dataset.
| Row | How to spot it | Charged |
|---|---|---|
| A case | recordType: "case", charged: true | yes |
| The sample | recordType: "sample", _sample: true, charged: false | no |
| A diagnostic | recordType: "diagnostic", _diagnostic: true, charged: false, an errorCode | no |
To keep only real cases, filter on recordType == "case".
| Code | What it means |
|---|---|
NO_RESULTS | The search ran and nothing matched. |
BAD_INPUT | Cases came back that did not match your filters and were dropped, often because of a court id or a code the search does not know. Also used when CourtListener refused the search as asked. |
RATE_LIMITED | CourtListener still wanted the run to slow down after it had waited once. Try again in a few minutes, or ask for fewer cases. |
NETWORK | CourtListener could not be reached, so nothing was searched. |
TIME_BUDGET | The run ran out of time before one of your searches was made. |
NO_RESULTS and NETWORK are the pair to tell apart. The first means there is nothing there. The second means nobody looked, which is how somebody ends up believing a company has never been sued.
▶️ How to run it
1. Open US Federal Court Cases Scraper and click Try for free. 2. Type into Search terms, or clear it and use the filters. The form arrives with "artificial intelligence" copyright and Filed on or after set to 2026-01-01. 3. Narrow it with Courts or Nature of suit codes, or under People and firms with Party name or Judge. 4. Set Maximum cases. At about 80 a minute, 200 makes a sensible first run. 5. Click Start, then download the dataset as CSV, JSON or Excel.
💰 How much does it cost?
$0.50 per 1,000 cases, which is $0.0005 a case, flat on every Apify plan. Two hundred cases come to ten cents, and the pace between pages costs you nothing extra.
You pay for case rows and nothing else per row. The sample row and every diagnostic row are free, and so are cases dropped for not matching your filters and repeats inside one run. If you set a maximum charge on the run, it stops at that figure instead of going past it.
💡 What people use it for
- Following a wave of litigation while it happens, such as every new copyright suit against an AI company this quarter, refreshed on a schedule.
- Watching one company's federal docket, so a new suit shows up the day it is filed rather than the week somebody notices.
- Counting rather than reading: patent cases per district per year, as a table you can chart.
- Building a case list for a practice area, say every Fair Labor Standards Act case in a set of districts, with the judge and counsel already in columns.
🚧 What it does not do
- The index, not the documents. No complaint, motions, orders, opinions, docket entries or PDFs. The
docketUrlopens the public docket page. - Federal, not state. District, bankruptcy and appellate dockets only. County and state trial courts are not here.
- Not every federal case. Coverage follows what has reached CourtListener's public database, deep in busy districts and thinner elsewhere. A missing case means not in the source, never that it does not exist.
- Not always a judge or counsel. In one run of 200 copyright cases filed since 2025, 115 named an assigned judge and 188 listed counsel.
- No profiles of people. Names come as the court published them. Nothing is joined to other sources and the person ids are dropped.
- No judgement. No outcome, risk score or summary. A filed case says nothing about its merit, and a terminated one nothing about who won.
- Not fast. About 80 cases a minute. A million rows by this afternoon is the wrong job for it.
🧭 Which public records scraper do you need?
| If you want | Use |
|---|---|
| US federal court cases, the docket index | This one |
| A company's filings with the SEC | SEC EDGAR Scraper |
| Patents by keyword, inventor or assignee | Google Patents Search Scraper |
| Federal money a company has received | USASpending Federal Awards Scraper |
❓ Questions people ask
Do I need a PACER account or a CourtListener API key? No. There is nothing to sign up for, and the run will never ask you for a key.
Can I get the complaint or the judge's opinion? Not from this one. You get who, which court, which statute and which dates, plus a link to the public docket page.
I searched for a judge and got another judge's cases. Why? You should not. Every case is checked against the judge you named before it is charged, and any that slip through are dropped and counted on a free BAD_INPUT row.
Are the party names real people? Some are. A docket names whoever is in the case. They come through as the court published them, nothing is added, and the ids that would link one person across cases are dropped. If you are making decisions about individuals, remember that names collide and records go stale.
Can I run it on a schedule? Yes. A daily schedule with filedAfter set to yesterday picks up new filings, and docketId is a stable key for comparing runs.
How far back does it go? As far as CourtListener's public database goes for that court. The depth is uneven, so try a filedBefore date and see.
🆘 If something breaks
Open the Issues tab on the actor page and send the run ID with the input you used. The errorCode and details on a diagnostic row usually name the reason already.