Court Records & Case Law Scraper — Dockets, Party Name Search avatar

Court Records & Case Law Scraper — Dockets, Party Name Search

Pricing

$2.00 / 1,000 result items

Go to Apify Store
Court Records & Case Law Scraper — Dockets, Party Name Search

Court Records & Case Law Scraper — Dockets, Party Name Search

Search US federal court dockets, case filings (PACER/RECAP mirror) and published opinions via CourtListener free API — no key, no signup. 41 flat fields incl. parties, attorneys, judge, citations, filed-date range, unpublished-opinion filter. Watch mode. $0.002/result, no start fee. Case law API

Pricing

$2.00 / 1,000 result items

Rating

0.0

(0)

Developer

Fetch Smith

Fetch Smith

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

4 days ago

Last modified

Share

Court Records & Case Law Scraper — Dockets + Opinions

Search US federal court dockets (the PACER/RECAP mirror) and published court opinions through CourtListener's public API and get flat, sortable JSON/CSV/Excel rows back.

No API key. No registration. No captcha. The search index this Actor is built on is fully anonymous — many CourtListener wrappers assume a token is required, because the /dockets/ and /opinions/ detail endpoints do need one. The search index does not, so nothing here depends on you creating an account. (Verified live 2026-09-17.)

$0.002 per result, no run-start fee. You pay for rows you actually receive and nothing else.

What you get

