CourtListener Opinion Scraper - US Court Case Law API avatar

CourtListener Opinion Scraper - US Court Case Law API

Pricing

Pay per event

Go to Apify Store
CourtListener Opinion Scraper - US Court Case Law API

CourtListener Opinion Scraper - US Court Case Law API

Crawl US court opinions from CourtListener (Free Law Project). 8M+ decisions from 3,350+ federal, state, and appellate courts. Filter by court, judge, date range, citation, or keyword. Returns case metadata, citations, precedential status, and opinion excerpts.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

CourtListener Opinion Scraper — US Court Case Law & Opinions

Extract structured US court opinion records from CourtListener, the free case-law database maintained by the non-profit Free Law Project. The scraper reads the public v4 search API and covers 8 million+ opinions across 3,350+ federal, state, and territorial courts — SCOTUS, all 13 Circuit Courts of Appeals, every state supreme court and appellate court, plus historic and specialty courts.

CourtListener Scraper Features

  • Filter by free-text keyword, court, judge, citation, docket number, or date range — combine any of them
  • Sort by relevance, date filed (newest or oldest), or citation count (most-cited first)
  • Covers all 8,285,360+ opinions indexed by the Free Law Project, including SCOTUS, federal circuits, state courts, and bankruptcy/specialty courts
  • Returns 30+ fields per case including full metadata, parallel citations, panel judges, precedential status, and opinion text excerpts
  • Includes direct download links to the source PDF when CourtListener has one
  • Queries the official JSON API — no HTML parsing, no fragile selectors
  • Requires no authentication, no API key, and no proxy
  • Rate-limited to 150 requests per minute, well under the documented unauthenticated ceiling

Who Uses CourtListener Data and Why?

  • Law firms and litigators — build case-law research workflows, track citation networks, and surface precedent by judge or court
  • Legal AI and tech companies — train and evaluate legal language models on structured opinion data instead of scraping HTML yourself
  • Compliance and risk teams — monitor opinions in specific practice areas (qualified immunity, IP, labor, environmental, etc.) for emerging precedent
  • Legal researchers and academics — pull bulk samples of opinions for empirical legal studies, citation analysis, and doctrinal research
  • Journalists — track recent decisions in high-profile cases and surface new opinions by specific judges

How the Scraper Works

  1. You provide at least one filter: a search query, a court ID, a judge name, a citation, a docket number, or a date range. An empty query with one filter is fine.
  2. The scraper builds a query against the CourtListener v4 search API (/api/rest/v4/search/?type=o) and fetches the first page of 20 results.
  3. It follows the cursor-based next URL through subsequent pages until it reaches your maxItems limit or exhausts the result set.
  4. Each cluster (one case, possibly with multiple opinions) is flattened into one record and saved to the Apify dataset.

Input

Keyword search across all courts

{
"query": "qualified immunity",
"orderBy": "dateFiled desc",
"maxItems": 200
}

All SCOTUS opinions, newest first

{
"query": "*",
"court": "scotus",
"orderBy": "dateFiled desc",
"maxItems": 500
}

Federal Circuit patent cases in a specific year

{
"query": "patent",
"court": "cafc",
"filedAfter": "2023-01-01",
"filedBefore": "2023-12-31",
"maxItems": 100
}

Look up a specific case by citation

{
"citation": "\"410 U.S. 113\"",
"maxItems": 5
}

All opinions authored by a given judge

{
"judge": "Scalia",
"orderBy": "dateFiled desc",
"maxItems": 100
}

Input Parameters

