OrbTop

CourtListener Opinion Scraper - US Court Case Law API

BUSINESSOTHER

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

Field Type Default Description
query string "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.
court string "" 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/.
judge string "" Judge name, partial match (e.g. "Scalia", "Ginsburg"). Matches authoring judge and panel members.
citation string "" Citation filter. Use quoted form for exact match (e.g. "410 U.S. 113" for Roe v. Wade).
docketNumber string "" Court docket number filter (e.g. 24-813).
filedAfter string "" Only include opinions filed on or after this date (ISO YYYY-MM-DD).
filedBefore string "" Only include opinions filed on or before this date (ISO YYYY-MM-DD).
orderBy string "score desc" Sort order: score desc (relevance), dateFiled desc, dateFiled asc, or citeCount desc.
maxItems integer 50 Maximum records to return. Set to 0 for unlimited — requires at least one filter when doing so.
proxyConfiguration object disabled Proxy settings. Not required — CourtListener is a public API with no anti-bot measures.

Court ID Cheat Sheet

Court ID
Supreme Court of the United States scotus
Court of Appeals for the Federal Circuit cafc
Court of Appeals for the D.C. Circuit cadc
First through Eleventh Circuits ca1, ca2, …, ca11
California Supreme Court cal
New York Court of Appeals ny
Texas Supreme Court tex

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"
}
Field Type Description
case_name string Short case name (e.g. "Roe v. Wade")
case_name_full string Full formal case name when available
court string Full court name
court_id string CourtListener court ID
court_citation_string string Short court abbreviation used in citations (e.g. "SCOTUS", "9th Cir.")
court_jurisdiction string Jurisdiction code: F (federal), S (state), FB (federal bankruptcy), etc.
date_filed string Date the opinion was filed (YYYY-MM-DD)
date_argued string Date the case was argued, when recorded
docket_number string Court docket number
citation string Primary citation (first entry in the citation list)
all_citations string All parallel citations, joined with |
neutral_citation string Vendor-neutral citation when available
lexis_citation string LexisNexis citation when available
judges string Authoring or panel judges (comma-separated)
panel_names string Full judicial panel joined with ,
attorneys string Attorneys of record (truncated to 1,000 characters)
precedential_status string Status: Published, Unpublished, Errata, Separate
source string Provenance code: C=court website, R=RECAP, LC=Library of Congress, CR=court+RECAP
cite_count number Number of times this opinion has been cited by later cases
opinion_count number Number of opinions in the cluster (lead + concurrences + dissents)
opinion_types string Types of opinions in the cluster (e.g. "lead, concurrence, dissent")
lead_opinion_author_id number CourtListener person ID of lead opinion author
lead_opinion_snippet string Text excerpt (typically 300-500 chars) from the lead or primary opinion
lead_opinion_download_url string Direct download URL for the primary opinion PDF when available
per_curiam boolean True if the primary opinion is per curiam (unsigned)
syllabus string Official court syllabus when available
posture string Procedural posture of the case
procedural_history string Procedural history summary
suit_nature string Nature of suit
cluster_id number CourtListener opinion cluster ID (use with /api/rest/v4/clusters/{id}/)
docket_id number CourtListener docket ID (use with /api/rest/v4/dockets/{id}/)
absolute_url string Canonical CourtListener URL for the case
scraped_at string ISO 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