US Federal Court Cases Scraper avatar

US Federal Court Cases Scraper

Pricing

from $0.49 / 1,000 cases

Go to Apify Store
US Federal Court Cases Scraper

US Federal Court Cases Scraper

Search US federal court dockets and get one row per case: caption, court, docket number, filing date, nature of suit, cause, assigned judge, parties, counsel and a docket link. The case index, not the filings. No PACER account. $0.50 per 1,000 cases.

Pricing

from $0.49 / 1,000 cases

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Search US federal court dockets and get one row per case: the caption, court, docket number, filing date, nature of suit, cause, judge, parties, counsel and a link to the public docket on CourtListener. 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.

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 to 90 cases a minute.

InputSearch terms, court ids, filing dates, nature-of-suit codes, cause, case name, docket numbers, party, judge or attorney
OutputOne row per federal case: caption, court, docket number, filing and closing dates, nature of suit, cause, judge, parties, counsel, docket link
Ceiling2,000 cases and 10 search terms per run
SpeedAbout 80 to 90 cases a minute: two runs of 200 cases took 136 and 152 seconds
Account neededNone. No PACER account and no API key
Price$0.50 per 1,000 cases on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 10,000

🔍 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, so give 1,000 cases about twelve minutes.

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 data you get from each federal court case

What you getField
The stable id and the caption, short and longdocketId, caseName, caseNameFull
The court, its id and its citation formcourt, courtId, courtCitation
The docket numberdocketNumber
Filed, closed and argued datesdateFiled, dateTerminated, dateArgued
Nature of suit, with its code, and the causenatureOfSuit, natureOfSuitCode, cause
Jurisdiction type and jury demandjurisdictionType, juryDemand
The assigned judge, and a magistrate it was referred toassignedJudge, referredJudge
Every party, and how manyparties, partyCount
Counsel of record and their firmsattorneys, lawFirms
Bankruptcy chapter, on bankruptcy docketsbankruptcyChapter
The court's own PACER id, the docket page, and when the record reached CourtListenerpacerCaseId, docketUrl, addedToCourtListener

▶️ How to scrape US federal court cases

  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 80 to 90 a minute, 200 makes a sensible first run.
  5. Click Start, then download the dataset as CSV, JSON or Excel, or read it from the Apify API.

💰 How much does it cost to scrape federal court cases?

$0.50 per 1,000 cases, which is $0.0005 a case on the Free plan. Paid plans pay a little less: $0.495 on Starter, $0.49 on Scale and $0.485 on Business. On the free plan, the $5 Apify gives you each month covers about 10,000 cases. 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 you give it

{
"searchTerms": ["\"artificial intelligence\" copyright"],
"courts": ["mad", "cand", "nysd"],
"natureOfSuit": ["820"],
"filedAfter": "2026-01-01",
"maxItems": 100
}
FieldDefaultWhat it is
searchTermsnone, so the filters decide; the box starts with one termFull text across the docket record, up to 10 terms. Each runs as its own search and they share the row budget.
maxItems20Total cases, 1 to 2,000.
courtsevery federal courtCourt 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.
filedAfternone, the box starts at 2026-01-01YYYY-MM-DD, the day the case was filed with the court.
filedBeforenoneYYYY-MM-DD. Pair it with filedAfter for a window.
natureOfSuitanyCivil 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.
causeanyThe statute as the docket spells it, such as copyright, 15:1125 or 42:1983. A substring is enough.
caseNameanyWords that must appear in the caption. Narrower than a search term.
docketNumbersnoneExact numbers such as 1:26-cv-14275, up to 10. Courts reuse numbers every year, so pair one with a court id.
partyNameanyoneA 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.
judgeNameany judgeSurname of the assigned judge, such as Chhabria. A magistrate the case was only referred to is not searched.
attorneyNameanyoneAn attorney of record. Only dockets that list counsel can match.
sortBynewestnewest or oldest by filing date, or relevance, which only means something with search terms.
proxyUrlsnoneYour own servers to send the traffic through, as http://user:pass@host:port. Leave it empty unless you need that.

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 run on 30 September 2026:

{
"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"
}
FieldHow to read it
docketIdThe stable key. docketNumber on its own is not unique: the same number exists in several courts and years.
caseName, caseNameFullThe short caption, and the long form where one exists, which is usually null.
court, courtId, courtCitationThe full court name, the id you pass back in courts, and the Bluebook abbreviation.
dateFiled, addedToCourtListenerWhen 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.
dateTerminatedWhen the case closed. null means open, or that nobody recorded a closing date, and from outside those look the same.
natureOfSuit, natureOfSuitCodeThe civil cover sheet classification, and just its number. Often null on criminal and bankruptcy dockets.
causeThe statute as the clerk typed it. Spelling and punctuation vary between districts.
assignedJudge, referredJudgeThe judge the case sits with, and a magistrate it was referred to, usually null.
parties, partyCountEvery 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, lawFirmsCounsel of record and their firms, once an appearance has been entered.
pacerCaseIdThe court's own PACER id, useful when reconciling against a PACER export.

🧾 Reading the output

Three kinds of row can share a dataset.

RowHow to spot itCharged
A caserecordType: "case", charged: trueyes
The samplerecordType: "sample", _sample: true, charged: falseno
A diagnosticrecordType: "diagnostic", _diagnostic: true, charged: false, an errorCodeno

To keep only real cases, filter on recordType == "case".

CodeWhat it means
NO_RESULTSThe search ran and nothing matched.
BAD_INPUTCases 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 rejected the search as written.
NOT_SERVEDCourtListener did not serve that search on this run. Re-run it later.
RATE_LIMITEDCourtListener still wanted the run to slow down after it had waited once. Try again in a few minutes, or ask for fewer cases.
NETWORKCourtListener could not be reached, so nothing was searched.
TIME_BUDGETThe run reached its time limit before one of your searches was made or finished. Cases delivered before that are charged, and nothing more is charged for that search. The run ends as failed only when the time limit stopped it before any case came back.

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.

💡 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 docketUrl opens 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 to 90 cases a minute. A million rows by this afternoon is the wrong job for it.
  • It is not an official CourtListener tool. Dami's Studio is independent and is not affiliated with or endorsed by CourtListener or Free Law Project, or by any other company named on this page.

🧭 Which public records scraper do you need?

If you wantUse
US federal court cases, the docket indexThis one
A company's filings with the SECSEC EDGAR Scraper
Patents by keyword, inventor or assigneeGoogle Patents Search Scraper
Federal money a company has receivedUSASpending Federal Awards Scraper
A European company's register record and officersNorth Data 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.

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.

How do I pick up new federal cases every day?

Schedule it daily with filedAfter set to yesterday, and use docketId as the key for comparing runs.

How far back do the court records go?

As far as CourtListener's public database goes for that court. The depth is uneven, so try a filedBefore date and see.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/courtlistener-cases-scraper. Either way the run happens on your Apify account at the same price.

Party names can still be personal data where privacy law applies, so have a reason for collecting them. Apify's write-up on the legality of web scraping is a fair starting point, and we are not lawyers.

🆘 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.