FieldTypeDefaultDescription
querystring"qualified immunity"Free-text search over opinion content and metadata. Use quoted strings for exact phrases. Leave empty or set to "*" to browse by filters only.
courtstring""CourtListener court ID (e.g. scotus, ca9, cafc, cadc). Leave empty to search all 3,350+ courts. Full list at https://www.courtlistener.com/api/rest/v4/courts/.
judgestring""Judge name, partial match (e.g. "Scalia", "Ginsburg"). Matches authoring judge and panel members.
citationstring""Citation filter. Use quoted form for exact match (e.g. "410 U.S. 113" for Roe v. Wade).
docketNumberstring""Court docket number filter (e.g. 24-813).
filedAfterstring""Only include opinions filed on or after this date (ISO YYYY-MM-DD).
filedBeforestring""Only include opinions filed on or before this date (ISO YYYY-MM-DD).
orderBystring"score desc"Sort order: score desc (relevance), dateFiled desc, dateFiled asc, or citeCount desc.
maxItemsinteger50Maximum records to return. Set to 0 for unlimited — requires at least one filter when doing so.
proxyConfigurationobjectdisabledProxy settings. Not required — CourtListener is a public API with no anti-bot measures.

Court ID Cheat Sheet

CourtID
Supreme Court of the United Statesscotus
Court of Appeals for the Federal Circuitcafc
Court of Appeals for the D.C. Circuitcadc
First through Eleventh Circuitsca1, ca2, …, ca11
California Supreme Courtcal
New York Court of Appealsny
Texas Supreme Courttex

Plus 3,350+ additional federal district, state trial, state appellate, bankruptcy, and historic courts. Query https://www.courtlistener.com/api/rest/v4/courts/ for the full list.

Output Fields

{
"case_name": "Roe v. Wade",
"case_name_full": "Jane Roe, et al., Appellants, v. Henry Wade",
"court": "Supreme Court of the United States",
"court_id": "scotus",
"court_citation_string": "SCOTUS",
"court_jurisdiction": "F",
"date_filed": "1973-01-22",
"date_argued": "1971-12-13",
"docket_number": "70-18",
"citation": "410 U.S. 113",
"all_citations": "410 U.S. 113 | 93 S. Ct. 705 | 35 L. Ed. 2d 147 | 1973 U.S. LEXIS 159",
"neutral_citation": "",
"lexis_citation": "1973 U.S. LEXIS 159",
"judges": "Blackmun",
"panel_names": "Blackmun, Brennan, Douglas, Marshall, Powell, Stewart",
"attorneys": "Sarah Weddington, Linda Coffee",
"precedential_status": "Published",
"source": "C",
"cite_count": 5842,
"opinion_count": 3,
"opinion_types": "lead, concurrence, dissent",
"lead_opinion_author_id": 1001,
"lead_opinion_snippet": "The Constitution does not explicitly mention any right of privacy...",
"lead_opinion_download_url": "https://example.com/roe.pdf",
"per_curiam": false,
"syllabus": "A pregnant single woman (Roe) brought a class action challenging the constitutionality of the Texas criminal abortion laws...",
"posture": "",
"procedural_history": "",
"suit_nature": "",
"cluster_id": 108495,
"docket_id": 65000,
"absolute_url": "https://www.courtlistener.com/opinion/108495/roe-v-wade/",
"scraped_at": "2026-04-18T01:29:00.000Z"
}
FieldTypeDescription
case_namestringShort case name (e.g. "Roe v. Wade")
case_name_fullstringFull formal case name when available
courtstringFull court name
court_idstringCourtListener court ID
court_citation_stringstringShort court abbreviation used in citations (e.g. "SCOTUS", "9th Cir.")
court_jurisdictionstringJurisdiction code: F (federal), S (state), FB (federal bankruptcy), etc.
date_filedstringDate the opinion was filed (YYYY-MM-DD)
date_arguedstringDate the case was argued, when recorded
docket_numberstringCourt docket number
citationstringPrimary citation (first entry in the citation list)
all_citationsstringAll parallel citations, joined with |
neutral_citationstringVendor-neutral citation when available
lexis_citationstringLexisNexis citation when available
judgesstringAuthoring or panel judges (comma-separated)
panel_namesstringFull judicial panel joined with ,
attorneysstringAttorneys of record (truncated to 1,000 characters)
precedential_statusstringStatus: Published, Unpublished, Errata, Separate
sourcestringProvenance code: C=court website, R=RECAP, LC=Library of Congress, CR=court+RECAP
cite_countnumberNumber of times this opinion has been cited by later cases
opinion_countnumberNumber of opinions in the cluster (lead + concurrences + dissents)
opinion_typesstringTypes of opinions in the cluster (e.g. "lead, concurrence, dissent")
lead_opinion_author_idnumberCourtListener person ID of lead opinion author
lead_opinion_snippetstringText excerpt (typically 300-500 chars) from the lead or primary opinion
lead_opinion_download_urlstringDirect download URL for the primary opinion PDF when available
per_curiambooleanTrue if the primary opinion is per curiam (unsigned)
syllabusstringOfficial court syllabus when available
posturestringProcedural posture of the case
procedural_historystringProcedural history summary
suit_naturestringNature of suit
cluster_idnumberCourtListener opinion cluster ID (use with /api/rest/v4/clusters/{id}/)
docket_idnumberCourtListener docket ID (use with /api/rest/v4/dockets/{id}/)
absolute_urlstringCanonical CourtListener URL for the case
scraped_atstringISO timestamp when the record was scraped