Two CourtListener indexes, one unified table:

  • Dockets (recordType: "dockets") — the RECAP archive, a free mirror of federal PACER dockets. Parties, attorneys, law firms, assigned and referred judges, nature of suit, cause of action, jurisdiction type, jury demand, bankruptcy chapter, PACER case ID, and per-filing entries (description, date filed, page count, whether the PDF is actually available, a direct PDF link and the OCR'd text of the filing where RECAP has it).
  • Opinions (recordType: "opinions") — published decisions. Reported citations, cite count (how many later opinions cite this one), authoring judge, status, opinion snippet and the download URL where CourtListener has the document. Editorial extras — syllabus, proceduralHistory, panelNames, neutralCite, lexisCite — are emitted when the court publishes them, which is a minority of rows; see Honest limitations for measured rates before you build on them.
  • Court jurisdiction on every row — courtJurisdiction gives the court's tier as a readable label (Federal District, Federal Appellate, Federal Bankruptcy, State Supreme, State Appellate, Tribal Appellate, Military Appellate, ...) on both dockets and opinions, so you can group or filter federal vs. state vs. bankruptcy without keeping a court-code lookup table of your own.
  • recordType: "both" returns both in one run, in one schema, with type-specific fields left null rather than omitted — so a CSV export has stable columns.

Search is full text across case names, party and attorney names, docket text and opinion bodies, with quoted phrases ("fair use") and boolean operators (AND, OR, NOT).

Input

FieldTypeDescription
querystringFull-text query. Default "patent infringement". Leave empty to browse by filters alone.
recordTypeenumboth (default), opinions, or dockets.
courtsarrayCourtListener court IDs — the slug in a courtlistener.com/court/<id>/ URL: scotus, ca9, cand, nysd, cacb, … 3,359 federal, state and specialty courts. Empty = all courts. An ID CourtListener does not publish is not rejected upstream — it silently matches nothing — so the run log warns and names any unrecognised ID.
partyNamestringRECAP dockets only. Server-side search over the parties on a docket. Quote for an exact name ("Google LLC"), combine with OR for several.
attorneyNamestringRECAP dockets only. Server-side search over the attorneys of record. Same quoting/OR rules.
docketNumberstringCase-number lookup, e.g. 1:20-cv-03590. Real field search on both indexes, not full text.
judgestringOpinions only. Server-side search over the authoring judge(s), e.g. Posner.
filedAfter / filedBeforestringYYYY-MM-DD filing-date bounds, both inclusive. Strictly parsed — an unreadable date stops the run rather than being ignored. See below.
opinionStatusenumOpinions mode only. published (default), unpublished, or any. See below — the default silently excludes a real chunk of matches unless you know to change it.
sortByenumrelevance (default), dateFiledDesc, or dateFiledAsc. Real server-side sort, verified live — see below.
startUrlstringPaste a courtlistener.com search or API URL instead of filling in the fields above — see below.
maxResultsintegerDefault 100. With both, the budget is split evenly between the two indexes, and whatever one index leaves unused goes to the other.
watchLabelstringIncremental mode — see below.
watchChangesbooleanOnly with watchLabel. Off by default. When on, a docket you already saw is re-delivered (and charged again) if its case is terminated since — see below.
webhookUrlstringOptional. POST a small JSON completion summary (records pushed, rows scanned, pages, CourtListener's reported total, dataset ID) here when the run finishes — see FAQ.

Paste a CourtListener search URL

Already built the search on courtlistener.com? Paste the address bar into startUrl instead of re-entering the filters — e.g. https://www.courtlistener.com/?q=patent&type=r&court=cand&filed_after=2024-01-01. An API URL (https://www.courtlistener.com/api/rest/v4/search/?q=patent&type=o) works too; both use the identical q/type/court/filed_after/filed_before/party_name/atty_name/docket_number/judge parameters. Whatever the URL mentions replaces the matching field above; anything it doesn't mention still comes from the fields above, and maxResults/watchLabel always apply. Only Opinions (type=o) and RECAP (type=r) URLs are supported — CourtListener's Oral Arguments, Judges and Parenthetical searches are different record shapes this schema doesn't cover, and a URL for one of those logs a warning and falls back to the recordType field instead.

Search by party, attorney, docket number or judge

query is full text over case bodies and metadata; these four are field searches, which is a different and much sharper thing — "every case where Google LLC is a party" is a question full text answers badly (it also matches every opinion that merely cites Google) and a party search answers exactly. All four are applied server-side, so you are never charged for rows that get filtered out afterwards.

They are not interchangeable across the two indexes, and this matters:

  • partyName and attorneyName exist only on RECAP dockets. The opinion index carries no party or attorney data.
  • judge exists only on opinions. RECAP dockets record an assigned judge but the index doesn't search on it.
  • docketNumber works on both.

CourtListener doesn't reject a field the index can't honour — it ignores it. A type=o&party_name=… search therefore returns the entire opinion corpus rather than an error. So when you set a docket-only filter with recordType: "both", this Actor drops the opinion half of the run (and says so in the log) instead of sending the filter blind and billing you for 8 million unfiltered rows; judge does the same in reverse. Setting a filter against the one index it can't work on (partyName with recordType: "opinions") is an upfront error, as is combining partyName/attorneyName with judge — no single index carries both, so that search can never match anything.

If a docketNumber returns nothing, try it without the office prefix (20-cv-03590 rather than 1:20-cv-03590) — the format varies by court.

Opinion status: the default hides a real, query-dependent chunk of matches

CourtListener's opinion index defaults to published opinions unless you say otherwise — verified live across 4 topic queries, the hidden share is not a fixed number: "patent infringement" 5.7%, "employment discrimination" 18.8%, "qualified immunity" 13.7%, "immigration" 37.2% of true matches missing from a plain search, with no indication in the response that anything was left out. Set opinionStatus to "unpublished" to see only opinions courts didn't designate for publication (often the more interesting ones — sanctions orders, informal rulings, unusual fact patterns), or "any" for the complete set.

"any" means every real status, not just published + unpublished. CourtListener's opinion status field has 5 more real values we found by testing each stat_* flag individually: Errata, Separate, In-chambers, Relating-to, and Unknown. The first four are small (0-27 matches each on "immigration"), but Unknown is not — 31,096 real, dated opinions (2023-2025 district-court rows, not placeholders) on that one query alone, ~17.7% on top of published+unpublished combined. opinionStatus: "any" now requests all 7 flags so it actually returns everything; earlier builds only requested published+unpublished. Ignored (with a warning) when recordType is "dockets", since RECAP dockets have no publication-status concept. Every opinion row already carries a status field either way, so you can always tell which bucket a row came from.

Filing dates: both bounds inclusive, and a bad date stops the run

filedAfter and filedBefore are both inclusive. Verified live against CourtListener: filedAfter and filedBefore both set to 2024-06-13 returns the 6 SCOTUS opinions filed that day, 2024-06-14 alone returns 9, and 2024-06-13 .. 2024-06-14 returns 15 — 6 + 9, so neither endpoint is dropped.

Write them as YYYY-MM-DD. 2024-6-5, 2024/6/5, 2024.06.05 and bare 20240605 are all accepted and normalized for you. Anything else stops the run with an error — it is not quietly ignored. That is deliberate, and it is the opposite of how opinionStatus behaves: a bad opinionStatus falls back to the default, which narrows your results, whereas a dropped date bound widens the search to the entire archive — back to the 1700s — and you would be charged for every one of those rows. This Actor used to do exactly that: filedAfter: "2024-6-5", filedBefore: "2024-6-9" lost both filters and returned ten SCOTUS opinions filed between 1795 and 1831, all billable, with nothing in the log to say the window had been discarded. Fixed in v0.1.20.

US-style 06/15/2024 is rejected on purpose rather than guessed at, because 06/15 and 15/06 cannot be told apart and guessing wrong would silently return the wrong quarter. Impossible calendar dates (2024-06-31, 2023-02-29) are rejected here too, with a useful message — CourtListener itself answers them with a bare HTTP 400.

Sort by filing date

sortBy defaults to relevance, the same order a plain search has always returned. Set it to dateFiledDesc or dateFiledAsc to sort by filing date instead — a real server-side sort verified live (identical total match count either way, just reordered). It's restricted to filing date because that's the one sort field confirmed to behave correctly on both indexes; CourtListener's citation-count sort is opinions-only and returns a server error when sent to the docket index. With recordType: "both", each index is sorted on its own — opinions (sorted) up to their share of maxResults, then dockets (sorted) — not merged into one table sorted end to end. Avoid dateFiledAsc together with watchLabel: an incremental run walks from the oldest match forward, so on an established watch label it may page through a long run of already-delivered records before reaching anything new. dateFiledDesc or the default relevance sort don't have that problem.

Incremental "watch" mode

Set watchLabel to any name and schedule the Actor. The first run on that label records the current match set as a baseline, returns zero results and charges you nothing. Every run after that returns only records that appeared since — so a daily watch on court: ["cand"], query: "trade secret" costs you a couple of rows a day instead of the whole back catalogue every morning. Changing any filter starts a fresh baseline under the same label, so you never get flooded with rows an older, narrower filter had excluded. sortBy does not affect the baseline — it reorders the same matches, it never changes which records match, so switching it doesn't start a fresh baseline.

Baseline size cap. A baseline holds up to 60,000 record ids in one saved record. If a label's baseline grows past that, the oldest-first-seen ids are dropped — and a dropped id is no longer recognised, so that opinion/docket comes back as "new" on a later run and is charged again. The run that drops them says so explicitly: a warning in the log, a note on the run's status message, and baselineTruncated / baselineTruncatedTotal (this run / the whole life of the label) in RUN_SUMMARY, on the webhookUrl payload and in the saved record. If you see it, narrow the watch query (a court, fewer recordTypes, a shorter filed-date window) or split it across several labels so each baseline stays under the cap. A baseline run also stops recording at 20,000 records, and already warns separately when it hits that.

A docket's own id never changes when its case closes — set watchChanges to hear about that too. By default, watch mode only ever tells you about brand-new records: a docket you were already delivered stays silent forever after, even the day the case is dismissed or a judgment issues, because CourtListener keeps the same docket_id for the life of the case. Set watchChanges: true and a docket whose dateTerminated moves from empty to a real date since you last saw it is re-delivered — charged again, same as a new row — tagged with _watchChangeType: ["dateTerminated"] and _watchPrevious: { dateTerminated: null } (or whatever the earlier value was) so you don't have to diff it against your own last-seen copy. Only dockets can fire this; opinions have no comparable field and are unaffected whether watchChanges is on or off. A baseline seeded before this option existed keeps working unchanged — it just starts tracking terminations from the run you first turn it on, not retroactively.

Webhook notification on completion

Set webhookUrl to an http(s) URL and this Actor POSTs a small JSON summary there when the run finishes — actorRunId, defaultDatasetId, finishedAt, pushed, scanned, pages, totalReported, a summary object (identical to the RUN_SUMMARY record below), and — if watchLabel is set — watchSeeding/watchNewCount/watchChangedCount. This is a plain input field, not an Apify platform webhook (those are configured separately per Task/Actor via the Console or Webhooks API) — set it on the run itself for a quick completion ping without extra setup. It's best-effort: a failed or slow webhook only logs a warning, fired after every record is already pushed and charged, so it never affects the result set or your bill.

Did this run get everything? Check RUN_SUMMARY

Every run writes a RUN_SUMMARY record to its key-value store (GET /v2/actor-runs/<runId>/key-value-store/records/RUN_SUMMARY) with a top-level complete boolean and, when complete is false, an incompleteReason (max-results, charge-limit, seed-cap or source-error). It also breaks the run down per index under recordTypes.opinions/recordTypes.dockets: exhausted is true only if that index was read all the way to the end of its matches — when it's false, a low delivered count for that index means "we don't know", not "the court had few matches". This matters because CourtListener's opinions and dockets indexes are walked independently: a mid-walk error on one (a 5xx, a timeout) does not stop the other, so a run can finish SUCCEEDED with rows from one index and total silence from the other unless you check recordTypes.<kind>.failed/lastError. A run that goes incomplete also sets the Actor's run status message, visible in the Apify Console without opening the key-value store.

Sample row (docket)

{
"recordType": "docket",
"id": "r-68922376",
"caseName": "Gen Digital, Inc. v. Sycomp, a Technology Company, Inc.",
"court": "District Court, N.D. California",
"courtId": "cand",
"courtJurisdiction": "Federal District",
"docketNumber": "3:24-cv-04106",
"dateFiled": "2024-07-08",
"judge": "Charles R. Breyer",
"parties": ["North American Systems International, Inc.", "Gen Digital, Inc.", "Sycomp, a Technology Company, Inc."],
"attorneys": ["Craig J. Mariam", "Anthony David Phillips", "Michael William Stebbins"],
"firms": ["Gordon and Rees Scully Mansukhani", "Maslon LLP", "Carr McClellan P.C.", "Fox Rothschild LLP"],
"suitNature": "190 Contract: Other",
"cause": "28:1332 Diversity-Breach of Contract",
"jurisdictionType": "Diversity",
"juryDemand": "None",
"pacerCaseId": "…",
"documentCount": 3,
"documents": [
{ "documentId": 479225638, "entryNumber": 90, "description": "Order", "entryDateFiled": "2026-08-10", "pageCount": 8, "isAvailable": true, "textSnippet": "Case 1:12-cv-00854-LPS Document 13 Filed 07/07/14 Page 1 of 6 PageID #: 573\n\nIN THE UNITED STATES DISTRICT COURT…", "pdfUrl": "https://storage.courtlistener.com/recap/gov.uscourts.ded.49136/gov.uscourts.ded.49136.13.0.pdf", "url": "https://www.courtlistener.com/docket/…" }
],
"downloadUrl": "https://storage.courtlistener.com/recap/gov.uscourts.ded.49136/gov.uscourts.ded.49136.13.0.pdf",
"url": "https://www.courtlistener.com/docket/68922376/…"
}

Sample row (opinion)

{
"recordType": "opinion",
"id": "o-8493216",
"caseName": "Phillips v. Mike Murdock Evangelistic Ass'n",
"court": "Court of Appeals for the Ninth Circuit",
"courtId": "ca9",
"courtJurisdiction": "Federal Appellate",
"docketNumber": "No. 08-16925",
"dateFiled": "2009-07-28",
"citations": ["329 F. App'x 775"],
"citeCount": 0,
"judge": "Schroeder, Thomas, Wardlaw",
"status": "Published",
"snippet": "MEMORANDUM ** Cherie Phillips, author of the Wisdom Bible of God, appeals pro se from the district court's judgment in her trademark infringement action…",
"opinionCount": 1,
"url": "https://www.courtlistener.com/opinion/8493216/…"
}

All 41 fields are listed with types and examples in the Output schema tab.

Use cases

  • Competitive and IP monitoring — watch every new patent, trademark or trade-secret docket in the districts your industry litigates in, and get alerted the day one is filed.
  • Law-firm business development — pull the firms and attorneys appearing opposite a target client, by court and nature of suit.
  • Bankruptcy and credit risk — filter recordType: "dockets" on a bankruptcy court (cacb, nysb, deb) and read chapter, dateFiled and dateTerminated straight off the row.
  • Legal research pipelines — pull opinions by query and court, sort by citeCount to find the load-bearing precedents, and follow downloadUrl for the full text.
  • Docket analytics — nature-of-suit and cause-of-action distributions by court and year, from suitNature, cause and jurisdictionType (all three are docket-only fields — they are null on opinion rows, so run with recordType: "dockets"). For splits that should span both record types — federal vs. state vs. bankruptcy caseload, or appellate-vs-trial mix — group on courtJurisdiction instead: it is populated on opinion and docket rows alike.

Honest limitations

  • RECAP is a mirror of PACER, not PACER. It holds what its contributors have purchased and donated, so coverage is deep in heavily-litigated districts and thin elsewhere. It is free; PACER is not.
  • documents[].isAvailable is often false. CourtListener frequently has a docket entry without the PDF behind it — 30 of 72 filing entries were available in a live N.D. Cal. sample (2026-09-17). Check the flag rather than assuming every row comes with a downloadable document.
  • documents[].textSnippet is an excerpt, not the whole filing. CourtListener's search index returns roughly the first 500 characters of a document's OCR'd text, and only for documents where isAvailable is true. The complete plain text sits behind the token-gated /api/rest/v4/recap-documents/ endpoint (anonymous requests get 401); this Actor needs no key, so it gives you the excerpt plus pdfUrl — the PDF bucket at storage.courtlistener.com is public and needs no token either, so you can fetch and parse the full document yourself.
  • Several opinion fields are sparse, and how sparse depends on the court. CourtListener's search index returns these fields for every opinion row, but the value is empty unless the publishing court supplied it. Measured over 240 live opinion rows across 12 court/date slices (2026-09-19): neutralCite 25%, judge 16%, syllabus 12%, panelNames 4%, lexisCite 2%, proceduralHistory <1%. The distribution is strongly court-dependent rather than random — Ohio and Illinois appellate rows carried syllabus/neutralCite on 20/20, while ca9, ca2, ny and scotus carried none. If your pipeline needs one of these, filter courts to a court that publishes it and check a small run first. Nothing is dropped or charged differently because a field is empty — you always pay $0.002 per row returned.
  • posture was removed from the schema (2026-09-19), not just left sparse. It measured 0% across 320 opinion rows spanning 13 court/date slices — including pre-1970 SCOTUS opinions and a recent-SCOTUS control — so age and court choice don't explain it. CourtListener does carry procedural posture on its authenticated /clusters/ detail endpoint, but that endpoint 401s without a CourtListener API key, and this Actor is deliberately anonymous/keyless (see above) — so the field was permanently empty for every buyer, not just sparse. Dropped rather than kept as a column that can never have a value.
  • cause and juryDemand are sparse fleet-wide, regardless of court — chapter is not. Measured over 240 live docket rows across 12 courts (2026-09-22, mixing 6 district and 6 bankruptcy courts, 20 rows each, no query filter): chapter 38% overall, but that number is really two extremes hiding inside one average — 0% on every district-court row sampled (nysd, cand, ilnd, txnd, flsd, nyed, mad) and 75–100% on every bankruptcy-court row sampled (cacb, nysb, deb, ilnb, txsb) — it is populated exactly where it can be (bankruptcy filings carry a chapter; civil filings don't) and nowhere else. cause and juryDemand did not follow that pattern: 1% each, non-zero only on two of the twelve courts (nysd, cand) and absent even from other district courts in the same sample (ilnd, txnd, flsd, nyed, mad) — RECAP's civil-cover-sheet extraction that would populate these two apparently doesn't run consistently across districts. If your use case is bankruptcy analytics, filter courts to bankruptcy court IDs and expect chapter reliably; don't build on cause/juryDemand being present anywhere.
  • jurisdictionType is now docket-only (changed 2026-09-19). On docket rows it is PACER's readable text for the basis of the court's jurisdiction over the case — "Diversity", "Federal Question". It previously also carried a value on opinion rows, but that value was a different quantity under the same name: CourtListener's court_jurisdiction, which classifies the court ("F" = Federal Appellate, "FD" = Federal District, "S" = State Supreme). Mixing the two in one column meant a recordType: "both" run produced a field you could not group on. It was also near-empty — 20/140 opinion rows across 8 court slices, and 21/240 across 12 slices, essentially SCOTUS-only. Opinion rows now return jurisdictionType: null, the same as the other docket-only columns (cause, juryDemand, chapter). Run with recordType: "dockets" for case-jurisdiction analytics — and use the new courtJurisdiction field (below) for the court-classification quantity, which is now available on every row rather than SCOTUS-only.
  • jurisdictionType casing is normalized (changed 2026-09-19). PACER's own data is inconsistent across courts — the same category comes back as "Federal Question" from one court and "Federal question" from another (measured live: 429 rows across 20 districts turned up both, plus "U.S. Government Defendant" vs "Government plaintiff"). This Actor now title-cases every value so grouping by jurisdictionType doesn't silently split into duplicate buckets for the same category. It does not merge genuinely different upstream phrasings — "Diversity" and "Diversity of citizenship" stay separate, since collapsing those would be a guess about PACER's own categorization, not a casing fix.
  • courtJurisdiction covers 3,358 courts — both in-use and not-in-use (expanded 2026-09-28) — and is null only for the small remainder. The label comes from a static map harvested from CourtListener's own /courts/ API (472 in_use=true courts, 2026-09-19, plus 2,887 in_use=false courts, 2026-09-28 — historical courts like ptab, bpai and ag that are no longer accepting new filings but still hold real, searchable opinions/dockets), with the 23 code->label pairs taken from that endpoint's OPTIONS schema — so all of it is CourtListener's values, not our guesses. It measured 100% fill on a live recordType: "both" run against in-use courts, and non-null on a not-in-use control (ag) verified live post-expansion. Only a court genuinely absent from CourtListener's own /courts/ listing, or one of the rare courts CourtListener itself ships with no jurisdiction on file, returns null. The map is a snapshot: a court added upstream after these dates reads null until the map is refreshed.
  • Dockets and opinions are separate indexes. A case present in one is often absent from the other; use both when unsure.
  • The query is a full-text search, not a case-number lookup. For a docket number, put it in query as-is and widen the court filter.

Pricing

$0.002 per result, no run-start fee. 1,000 records costs $2.00.

For comparison, re-verified 2026-10-03 against live in-effect pricing — searching the Store for "court records", "courtlistener", "pacer", "docket" and "case law" rather than one or three terms, since a narrower search term is exactly how a rival gets missed: nexgendata/court-records-search (61 users) still charges a flat $0.10 per result plus a $0.00005 start fee, unchanged since 2026-07-17 — 50× this Actor. automation-lab/court-records-scraper (71 users) still charges a $0.005 run-start fee plus $0.0023/record on the Free plan, tapering to $0.00056 on Diamond; cheaper per record at very high volume on a paid Apify plan, more expensive for the small and mid-size runs most buyers actually make, and it bills you before it returns a single row. fortuitous_pirate/courtlistener-legal-data (21 users, not previously named) covers the same nationwide CourtListener dockets+opinions+RECAP+oral-arguments scope at a flat $0.02 start + $0.004/record — 2× this Actor's per-record rate before the start fee is even added; its own pricingInfos already schedules the start fee down to $0.005 on 2026-10-13, which narrows but doesn't close the gap (still 2× per record).

Five listings are narrower in scope than a nationwide dockets+opinions search (re-verified live 2026-10-04): parseforge/harris-county-court-records-scraper (29 users) is Harris County, TX only, at $0.01199–0.01599/record plus a tiered $0.02 FREE→$0.015 GOLD+ start fee — 6–8× this Actor's rate for one county (its 2026-10-04 restructure has now landed: the flat $0.005 start fee was replaced by that tiered Actor Start event, the per-record rate is unchanged, and a new optional case-details event bills $0.005 FREE→$0.00375 GOLD+ once per record, only when an opt-in party-lookup enrichment actually returns data). fortuitous_pirate/florida-court-records-scraper is Florida only, at $0.05 start + $0.0035/record. andrew_avina/pacer-intelligence-mcp is a PACER-only MCP server at a flat $0.003/record, no start fee — closer to our rate but MCP-only, no plain Actor run, and it has no opinions coverage at all. pink_comic/bankruptcy-filing-search (23 users) ties this Actor's $0.002/record exactly but only ever returns RECAP dockets in open bankruptcy chapters — no opinions, no civil/criminal dockets. parseforge/business-bankruptcy-filings-scraper (not previously named, same vendor pattern as parseforge/harris-county above) covers the identical bankruptcy-only RECAP slice at $0.005 start + a tiered $0.01599 FREE→$0.01199 GOLD+ per record — 6–8× this Actor's rate for a narrower dataset than pink_comic already undercuts at parity. Two more Harris County-only listings surfaced in this sweep (not previously named): maximedupre/harris-county-court-records-scraper tiers a flat-looking but much lower $0.0001/record (Free) down to $0.00002/record (Diamond) with no start fee — tier-matched against parseforge/harris-county's own $0.01599 (Free) / $0.01199 (Gold+), that is roughly 160× cheaper at Free and 600× cheaper at Diamond for the identical single-county scope, though still Harris-County-only, not a substitute for this Actor's nationwide coverage. muhammadafzal/harris-county-court-records tiers $0.003001/record (Free) down to $0.0024/record (Gold+) plus a one-time Actor Start fee ($0.006251 Free → $0.005 Gold+) — pricier than this Actor at every tier, also Harris-County-only.

A wider sweep (court records + courtlistener + pacer + docket + case law, re-verified 2026-10-03) also turned up listings over the same nationwide CourtListener dockets+opinions scope this Actor covers, none previously named: seibs.co/court-records-intel charges a flat $0.005/record, 2.5× this Actor's rate, so not an undercutter. martc03/court-records-mcp (33 users — more users than every rival in this section except the two biggest) is on Apify's FREE pricing model: $0, the cheapest any rival can be. It is MCP-only — a tool-call interface for AI assistants, not a plain Actor run, with no CSV/Excel export, no startUrl paste-in, no watchLabel incremental mode and no bulk maxResults export of the kind a legal-ops pipeline needs — so free is the headline, not a direct substitute for a dataset export. Disclosed here rather than omitted because it is the single biggest unnamed listing in the niche by user count. maydit/us-court-cases-scraper, billed as a "PACER Alternative API", tiers $0.003/record on Free down to $0.0018/record on Gold+ plus a flat $0.00005 start fee — pricier than this Actor at every tier. alwaysprimedev/courtlistener-scraper charges a flat $0.0025/record plus a $0.00005 start fee — also pricier than us at every tier, no undercut. Two single-index sibling listings mirror ones already named above: nexgendata/courtlistener-federal-docket-scraper is the RECAP-dockets-only counterpart to the already-named nexgendata/court-records-search, same $0.00005 start fee and the identical flat $0.10/record rate; pink_comic/courtlistener-legal-opinions is the opinions-only counterpart to the already-named pink_comic/recap-federal-court-dockets, same $0.0001 start fee and the identical flat $0.002/record rate that ties us. lulzasaur/court-records-scraper (not previously named) covers the same nationwide dockets+opinions scope at a flat $0.01/record plus a $0.00005 start fee — 5× this Actor's rate, no undercut.

Two listings the broader search turned up are a genuine undercut. themineworks/courtlistener-court-records scrapes the exact same CourtListener dockets-and-opinions scope this Actor does — its own title says "Opinions & Dockets" — at $0.005 start plus a tiered $0.001/record on Free down to $0.0006/record on Diamond. On a 100-row run that's $0.105 against this Actor's $0.20 — roughly half, at every tier, despite the start fee. Its own listing title advertises 16 output fields against this Actor's 41. scrapesage/court-records-scraper (not previously named) splits dockets and opinions into separate tiered charge events with no start fee — opinions taper $0.004 (Free) → $0.001 (Diamond), dockets taper $0.006 (Free) → $0.0015 (Diamond) — crossing under our flat $0.002 on opinions from Platinum up ($0.00152, $0.001) and on dockets only on Diamond ($0.0015); every tier below that is pricier than us on both record types. It also prices three record types this Actor does not offer at all — judge/judicial-profile, oral-argument and financial-disclosure records — each its own tiered event $0.00125–$0.005. Two more sit close to parity rather than beating us outright: pink_comic/recap-federal-court-dockets ties this Actor's $0.002/record exactly but is RECAP dockets only (no opinions) and adds a $0.0001 start fee; haketa/federal-court-records-scraper undercuts from Gold up, not just Diamond as previously stated here — its per-record rate is flat $0.0018 across Gold/Platinum/Diamond (plus a $0.00005 start fee), all three below our $0.002, and it is pricier than us only on Free/Bronze/Silver ($0.003/$0.0026/$0.0022). (Competitor pricing re-verified live 2026-10-06.)

A full-cohort sweep on 2026-10-05 live-priced every niche listing this README did not already name — all sixteen, down to the one- and two-user floor, because Apify pins a brand-new listing at two users, so a "3+ users" cut selects for listing age rather than competitive threat. It turned up one new undercutter over this Actor's exact scope, one over a different data source, and one more exact price tie.

glitchbound/courts-scraper is the closest direct rival found to date: the same CourtListener v4 search this Actor uses, with four indexes against this Actor's two — opinions (o) and RECAP dockets (r) as here, plus judges (p) and oral-argument recordings (oa), which this Actor does not offer at all. It charges a $0.001 start fee plus a tiered $0.003 FREE → $0.0024 BRONZE → $0.0019 SILVER → $0.0015 GOLD → $0.0012 PLATINUM → $0.001 DIAMOND per record. On a 100-row run that is $0.301 at Free and $0.241 at Bronze against this Actor's flat $0.20 — dearer on the plans most buyers are actually on — but $0.191 at Silver, $0.151 at Gold and $0.101 at Diamond, so it crosses under us from Silver up and is roughly half our price at Diamond. Like themineworks it needs a paid Apify plan to beat us; unlike themineworks it also beats us on index breadth. (Verified live 2026-10-05.)

ahmed_jasarevic/court-scraper undercuts this Actor at every tier — a $0.00005 start fee plus a nearly flat $0.0015 (Free) → $0.00147 (Gold+) per record, 25% below our $0.002 even with no paid plan — but it is not the same product. Its input schema (sources, customSoda, sodaAppToken) and its own FAQ put it on Socrata open-data portals, not CourtListener: no case-law/opinions index at all, no CourtListener court-id filter, no boolean query syntax, and its README documents 13 output fields against this Actor's 41. It is aimed at tenant screening and skip tracing from county eviction portals. Cheaper per row, different dataset.

bedazzled_omen/court-records-scraper is another exact price tie: the same CourtListener federal-plus-state scope at a flat $0.002/record, matching us to the cent, with a $0.00005 start fee on top that makes it fractionally dearer on any run.

The other thirteen are dearer, narrower, or billed in a shape that is not per record, and none is a substitute. captainhandsome/courtlistener-case-search covers the identical opinions-plus-RECAP scope and advertises 55 columns — more than this Actor's 41 — but prices a tiered $0.003 (Free) → $0.0021 (Gold+) per record plus a $0.0005 → $0.00035 start fee, dearer than us at every tier. hichemdev/courtlistener-scraper is a flat $0.004/record plus a $0.001 start fee, 2× our rate. scrapemint/court-records-scraper is a flat $0.005/row, 2.5×. logical_vivacity/us-court-records-scraper takes a different route entirely — direct scraping of 200+ court websites for opinions and oral arguments rather than CourtListener — at a flat $0.02/record, 10×. parseforge/global-court-records-aggregator-scraper spans five national and international court systems at $0.019–$0.021/record, also ~10×. Three are county- or state-portal-only: jungle_synthesizer/oscn-arcourtconnect-la1jdc-court-records-scraper covers Oklahoma OSCN, Arkansas CourtConnect and Louisiana's 1st JDC at a per-row $0.002 that ties us, but adds a $0.10 Actor Start fee — that fee alone costs more than 50 of our rows; jungle_synthesizer/harris-county-court-records-scraper is Harris County probate and civil only, same $0.10 start fee plus $0.002 (Free) → $0.0012 (Diamond); parseforge/metro-eviction-dockets-scraper is Harris County justice-court evictions only, at a $0.02 → $0.0178 start fee, a $0.01 per-request charge and $0.005–$0.007 per case row. Three are MCP servers for AI agents rather than Actors you can run and export from: seibs.co/mcp-court-records-intel is the MCP sibling of the already-named seibs.co/court-records-intel, billing $0.005 per tool call rather than per record; reverberant_equality/mcp-nj-court-search is New Jersey criminal cases only at $0.005/tool call; themineworks/company-diligence-mcp is a 13-tool company-diligence server whose get_court_records tool costs $0.0035 a call, one input among SEC, LEI, VAT and federal-award lookups rather than a court-records export. The last two are the non-US pair ruled out in earlier sweeps and re-confirmed by their live Store titles here: scrapers_lat/datajud-scraper (Brazil CNJ) and scrapers_lat/colombia-rama-judicial-scraper (Colombia). (All sixteen priced live 2026-10-05.)

Exact user counts below 20 were dropped from the rival mentions above (2026-10-07) — every price, scope and feature claim they were attached to is unchanged, since a count that small drifts within days and the comparison never depended on the number itself. Counts at 20 or above, which move more slowly, are left in place.

A much wider sweep on 2026-10-08, and what it changes

Every sweep of this niche up to and including the one above searched the Store for the phrase "court records" (plus three or four nearby terms). That was the wrong vocabulary, and it cost us visibility on most of the niche. This niche does not call itself "court records" — it calls itself CourtListener. Re-swept on 2026-10-08 with twenty terms (adding recap archive, court docket, case law, court opinions, docket scraper, judicial records, bankruptcy filings, court filings, litigation data, lawsuit data, federal/state court records, case search, legal records, pacer docket and matching on those words rather than only on "court records"), the niche is 144 listings, not 30 — and 107 of them had never been named on this page. All 107 were priced live, down to the one-user floor, because Apify pins a new listing at two users so any "3+ users" cut selects for listing age rather than for competitive threat.

Eleven are genuine undercutters over scope this Actor really competes for, and they are listed here in full because the sweep that was supposed to find them had been searching for the wrong words:

  • dami_studio/courtlistener-cases-scraper is the cheapest of them and the biggest gap on this page: a flat $0.0005/case (tapering trivially to $0.000485 on Gold+) plus a $0.0005 start fee — one quarter of our rate at every tier, on a Free plan, with no paid Apify plan needed. Its own copy states the limit honestly: it returns the federal case index, one row per case (caption, court, docket number, nature of suit, judge, parties, counsel, docket link) and not the filings — so it has no per-filing entries, no OCR'd filing text, no PDF links and no opinions index at all.
  • ninhothedev/courtlistener-scraper is a flat $0.0005/row plus a $0.00005 start fee, also a quarter of our rate at every tier, over opinions and dockets by keyword (case name, court, date, citations).
  • grokbob/courtlistener-search-batch-ppe is a flat $0.00075/opinion row plus a $0.00005 start fee, and bills $0 for an empty or blocked query — but it is opinions-only (type=o), with no RECAP docket index.
  • maximedupre/courtlistener is a flat $0.0009/record, no start fee, over opinions, RECAP dockets and oral arguments in one full-text query — less than half our rate at every tier, over a scope one index wider than ours.
  • brick_joey_yto/federal-court-monitor is a flat $0.001/row, no start fee — half our rate at every tier — over the CourtListener/RECAP new-filings feed, case search, full docket history and opinions.
  • getascraper/courtlistener-rag-extractor tiers $0.00089 (Free) → $0.00067 (Gold+) per row with a $0.00005 start fee, under us at every tier, but read the unit before comparing: it emits fixed-token chunks, so one opinion becomes many billed rows (its own listing quotes "$0.03 per opinion", i.e. ~34 chunk rows each). Per opinion it is 15× our rate; per row it is cheaper. It also covers only SCOTUS and federal appeals, not district or bankruptcy courts.
  • parseforge/caselaw-access-scraper is on Apify's FREE pricing model — $0, the cheapest any rival can be — over US court opinions from the Caselaw Access Project rather than CourtListener, searched by reporter slug and term, returning full opinion text. A different (and historically deeper, but not current-to-today) corpus, and no docket side at all.
  • scrapesage/courtlistener-scraper ties our $0.002 exactly on Free and then tapers $0.0017 → $0.0014 → $0.0011 → $0.00076 → $0.0005, no start fee, crossing under us on five of six plan tiers and reaching a quarter of our rate at Diamond. US case law and opinions only — no RECAP dockets.
  • hipersoft/courtlistener-scraper tiers $0.003 (Free) → $0.0024 (Bronze) → $0.00195 (Silver) → $0.0015 (Gold+) plus a $0.00005 start fee, so it is dearer than us on Free and Bronze and undercuts us from Silver up, over opinions, dockets and oral arguments.
  • logiover/courtlistener-scraper tiers $0.003 (Free) → $0.0025 → $0.002 (Silver, a tie) → $0.0015 (Gold+), $0.00005 start fee — undercutting us from Gold up.
  • parseforge/courtlistener-docket-scraper tiers $0.004 (Free) → $0.0036 → $0.00248 → $0.00168 (Gold+) plus a $0.0002 start fee — dearer on Free through Silver, under us from Gold up — and queries all six CourtListener indexes (8.3M opinions, 8.8M PACER dockets, 60M RECAP filings, 15k judges, 102k oral arguments), three more than this Actor offers.

Of the remaining 96, the great majority are dearer than us at every tier over comparable CourtListener scope — among them parseforge's ~18 single-purpose CourtListener listings (adversary, bankruptcy, party, civil-cases, creditor-committee, judge-analytics, attorney-profiles, citation, oral-arguments, RSS, RECAP-documents and more) at $0.004–$0.055/record, nexgendata's five at a flat $0.05–$0.10/record (25–50×), crawlerbros, bovi, autofacts, scrapers_lat, xtracto, technicaldost, devilscrapes, chrisp1211, ponderable_hydrometer, moving_beacon-owner1, taroyamada, zentrafoundry, skootle, fortuitous_pirate, m_ctim, oblanceolate_mandola, parselab, muhammadafzal/courtlistener-rss-scraper and dami_studio/courtlistener-cases-scraper's pricier siblings. Two sit at or near parity rather than beating us: dataio/pacer-recap-court-dockets tapers $0.003 (Free) → $0.002 (Gold+), only tying us at the top, and datapilot/public-court-filings-dockets-monitor matches our $0.002 flat and then adds a $0.00005 start fee. parseforge/courtlistener-recap-documents-scraper ($0.0025 → $0.00226) and alwaysprimedev-style flat $0.0025 listings stay above us throughout. (All verified 2026-10-08.)

The rest are out of scope on their live descriptions, not on their titles — a title is a vendor's marketing angle, so each was read before being ruled out. They split into: non-US case law and court systems (jungle_synthesizer's Brazil JusBrasil / Dutch Rechtspraak / Indian Kanoon / UK BAILII / EU CURIA / EUR-Lex set, brasildados' and parseforge's and recordsdata' Brazil CNPJ/CNJ/DataJud lawsuit products, codingfrontend's two India eCourts scrapers, nomad-agent and wildorigins and hllerdgn80 and parseforge/uk-courts-tribunals-scraper for the UK, klyve1 and dltik for France, precious_bathmat and getascraper/cendoj-case-law-scraper for Spain, nocodeventure for the Netherlands, apnoda/portal-just for Romania, parseforge/iachr-corte-idh-cases-scraper for the Inter-American court, parseforge/unified-patent-court-scraper for the EU UPC); US products over a different dataset entirely (burbn/automated-case-information is EOIR immigration case-status lookup, lexis-solutions/doxpop-com-scraper is Indiana county courts at $0.0099, lexis-solutions/ballotpedia-org-scraper is a political encyclopedia, scrapersdelight/bid4assets-tax-sale-scraper and dami_studio/leilao-imovel-scraper are auction listings, crawlerbros/top-class-actions-scraper is a class-action news site, jungle_synthesizer/classaction-org-data-breach-lawsuit-settlement-scraper is settlement notices, nice_dev/maharera-projects-scraper is Indian real-estate regulation, spider_studio's two Tianyancha listings are Chinese company risk data, jtpalms/company-news-triggers and shelvick/enforcement-record-profiler and nexgendata/us-government-records-api are multi-source business-intelligence bundles, skilled_glee/legal-opinion-citation-extractor extracts citations from text you supply rather than searching a court index); and the non-CourtListener US case-law sources, which are partial substitutes for the opinions half of our scope and all dearer than us — johnvc/google-scholar-case-law ($0.005 + $0.00005 start), parseforge/justia-case-law-scraper ($0.03199 → $0.02399 + $0.005 start), moving_beacon-owner1/findlaw-case-law-scraper ($0.00999), crawlerbros/case-law-scraper ($0.005 → $0.003 + $0.005 start), parseforge/supreme-court-opinions-scraper ($0.021 → $0.019). One of that group is a mixed shape worth stating precisely: jungle_synthesizer/google-scholar-case-law-scraper tapers $0.002 (Free, a tie) → $0.0012 (Diamond) per row but adds a $0.10 Actor Start fee, so it only becomes cheaper than this Actor past roughly 125 rows a run at Diamond, and never on Free. (All 107 priced live and verified 2026-10-08 against each listing's in-effect pricingInfos, with scheduled future price changes checked as well; none of the 107 has one pending.)

A same-day re-sweep later on 2026-10-08 closed four listings the sweep above named nowhere. Re-running the same twenty terms hours later returns 146 matched listings, not 144. Of those, 71 carry no full owner/slug handle on this page; 67 are already accounted for by owner in the two paragraphs above, and all 67 were re-priced live here — every one still dearer than this Actor at every tier over comparable CourtListener scope, or out of scope on jurisdiction. Four were named nowhere at all, and three of them are squarely in scope: CourtListener/RECAP federal watch-mode products, the closest rivals on this page to this Actor's own watchChanges/watchLabel incremental mode. All three predate the sweep above (created 2026-08-16 through 2026-09-28), so they were missed rather than new:

  • alaudinburki/litigation-monitor matches new federal filings against a company watchlist from CourtListener/RECAP, and is the closest of the three on price: a $0.0001 start fee plus a flat $0.003 per row, 1.5× our rate at every tier with no paid-plan taper. Its own copy is candid about a limit worth knowing — party role is reported as first/second-named party rather than a guessed plaintiff/defendant label.
  • flamboyant_liner/court-case-monitor returns only new federal cases, docket filings and opinions since the last run, on a daily schedule, at a $0.005 start fee plus a flat $0.02 per row — 10× our rate, which its own listing states plainly as "$20 per 1,000 alerts".
  • hereditary_model/federal-litigation-tracker finds new federal lawsuits matching a company, person or keyword from the RECAP archive, scored by recency, and is the one multi-event shape of the three: a one-time $0.01 run-start, $0.02 per case returned, and a further $0.05 per term digest. A single headline number understates it, and at 10× our per-row rate before the digest event is counted it does not undercut us at any tier.

The fourth, cloudastra-technologies/india-court-case-search, is out of scope on jurisdiction (Indian courts searched by party name, returning CNR and case number) — but it is the one listing in this niche currently carrying a scheduled price change: $0.0045 per case result today, flipping to Apify's FREE model on 2026-10-22. It was created 2026-10-07 and repriced 2026-10-08, after the 107-listing cohort above was taken, so that paragraph's "none of the 107 has one pending" remains accurate for the cohort it describes. Seven of the 71 do undercut our per-record rate, and all seven are non-US case-law products already ruled out by jurisdiction above — jungle_synthesizer's EU CURIA and Dutch Rechtspraak scrapers, wildorigins, nomad-agent and hllerdgn80 over UK Find Case Law, precious_bathmat over Spain's CENDOJ, and spider_studio's Tianyancha Chinese company-risk feed. None is a substitute for a nationwide US dockets-plus-opinions search. This Actor's own price was re-verified live before any comparison: flat $0.002 per result, a single result charge event, no run-start fee, unchanged since 2026-09-17. (All 71 re-priced live 2026-10-08 against each listing's in-effect pricingInfos, scheduled future entries included.)

Regular resweep, verified 2026-10-09 (check-own-price-freshness 24/0, no drift; niche-size 141 matched, 144 at the 2026-10-08 sweep, churn not a drop): all 65 listings this run's niche-unnamed returned were already covered by owner above, except nexgendata's count, which had grown since this page last tallied it. Five more nexgendata CourtListener/RECAP single-index listings, live-priced for the first time: nexgendata/courtlistener-court-opinions ($0.05/record), nexgendata/courtlistener-federal-judges ($0.05 + a $0.01 start fee), nexgendata/courtlistener-oral-arguments ($0.05 + a $0.00005 start fee), nexgendata/recap-pacer-docket-search ($0.10/record) and nexgendata/federal-litigation-intelligence ($0.05/record) — all flat, all dearer than us at every tier, same shape as the other nexgendata listings named above. A sixth, nexgendata/legal-mcp-server, is an MCP server (case law, dockets, FINRA BrokerCheck and trademark lookups as agent tools) at $0.02 per tool call plus a $0.00005 start fee — the same not-a-plain-Actor-run shape as the MCP listings above, not a per-record substitute. Also checked brasildados/brazil-companies-certificates-api (10 users): out of scope — it issues official Brazilian compliance certificates (PGFN, FGTS, CNDT, CNJ and others) at $0.80 per certificate, a different product on a different unit entirely, not a court-records search.

What we do not claim: this is not the cheapest nationwide CourtListener-based Actor in the Store, and the 2026-10-08 sweep above widened that gap considerably rather than closing it. At least fifteen listings beat our per-record rate somewhere in the plan range. The ones that beat us at every tier, with no paid Apify plan required, are dami_studio/courtlistener-cases-scraper and ninhothedev/courtlistener-scraper (both a quarter of our rate), grokbob/courtlistener-search-batch-ppe, maximedupre/courtlistener, brick_joey_yto/federal-court-monitor, getascraper/courtlistener-rag-extractor (per row, not per opinion) and themineworks/courtlistener-court-records, plus parseforge/caselaw-access-scraper at $0 on a different corpus. Others cross under us only on paid plans: scrapesage/courtlistener-scraper from Bronze up, hipersoft/courtlistener-scraper from Silver up, glitchbound/courts-scraper from Silver up (and it covers two indexes we do not — judges and oral arguments), logiover/courtlistener-scraper and parseforge/courtlistener-docket-scraper from Gold up, and scrapesage/court-records-scraper on opinions from Platinum up and on dockets at Diamond. On a different dataset — Socrata county portals rather than CourtListener — ahmed_jasarevic/court-scraper is 25% cheaper per row at every tier. What this Actor has that theirs doesn't, per the sections above: both record types in one schema sharing a courtJurisdiction label across 3,358 courts, real boolean-operator and quoted-phrase search, a startUrl paste-in from CourtListener's own search page, watchChanges for docket-termination detection, and roughly 2.5× the output fields (41 vs. their own claimed 16) — and, for the single-index listings above, a dockets and opinions search in one run and one schema. If price per row is what matters most for your use case, do not start here. Start with dami_studio/courtlistener-cases-scraper if the case index without filings is enough, ninhothedev/courtlistener-scraper or maximedupre/courtlistener for opinions-plus-dockets at a quarter to half our rate, parseforge/caselaw-access-scraper if free historical opinions suffice, and scrapesage/courtlistener-scraper or parseforge/courtlistener-docket-scraper if you are on a paid Apify plan. Rival pricing verified live 2026-10-08.

Data source, legality and privacy

Data comes from CourtListener / the Free Law Project, a non-profit that publishes US court records as open data, via its documented public REST API. No login is used, no paywall is bypassed, and no page is scraped behind authentication.

Every name in the output — parties, attorneys, law firms, judges — appears on a public court record and is a professional or institutional participant in a public proceeding. The API returns no email addresses and no phone numbers, and this Actor adds none.

Source code

https://github.com/Fetchsmith/fetchsmith/tree/main/actors/court-records-scraper