# US Court Records & Legal Opinions (`lulzasaur/court-records-scraper`) Actor

Search US court records and legal opinions via CourtListener. Find opinions by keyword, case name, judge, date range, or court. Search dockets by party or case number. Get full opinion text and citations.

- **URL**: https://apify.com/lulzasaur/court-records-scraper.md
- **Developed by:** [lulz bot](https://apify.com/lulzasaur) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## US Court Records & Legal Opinions Scraper

Search US court records, case law opinions, and docket filings via the CourtListener API. Access millions of legal documents from federal and state courts including the Supreme Court, Circuit Courts, and District Courts.

### Features

- **Search opinions** -- Find case law by keyword, judge, court, date range, and precedential status
- **Search dockets** -- Look up case filings by party name, case number, court, or date range
- **Get case details** -- Retrieve full opinion text, docket history, and associated documents for a specific case
- **Boolean search** -- Supports AND, OR, NOT operators, phrase search with quotes, and wildcards
- **Full opinion text** -- Optionally fetch the complete text of court opinions (requires free API token)
- **Cursor-based pagination** -- Efficiently retrieves large result sets

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | string | `"opinions"` | Search mode: `opinions`, `dockets`, or `details` |
| `searchQuery` | string | `""` | Keywords to search for (supports boolean operators) |
| `caseId` | string | `""` | Cluster or docket ID for `details` mode |
| `court` | string | `""` | Court abbreviation (e.g., `scotus`, `ca9`, `nyed`) |
| `judge` | string | `""` | Judge or panel member name |
| `caseName` | string | `""` | Filter by case name |
| `party` | string | `""` | Party name for docket search |
| `docketNumber` | string | `""` | Docket/case number (e.g., `23-1234`) |
| `dateFrom` | string | `""` | Start date filter (YYYY-MM-DD) |
| `dateTo` | string | `""` | End date filter (YYYY-MM-DD) |
| `status` | string | `""` | Precedential status: `precedential`, `non-precedential`, `errata`, etc. |
| `maxResults` | integer | `50` | Maximum number of results (1-500) |
| `includeFullText` | boolean | `false` | Fetch full opinion text for each result (slower) |
| `apiToken` | string | -- | CourtListener API token (free at courtlistener.com, 5000 req/hr) |

### Example Inputs

**Search Supreme Court first amendment cases:**
```json
{
  "mode": "opinions",
  "searchQuery": "first amendment free speech",
  "court": "scotus",
  "status": "precedential",
  "maxResults": 25
}
````

**Find dockets for a specific party:**

```json
{
  "mode": "dockets",
  "party": "Google",
  "court": "ca9",
  "dateFrom": "2023-01-01",
  "maxResults": 50
}
```

**Get full details for a specific case:**

```json
{
  "mode": "details",
  "caseId": "2812209",
  "apiToken": "YOUR_TOKEN_HERE"
}
```

### Output Fields

#### Opinion Search Results

| Field | Type | Description |
|-------|------|-------------|
| `clusterId` | number | CourtListener cluster ID (opinion group) |
| `docketId` | number | Associated docket ID |
| `caseName` | string | Short case name |
| `caseNameFull` | string | Full case name |
| `court` | string | Court name |
| `courtId` | string | Court abbreviation code |
| `dateFiled` | string | Date the opinion was filed |
| `docketNumber` | string | Docket number |
| `judge` | string | Author judge |
| `panelNames` | array | Panel members |
| `status` | string | Precedential status |
| `citations` | array | Legal citations |
| `citeCount` | number | Number of times this case is cited |
| `syllabus` | string | Case syllabus/summary |
| `snippet` | string | Relevant text snippet |
| `fullOpinionText` | string | Full opinion text (when `includeFullText` enabled) |
| `url` | string | CourtListener URL |

#### Docket Search Results

| Field | Type | Description |
|-------|------|-------------|
| `docketId` | number | Docket ID |
| `caseName` | string | Case name |
| `court` | string | Court name |
| `dateFiled` | string | Filing date |
| `dateTerminated` | string | Termination date (if resolved) |
| `docketNumber` | string | Docket number |
| `cause` | string | Cause of action |
| `suitNature` | string | Nature of suit |
| `assignedTo` | string | Assigned judge |
| `parties` | array | Party names |
| `attorneys` | string | Attorneys of record |
| `url` | string | CourtListener URL |

### Use Cases

- **Legal research** -- Find relevant case law and precedent on any topic
- **Litigation tracking** -- Monitor dockets for specific parties or case numbers
- **Compliance analysis** -- Research regulatory rulings and enforcement actions
- **Academic research** -- Analyze judicial opinions, citation patterns, and court statistics
- **Due diligence** -- Check litigation history for companies and individuals

### Data Source

Data is sourced from the [CourtListener](https://www.courtlistener.com/) API (by Free Law Project), which indexes millions of opinions and dockets from US federal and state courts.

***

### Run on Apify

This scraper runs on the [Apify platform](https://apify.com/?fpr=lulzasaur) -- a full-stack web scraping and automation cloud. Sign up for a free account to get started with 30-day trial of all features.

[Try Apify free ->](https://apify.com/?fpr=lulzasaur)

# Actor input Schema

## `mode` (type: `string`):

What to search for: opinions (case law), dockets (case filings), or details (full text for a specific case).

## `searchQuery` (type: `string`):

Keywords to search for (e.g. 'first amendment', 'patent infringement', 'Roe v Wade'). Supports boolean operators: AND, OR, NOT, phrases in quotes, wildcards with \*.

## `caseId` (type: `string`):

For 'details' mode: the CourtListener cluster ID or docket ID to retrieve. Find IDs from opinion/docket search results.

## `court` (type: `string`):

Filter by court abbreviation (e.g. 'scotus' for Supreme Court, 'ca1' for 1st Circuit, 'ca9' for 9th Circuit, 'nyed' for Eastern District of NY). Leave empty for all courts.

## `judge` (type: `string`):

Filter by judge or panel member name (e.g. 'Sotomayor', 'Roberts').

## `caseName` (type: `string`):

Filter by case name (e.g. 'Google', 'Apple v Samsung').

## `party` (type: `string`):

For docket search: filter by party name (plaintiff or defendant).

## `docketNumber` (type: `string`):

Filter by docket/case number (e.g. '23-1234', '2:24-cv-00123').

## `dateFrom` (type: `string`):

Start date for filing date range filter (YYYY-MM-DD format, e.g. '2020-01-01').

## `dateTo` (type: `string`):

End date for filing date range filter (YYYY-MM-DD format, e.g. '2024-12-31').

## `status` (type: `string`):

Filter opinions by precedential status.

## `maxResults` (type: `integer`):

Maximum number of results to return.

## `includeFullText` (type: `boolean`):

When enabled, fetches full opinion text for each result (slower but more complete). Always enabled for 'details' mode.

## `apiToken` (type: `string`):

CourtListener API token for authenticated access (5000 req/hr). Get one free at courtlistener.com/sign-in/. Without a token, requests may be rate-limited.

## `proxyConfiguration` (type: `object`):

Optional proxy to use for requests.

## Actor input object example

```json
{
  "mode": "opinions",
  "searchQuery": "",
  "caseId": "",
  "court": "",
  "judge": "",
  "caseName": "",
  "party": "",
  "docketNumber": "",
  "dateFrom": "",
  "dateTo": "",
  "status": "",
  "maxResults": 50,
  "includeFullText": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("lulzasaur/court-records-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("lulzasaur/court-records-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call lulzasaur/court-records-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=lulzasaur/court-records-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "US Court Records & Legal Opinions",
        "description": "Search US court records and legal opinions via CourtListener. Find opinions by keyword, case name, judge, date range, or court. Search dockets by party or case number. Get full opinion text and citations.",
        "version": "1.0",
        "x-build-id": "fggIxgGqQL6KKevsG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lulzasaur~court-records-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lulzasaur-court-records-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/lulzasaur~court-records-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lulzasaur-court-records-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/lulzasaur~court-records-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lulzasaur-court-records-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Search Mode",
                        "enum": [
                            "opinions",
                            "dockets",
                            "details"
                        ],
                        "type": "string",
                        "description": "What to search for: opinions (case law), dockets (case filings), or details (full text for a specific case).",
                        "default": "opinions"
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keywords to search for (e.g. 'first amendment', 'patent infringement', 'Roe v Wade'). Supports boolean operators: AND, OR, NOT, phrases in quotes, wildcards with *.",
                        "default": ""
                    },
                    "caseId": {
                        "title": "Case / Cluster ID",
                        "type": "string",
                        "description": "For 'details' mode: the CourtListener cluster ID or docket ID to retrieve. Find IDs from opinion/docket search results.",
                        "default": ""
                    },
                    "court": {
                        "title": "Court",
                        "type": "string",
                        "description": "Filter by court abbreviation (e.g. 'scotus' for Supreme Court, 'ca1' for 1st Circuit, 'ca9' for 9th Circuit, 'nyed' for Eastern District of NY). Leave empty for all courts.",
                        "default": ""
                    },
                    "judge": {
                        "title": "Judge Name",
                        "type": "string",
                        "description": "Filter by judge or panel member name (e.g. 'Sotomayor', 'Roberts').",
                        "default": ""
                    },
                    "caseName": {
                        "title": "Case Name",
                        "type": "string",
                        "description": "Filter by case name (e.g. 'Google', 'Apple v Samsung').",
                        "default": ""
                    },
                    "party": {
                        "title": "Party Name (Dockets)",
                        "type": "string",
                        "description": "For docket search: filter by party name (plaintiff or defendant).",
                        "default": ""
                    },
                    "docketNumber": {
                        "title": "Docket Number",
                        "type": "string",
                        "description": "Filter by docket/case number (e.g. '23-1234', '2:24-cv-00123').",
                        "default": ""
                    },
                    "dateFrom": {
                        "title": "Date From",
                        "type": "string",
                        "description": "Start date for filing date range filter (YYYY-MM-DD format, e.g. '2020-01-01').",
                        "default": ""
                    },
                    "dateTo": {
                        "title": "Date To",
                        "type": "string",
                        "description": "End date for filing date range filter (YYYY-MM-DD format, e.g. '2024-12-31').",
                        "default": ""
                    },
                    "status": {
                        "title": "Precedential Status",
                        "enum": [
                            "",
                            "precedential",
                            "non-precedential",
                            "errata",
                            "separate",
                            "in-chambers",
                            "relating-to"
                        ],
                        "type": "string",
                        "description": "Filter opinions by precedential status.",
                        "default": ""
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of results to return.",
                        "default": 50
                    },
                    "includeFullText": {
                        "title": "Include Full Opinion Text",
                        "type": "boolean",
                        "description": "When enabled, fetches full opinion text for each result (slower but more complete). Always enabled for 'details' mode.",
                        "default": false
                    },
                    "apiToken": {
                        "title": "CourtListener API Token",
                        "type": "string",
                        "description": "CourtListener API token for authenticated access (5000 req/hr). Get one free at courtlistener.com/sign-in/. Without a token, requests may be rate-limited."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional proxy to use for requests."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