FAQ

How many opinions does CourtListener cover? Over 8.2 million opinions across 3,358 US courts. CourtListener is maintained by the non-profit Free Law Project and pulls from court websites, PACER filings, the Library of Congress, and partner feeds. New opinions from actively scraped courts (SCOTUS, federal circuits, state supreme courts) typically appear within 24 hours of filing.

Do I need proxies or an API key to run this? No. The CourtListener v4 search API is public and requires no authentication. The scraper ships with proxies disabled by default.

What is the difference between citation and docketNumber? A docket number is the court's internal case number (e.g. 24-813), assigned when the case is filed. A citation is the published reporter reference (e.g. 410 U.S. 113), assigned later when the opinion is reported. Both filters can be used together.

Why do I see multiple records with the same case name? Separate opinions in the same case (lead, concurrence, dissent) are consolidated into a single cluster record on output. But the same case may appear at different procedural stages (e.g. "Chiles v. Salazar" and "Chiles v. Salazar (revisions 3/31/26)") or under different docket numbers. These are distinct opinions and get distinct records.

How do I get the full opinion text? The lead_opinion_snippet field contains a 300-500 character excerpt from the primary opinion. For full opinion text, follow the lead_opinion_download_url (direct court PDF) or fetch /api/rest/v4/opinions/{id}/ using the cluster_id — that endpoint returns plain_text and html_with_citations but requires a free CourtListener API token.

Can I run a bulk export of every opinion from a specific court? Yes. Set court to the court ID (e.g. scotus), set query to "*", and raise maxItems to the volume you need. With unlimited maxItems (0), you must provide at least one filter.

What is a "cluster"? CourtListener groups all opinions from the same case (majority, concurrence, dissent, per curiam, etc.) into one cluster. Each cluster gets one record in the output, with the primary opinion's snippet and download URL, and a count of how many opinions the cluster contains.

Need More Features?

Need full opinion text, citation graph data (who cites whom), scheduled runs, or a different data source? Get in touch.

Why Use CourtListener Scraper?

  • Official API, not HTML scraping — reads the Free Law Project's v4 JSON endpoints directly, so field names match the source of truth, not a CSS selector
  • Production-grade, not a hobby wrapper — cursor-paginated, rate-limit aware, retries on transient failures, flattens complex cluster data into a clean tabular schema
  • 30+ fields per case including citations and panel data — enough to build citation networks, map judge activity, and track precedent without a second API call
  • No proxy cost, no API key overhead — CourtListener is public, US-hosted, and free; the per-record cost reflects actual compute, not unnecessary infrastructure