# CourtListener Adversary Proceedings Scraper - Bankruptcy (`parseforge/courtlistener-adversary-scraper`) Actor

Scrape bankruptcy adversary proceedings from CourtListener RECAP by nature of suit, court, party and date, with judges and counsel. Export to CSV, JSON, Excel or XML.

- **URL**: https://apify.com/parseforge/courtlistener-adversary-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Lead generation, Automation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.62 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## ⚔️ CourtListener Adversary Proceedings Scraper

> 🚀 **Export bankruptcy adversary proceedings from the CourtListener RECAP archive in seconds.** Pick the kind of action, a court and a date range, and get one 36-field row per proceeding with the plaintiff, the defendant, the judge, the trustee, counsel, law firms and the filings that matched. Recovery actions alone hold 18,902 proceedings.

An adversary proceeding is the lawsuit filed inside a bankruptcy case: a trustee clawing back a preference, a creditor arguing a debt should survive discharge, a fight over the priority of a lien. PACER files each one as its own docket, and this Actor pulls them out of CourtListener's RECAP archive by the Form B1040 nature of suit the complaint was filed under. No login and no API key required, and the results export to CSV, JSON, Excel, or XML.

Adversary proceedings sit in the same RECAP index as the millions of Chapter 7, 11 and 13 petitions they hang off, and nothing on the search page separates them. This Actor does it four ways at once: it searches the 21 Form B1040 codes server side, screens on the missing bankruptcy chapter, reads the separate adversary docket-number sequence (`26-01087`, or `2:26-ap-01234` in courts that prefix the division), and falls back to the `X v. Y` caption. All 94 United States bankruptcy courts are covered, and every code was queried one by one against the live API.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Bankruptcy litigators | New preference, fraudulent transfer and dischargeability suits by court and week |
| Trustees and their counsel | Clawback actions filed by other trustees, and who is defending them |
| Creditors and collections teams | 523 dischargeability complaints naming a debtor you are owed by |
| Litigation funders and insurers | Fraudulent transfer and lien priority fights, with the sides of the caption split out |
| Legal tech and AI teams | Structured adversary dockets with stable IDs, parties, counsel and firms |

### 📋 What the CourtListener Adversary Proceedings Scraper does

> 💡 **Why it matters:** PACER has no cross-district search for adversary proceedings, and CourtListener's public API returns them mixed into a bankruptcy feed that is overwhelmingly ordinary petitions. Measured on 2026-09-08, 1 of 10 fresh dockets in the Southern District of New York was an adversary proceeding. This Actor sends the nature-of-suit filter to the API so the separation happens server side, flattens each docket into one row, and never bills for a record it did not deliver.

Pick a type of action, or the exact B1040 codes, and the Actor queries CourtListener's search API live, following the cursor until it has the rows you asked for.

- ⚔️ **One row per adversary proceeding.** Case caption split into plaintiff and defendant, court and court ID, docket number and the bare adversary number, PACER case ID, date filed, date terminated and whether the proceeding is still pending, nature of suit as codes and as labels, the action type, the bankruptcy judge with their CourtListener ID, the trustee, every party with IDs, counsel of record, law firms, and the filings that matched your query.
- 🔣 **21 Form B1040 codes in 9 pickable groups.** Recovery of money or property (11, 12, 13, 14), lien validity (21), sale of estate property (31), objection to discharge (41, 51), dischargeability (61 to 68), injunctive relief (71, 72), subordination (81), declaratory judgment (91) and other (02). Every code was queried against the live API on 2026-09-08.
- 🏛 **All 94 US bankruptcy courts.** Read from CourtListener's own courts endpoint, pickable from a list, and the search is scoped to them whether or not you choose one.
- 🧹 **Petitions stay out.** A Chapter 7, 11 or 13 filing is a petition, not an adversary proceeding, and it is screened out on the bankruptcy chapter and the docket-number sequence before a row is written or charged.
- 🕰️ **Full docket timeline (opt-in).** Every entry on the proceeding, oldest first, not just the ones that matched the search. Adversary dockets are short, so this is usually one extra request each.
- ⏳ **Pending only.** Drop proceedings that already have a termination date and keep live litigation.
- 🏷️ **No blanks.** Values the source can carry but did not fill read `Not Disclosed`; values that do not apply to that record read `N/A`; booleans read `Yes` or `No`.

### 🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is in production.

### 📊 Output

Each row is one bankruptcy adversary proceeding. Fields, in dataset order:

| Field | Description |
|---|---|
| 🆔 `docketId` | CourtListener docket ID, stable across runs |
| ⚔️ `caseName` | Adversary caption, for example `Tonis v. Greuner` |
| 🔗 `url` | Docket page on courtlistener.com |
| 🏛 `court` / 🏷 `courtId` / 📎 `courtCitationString` | Court name, CourtListener court ID (for example `nysb`), reporter-style abbreviation |
| 🔢 `docketNumber` / ⚖️ `adversaryNumber` | PACER docket number as written, and the bare adversary sequence with the division prefix stripped |
| 🧾 `pacerCaseId` | PACER's internal case ID |
| 🙋 `plaintiff` / 🛡 `defendant` | The two sides of the caption, split apart |
| 📅 `dateFiled` / 🏁 `dateTerminated` / ⏳ `isPending` | Filing date, termination date (`N/A` while pending), `Yes` or `No` |
| 📝 `natureOfSuitRaw` / 🔣 `natureOfSuitCode` / 📌 `natureOfSuit` / 🔢 `natureOfSuitCodes` | The cover-sheet text as PACER wrote it, the primary B1040 code and its label, and every code on the proceeding |
| 🗃 `adversaryCategory` / 🗂 `adversaryCategories` | The action type, for example `Dischargeability of a debt`, and every type the codes map to |
| 👩‍⚖️ `assignedTo` / `assignedToId` | Bankruptcy judge, with their CourtListener ID |
| 🧑‍💼 `trustee` | Trustee on the underlying bankruptcy case, when RECAP carries it |
| 👥 `parties` / `partyIds` / `partyCount` | Every party, semicolon-separated, with IDs and a count |
| 💼 `attorneys` / `attorneyIds` / 🏢 `lawFirms` / `lawFirmIds` | Counsel of record and their firms, with IDs |
| 📄 `matchedDocumentCount` / 📂 `matchedDocuments` / ➕ `hasMoreDocuments` | The filings that matched your query (entry number, date, type, description, PDF availability, PACER document ID, URL), and whether the docket holds more |
| 🕓 `dateCreated` | When the docket entered RECAP |
| 🕒 `scrapedAt` | ISO timestamp of the collection |
| ❌ `error` | `null` on success; error rows carry only this field and are never charged |

With `includeTimeline` on, two more columns appear before `dateCreated`: `timelineEntryCount` and `timeline`.

Three real records from a verification run (recovery of money or property, filed since 01/01/2026, Max Items 5):

```json
[
  {
    "docketId": 74741462,
    "caseName": "Dillworth v. CHARLES SCHWAB & CO., INC.",
    "url": "https://www.courtlistener.com/docket/74741462/dillworth-v-charles-schwab-co-inc/",
    "court": "United States Bankruptcy Court, S.D. Florida.",
    "courtId": "flsb",
    "courtCitationString": "Bankr. S.D. Florida",
    "docketNumber": "26-01311",
    "adversaryNumber": "26-01311",
    "pacerCaseId": "853020",
    "plaintiff": "Dillworth",
    "defendant": "CHARLES SCHWAB & CO., INC.",
    "dateFiled": "2026-09-02",
    "dateTerminated": "N/A",
    "isPending": "Yes",
    "natureOfSuitRaw": "13 Recovery of money/property - 548 fraudulent transfer; 14 Recovery of money/property - other",
    "natureOfSuitCode": "13",
    "natureOfSuit": "Recovery of money/property - 548 fraudulent transfer",
    "natureOfSuitCodes": "13; 14",
    "adversaryCategory": "Recovery of money or property",
    "adversaryCategories": "Recovery of money or property",
    "assignedTo": "Robert Mark",
    "assignedToId": 8757,
    "trustee": "Not Disclosed",
    "parties": "Drew M. Dillworth; CHARLES SCHWAB & CO., INC.; DON R BOVELL",
    "partyIds": "23636889; 23636890; 23636891",
    "partyCount": 3,
    "attorneys": "CHARLES SCHWAB & CO., INC.; DON R BOVELL; James B Miller",
    "attorneyIds": "16016712; 16016713; 16016714; 16016715",
    "lawFirms": "James B Miller",
    "lawFirmIds": "74651",
    "matchedDocumentCount": 3,
    "matchedDocuments": [
      {
        "id": 492395156,
        "docketEntryId": 476821369,
        "documentNumber": "2",
        "attachmentNumber": "N/A",
        "entryNumber": 2,
        "entryDateFiled": "2026-09-03",
        "documentType": "PACER Document",
        "shortDescription": "Summons and Notice of Scheduling Conference in an Adversary Proceeding [Post Dec 1 2020",
        "description": "Not Disclosed",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "https://www.courtlistener.com/docket/74741462/2/dillworth-v-charles-schwab-co-inc/",
        "filepathLocal": "N/A",
        "pacerDocId": "050061660537",
        "snippet": "N/A"
      },
      {
        "id": 492395117,
        "docketEntryId": 476821330,
        "documentNumber": "3",
        "attachmentNumber": "N/A",
        "entryNumber": 3,
        "entryDateFiled": "2026-09-03",
        "documentType": "PACER Document",
        "shortDescription": "Order Setting Scheduling Conference and Establishing Procedures [Post Dec 1 2020",
        "description": "Not Disclosed",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "https://www.courtlistener.com/docket/74741462/3/dillworth-v-charles-schwab-co-inc/",
        "filepathLocal": "N/A",
        "pacerDocId": "050061660569",
        "snippet": "N/A"
      },
      {
        "id": 492452859,
        "docketEntryId": 476877618,
        "documentNumber": "4",
        "attachmentNumber": "N/A",
        "entryNumber": 4,
        "entryDateFiled": "2026-09-03",
        "documentType": "PACER Document",
        "shortDescription": "Summons Service Executed",
        "description": "Not Disclosed",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "https://www.courtlistener.com/docket/74741462/4/dillworth-v-charles-schwab-co-inc/",
        "filepathLocal": "N/A",
        "pacerDocId": "050061663621",
        "snippet": "N/A"
      }
    ],
    "hasMoreDocuments": "Yes",
    "dateCreated": "2026-09-02T21:27:24.863300Z",
    "scrapedAt": "2026-09-08T05:58:22.077Z",
    "error": null
  },
  {
    "docketId": 74744983,
    "caseName": "Wyse v. Great Midwest Insurance Co.",
    "url": "https://www.courtlistener.com/docket/74744983/wyse-v-great-midwest-insurance-co/",
    "court": "United States Bankruptcy Court, S.D. New York",
    "courtId": "nysb",
    "courtCitationString": "Bankr. S.D.N.Y.",
    "docketNumber": "26-01086",
    "adversaryNumber": "26-01086",
    "pacerCaseId": "337129",
    "plaintiff": "Wyse",
    "defendant": "Great Midwest Insurance Co.",
    "dateFiled": "2026-09-03",
    "dateTerminated": "N/A",
    "isPending": "Yes",
    "natureOfSuitRaw": "91 Declaratory judgment; 14 Recovery of money/property - other",
    "natureOfSuitCode": "91",
    "natureOfSuit": "Declaratory judgment",
    "natureOfSuitCodes": "91; 14",
    "adversaryCategory": "Declaratory judgment",
    "adversaryCategories": "Declaratory judgment; Recovery of money or property",
    "assignedTo": "Michael E. Wiles",
    "assignedToId": 8909,
    "trustee": "Not Disclosed",
    "parties": "Michael Wyse,  as Plan Administrator for the Voyager Wind-Down Debtor; Great Midwest Insurance Co.",
    "partyIds": "23644965; 23644966",
    "partyCount": 2,
    "attorneys": "Great Midwest Insurance Co.; Jaimie Nawaday",
    "attorneyIds": "16019608; 16019609; 16019607",
    "lawFirms": "Taft Stettinius & Hollister LLP",
    "lawFirmIds": "1325114",
    "matchedDocumentCount": 3,
    "matchedDocuments": [
      {
        "id": 492453928,
        "docketEntryId": 476878682,
        "documentNumber": "2",
        "attachmentNumber": "N/A",
        "entryNumber": 2,
        "entryDateFiled": "2026-09-03",
        "documentType": "PACER Document",
        "shortDescription": "Auto Summons and Notice of Pre-Trial Conference",
        "description": "Not Disclosed",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "https://www.courtlistener.com/docket/74744983/2/wyse-v-great-midwest-insurance-co/",
        "filepathLocal": "N/A",
        "pacerDocId": "126024734490",
        "snippet": "N/A"
      },
      {
        "id": 492399572,
        "docketEntryId": 476825627,
        "documentNumber": "N/A",
        "attachmentNumber": "N/A",
        "entryNumber": "N/A",
        "entryDateFiled": "2026-09-03",
        "documentType": "PACER Document",
        "shortDescription": "Auto - docket of credit card",
        "description": "Not Disclosed",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "N/A",
        "filepathLocal": "N/A",
        "pacerDocId": "Not Disclosed",
        "snippet": "N/A"
      },
      {
        "id": 492399610,
        "docketEntryId": 476825665,
        "documentNumber": "1",
        "attachmentNumber": "N/A",
        "entryNumber": 1,
        "entryDateFiled": "2026-09-03",
        "documentType": "PACER Document",
        "shortDescription": "Complaint (fee)",
        "description": "Adversary case 26-01086. Complaint against Great Midwest Insurance Co. (Fee Amount $ 350.). Nature(s) of Suit: (91 (Declaratory judgment)), (14 (Recovery of money/property - other)) Filed by Jaimie Nawaday on behalf of Michael Wyse. (Attachments: # 1 Exhibit A # 2 Exhibit B) (Nawaday, Jaimie) (Entered: 09/03/2026)",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "https://www.courtlistener.com/docket/74744983/1/voyager-digital-holdings-inc-and-michael-wyse-adversary-proceeding/",
        "filepathLocal": "N/A",
        "pacerDocId": "126024733897",
        "snippet": "N/A"
      }
    ],
    "hasMoreDocuments": "Yes",
    "dateCreated": "2026-09-03T16:44:25.334936Z",
    "scrapedAt": "2026-09-08T05:58:23.177Z",
    "error": null
  },
  {
    "docketId": 74679870,
    "caseName": "Jeffrey Pagtakhan and Renilda Ventura Pagtakhan - Adversary Proceeding",
    "url": "https://www.courtlistener.com/docket/74679870/jeffrey-pagtakhan-and-renilda-ventura-pagtakhan-adversary-proceeding/",
    "court": "United States Bankruptcy Court, C.D. California",
    "courtId": "cacb",
    "courtCitationString": "Bankr. C.D. Cal.",
    "docketNumber": "6:26-ap-01092",
    "adversaryNumber": "26-01092",
    "pacerCaseId": "2056006",
    "plaintiff": "N/A",
    "defendant": "N/A",
    "dateFiled": "2026-08-20",
    "dateTerminated": "N/A",
    "isPending": "Yes",
    "natureOfSuitRaw": "13 Recovery of money/property - 548 fraudulent transfer; 91 Declaratory judgment; 11 Recovery of money/property - 542 turnover of property; 01 Determination of removed claim or cause",
    "natureOfSuitCode": "13",
    "natureOfSuit": "Recovery of money/property - 548 fraudulent transfer",
    "natureOfSuitCodes": "13; 91; 11",
    "adversaryCategory": "Recovery of money or property",
    "adversaryCategories": "Recovery of money or property; Declaratory judgment",
    "assignedTo": "Magdalena Reyes Bordeaux",
    "assignedToId": "Not Disclosed",
    "trustee": "Daff, (TR) Charles W",
    "parties": "United States Trustee (RS); Leilani Lozado Venia; Mitchell Marc Lozado; Charles W Daff (TR); Charles W. Daff",
    "partyIds": "23626223; 23626224; 23626225; 23626226; 23626227",
    "partyCount": 5,
    "attorneys": "Mitchell Marc Lozado; Brandon J. Iskander; Leilani Lozado Venia",
    "attorneyIds": "16009724; 16009725; 16009726; 16009727",
    "lawFirms": "Goe Forsythe & Hodges LLP",
    "lawFirmIds": "819166",
    "matchedDocumentCount": 3,
    "matchedDocuments": [
      {
        "id": 492082166,
        "docketEntryId": 475258574,
        "documentNumber": "1",
        "attachmentNumber": 1,
        "entryNumber": 1,
        "entryDateFiled": "2026-08-20",
        "documentType": "Attachment",
        "shortDescription": "Appendix Adversary Proceeding Cover Sheet",
        "description": "Adversary case 6:26-ap-01092. Complaint by Charles W. Daff against Leilani Lozado Venia, Mitchell Marc Lozado. ($350.00 Fee Charge To Estate). Avoidance and Recovery of Intentional Fraudulent Transfer with an Automatic Preservation for the Estate 11 U.S.C. §§ 544, 550, 551; Cal. Civ. Code §§ 3439.04, 3439.07; Avoidance and Recovery of Constructive Fraudulent Transfer with an Automatic Preservation for the Estate 11 U.S.C. §§ 544, 550, 551; Cal. Civ. Code §§ 3439.04, 3439.05, 3439.07, and 3439.09; Declaratory Relief 11 U.S.C. §§ 544; Fed. R. Bankr. P. 7001(9); Unjust Enrichment 11 U.S.C. § 105; Disallowance of Claims 11 U.S.C. § 502(d), Including Exhibits 1 Through 5; Adversary Proceeding Sheet and Proof of Service (Attachments: # 1 Appendix Adversary Proceeding Cover Sheet) Nature of Suit: (13 (Recovery of money/property - 548 fraudulent transfer)),(91 (Declaratory judgment)),(91 (Declaratory judgment)),(11 (Recovery of money/property - 542 turnover of property)) (Iskander, Brandon) WARNING: Incorrect Nature of Suit (ADD # 01- Determination of removed claim or caused and corrected item no# 11 to show on the docket) and Demand amount selected at the time of filing, see docket no# 3 for corrective action. Modified on 8/21/2026 (SH). (Entered: 08/20/2026)",
        "isAvailable": "No",
        "pageCount": 2,
        "url": "https://www.courtlistener.com/docket/74679870/1/1/jeffrey-pagtakhan-and-renilda-ventura-pagtakhan-adversary-proceeding/",
        "filepathLocal": "N/A",
        "pacerDocId": "9730114666513",
        "snippet": "N/A"
      },
      {
        "id": 492081990,
        "docketEntryId": 476517120,
        "documentNumber": "3",
        "attachmentNumber": "N/A",
        "entryNumber": 3,
        "entryDateFiled": "2026-08-21",
        "documentType": "PACER Document",
        "shortDescription": "Not Disclosed",
        "description": "Notice to Filer of Correction Made/No Action Required: Incorrect case data/statistical information was entered at the time of filing. The Nature of Suit were incorrectly selected re: (1) for Determination of removed claim or cause and (11) Recovery of Money/Property (didn't populate the title of the name on the docket) THE COURT HAS CORRECTED THIS INFORMATION. THIS ENTRY IS PROVIDED FOR FUTURE REFERENCE. Incorrect Demand Amount entered at the time of filing. The correct amount to enter was 214, not 214000. CM/ECF will populate the demand amount by 1000, so the amount showed 214,000.000 (on the docket), and should show 214,000. THE COURT HAS CORRECTED THIS INFORMATION. THIS ENTRY IS PROVIDED FOR FUTURE REFERENCE. (RE: related document(s)1 Complaint filed by Plaintiff Charles W. Daff) (SH) (Entered: 08/21/2026)",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "https://www.courtlistener.com/docket/74679870/3/jeffrey-pagtakhan-and-renilda-ventura-pagtakhan-adversary-proceeding/",
        "filepathLocal": "N/A",
        "pacerDocId": "Not Disclosed",
        "snippet": "N/A"
      },
      {
        "id": 490908255,
        "docketEntryId": 475378555,
        "documentNumber": "N/A",
        "attachmentNumber": "N/A",
        "entryNumber": "N/A",
        "entryDateFiled": "2026-08-21",
        "documentType": "PACER Document",
        "shortDescription": "Notice to Filer of Correction Made/No Action Required",
        "description": "Not Disclosed",
        "isAvailable": "No",
        "pageCount": "Not Disclosed",
        "url": "N/A",
        "filepathLocal": "N/A",
        "pacerDocId": "Not Disclosed",
        "snippet": "N/A"
      }
    ],
    "hasMoreDocuments": "No",
    "dateCreated": "2026-08-20T21:21:02.719700Z",
    "scrapedAt": "2026-09-08T05:58:17.372Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

| | What you get |
|---|---|
| **Adversary proceedings, not petitions** | Four measured signals separate the lawsuit from the bankruptcy it sits inside: the Form B1040 nature of suit, the missing chapter, the separate adversary docket-number sequence, and the `X v. Y` caption. Chapter filings never reach the dataset. |
| **21 B1040 codes, all verified** | Every code was queried one by one against the live API on 2026-09-08. Recovery of other property leads with 6,710 proceedings, preference actions follow with 5,249, and revocation of confirmation is genuinely rare at 17. |
| **The sides of the caption, split** | `plaintiff` and `defendant` come out of the adversary caption as their own columns, so a trustee's clawback docket sorts by who is being sued without any parsing on your side. |
| **All 94 bankruptcy courts** | Read from CourtListener's own courts endpoint, not typed from memory, and pickable from a list. |
| **Counsel and firms on the row** | Parties, attorneys and law firms come back with their CourtListener IDs. Measured on 20 dischargeability proceedings: 20/20 had parties and counsel, 16/20 had firms. |
| **No API key needed** | CourtListener throttles anonymous callers at 5 requests a minute per IP, and each request returns 20 rows. Turn the proxy on for a fresh exit IP per request, or paste your own free CourtListener key and the throttle disappears. |
| **You pay for what you keep** | Rows are billed as they are written and capped at `maxItems`, so a page that overshoots the cap is trimmed before it is charged. Petitions and duplicates are dropped before billing, never after. |

### 📈 How it compares to alternatives

| | This Actor | Bankruptcy petition scrapers | PACER directly |
|---|---|---|---|
| What a row is | The adversary lawsuit inside the bankruptcy | The Chapter 7, 11 or 13 petition | Either, per court |
| Nature-of-suit filter | 21 B1040 codes in 9 pickable groups, one search per code | Chapter number only | Per-court only, no cross-district search |
| Plaintiff and defendant | Split out as columns | Debtor name alone | Behind the docket sheet |
| Court coverage | All 94 US bankruptcy courts, pickable | Varies | One court at a time |
| Matched filings and full timeline | Matched filings on the row, full timeline opt-in | Sometimes | Per page |
| Rows a free account can preview | 10 | Varies | None |
| Ceiling | Anonymous API throttle of 5 requests a minute per IP, lifted by a free key or the proxy | Same source, same ceiling | Per-page fees |

### 🚀 How to use

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [CourtListener Adversary Proceedings Scraper](https://apify.com/parseforge/courtlistener-adversary-scraper?fpr=vmoqkp).
3. Pick a type of adversary action, set your courts and dates, and click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

One typical run: `natureOfSuitCategories` `["recovery"]`, `courts` `["deb","txsb"]`, `filedAfter` `01/01/2026`, `maxItems` `200`. Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### 💼 Business use cases

#### 📡 Watch clawback litigation as it is filed

Set `natureOfSuitCategories` to `recovery`, sort by filing date, and run it on a schedule. Each run returns the newest preference and fraudulent transfer suits first, so a diff against the last run is your alert feed. A defense firm can see every new 547 action in Delaware and the Southern District of Texas the morning after it is docketed.

#### ⚔️ Track a debtor or a creditor across proceedings

`partyName` searches the party list, which is what PACER indexes, so a company's adversary proceedings come back whether it is plaintiff or defendant. Credit and collections teams use it to see whether a debtor is already being sued for fraud before writing off a balance.

#### 🏛️ Map one court's adversary docket

Pick a court such as `deb`, `nysb` or `txsb` and pull every adversary proceeding filed in a date range, grouped by the code the plaintiff wrote on the cover sheet. Firm marketing teams use `assignedTo`, `attorneys` and `lawFirms` to see who is filing what before which judge.

#### 📊 Measure filing trends

Every row carries the B1040 codes, the action type and the filing date, so counts by court, quarter and action type fall out of a group-by. Restructuring advisors track whether dischargeability complaints are rising in a district before staffing a practice.

### 🔌 Automating CourtListener Adversary Proceedings Scraper

- **Make / Zapier:** trigger a run on a schedule, then push new rows to a CRM, a Google Sheet or a Slack channel.
- **Slack:** post each new adversary caption, court and action type to a litigation-watch channel.
- **Airbyte:** land the dataset in Snowflake, BigQuery or Postgres for analytics.
- **GitHub:** commit the JSON export to a repository to keep a versioned history of filings.
- **Google Drive:** drop the CSV or Excel export into a shared folder for the practice group.

### 🌟 Beyond business use cases

- **Research:** count 523(a)(2) fraud complaints by district and year, or measure how often trustees win preference actions by court.
- **Personal:** follow an adversary proceeding you are a party to, or watch one filed against a company you deal with.
- **Non-profit:** monitor student-loan dischargeability filings and consumer discharge objections in the districts you serve.
- **Experimentation:** train classifiers on cover-sheet codes versus complaint text, or build a docket-alert bot on top of the JSON export.

### 🤖 Ask an AI assistant about this scraper

Give an AI agent live access to bankruptcy adversary dockets through the Model Context Protocol:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/courtlistener-adversary-scraper"
```

Then prompt it in plain language:

- *"List the preference actions filed in Delaware bankruptcy court this month."*
- *"Find dischargeability complaints alleging actual fraud against individuals in 2026."*
- *"Which law firms file the most fraudulent transfer suits in the Southern District of Texas?"*

Copy this into ChatGPT, Claude, or Cursor to start:

```
Use the Apify Actor "parseforge/courtlistener-adversary-scraper" to search bankruptcy adversary proceedings. Input: { "natureOfSuitCategories": ["recovery"|"dischargeability"|"lien"|"discharge"|"injunctive"|"subordination"|"declaratory"|"sale"|"other"], "natureOfSuitCodes": ["12"], "courts": ["deb"], "filedAfter": "MM/DD/YYYY", "partyName": "<name>", "maxItems": <n> }. It returns the adversary caption split into plaintiff and defendant, court, docket and adversary number, dates, B1040 nature of suit, action type, judge, trustee, parties, counsel and firms per row. Call it with the ApifyClient and my APIFY_TOKEN.
```

### ❓ Frequently Asked Questions

#### ❓ What is an adversary proceeding?

It is a lawsuit filed inside a bankruptcy case, governed by Part VII of the Federal Rules of Bankruptcy Procedure. A trustee suing to recover a preference, a creditor arguing a debt should not be discharged, or a dispute over who has priority in a piece of collateral all get their own docket, their own number and their own cover sheet.

#### ❓ How is it different from a bankruptcy filing?

The petition opens the bankruptcy; the adversary proceeding is litigation inside it. A petition carries a chapter (7, 11, 13) and is captioned with the debtor's name. An adversary proceeding carries no chapter, carries a Form B1040 nature of suit instead, uses a separate docket-number sequence, and is captioned `X v. Y`. This Actor returns only the second kind. For the petitions, use the [CourtListener Business Bankruptcy Scraper](https://apify.com/parseforge/business-bankruptcy-filings-scraper?fpr=vmoqkp).

#### ❓ Do I need a CourtListener account?

No. Every endpoint this Actor reads is public and anonymous. A free CourtListener API key is supported (`courtListenerKey`) and lifts the 5-requests-a-minute throttle for long runs, but it is optional.

#### ❓ What are the Form B1040 codes?

The two-digit codes on the adversary proceeding cover sheet, for example 12 for a 547 preference action, 62 for a 523(a)(2) fraud dischargeability complaint, or 21 for a lien priority fight. They are unrelated to the three-digit JS-44 codes used for district-court civil cases, which is part of why the two never get confused here.

#### ❓ Does it cover state courts?

No. RECAP is the federal PACER archive, and adversary proceedings only exist in the 94 United States bankruptcy courts.

#### ❓ Why am I getting no results?

Every filter is ANDed, and an over-narrow combination returns an empty set rather than an error. Drop one filter at a time. Some codes are genuinely rare: revocation of confirmation matched 17 proceedings in the whole archive.

#### ❓ Why is a proceeding missing its nature of suit or judge?

A docket enters RECAP with whatever the first donated filing carried, and the cover-sheet fields arrive later. Those cells read `Not Disclosed` until the data lands. When no nature-of-suit filter is set, the Actor still catches those dockets through the chapter, docket-number and caption signals.

#### ❓ How fast is it, and what is the ceiling?

CourtListener throttles anonymous callers at 5 requests a minute per IP, and each request returns 20 rows, so a direct run tops out around 100 rows a minute. The penalty escalates on a burst: one measured 429 asked for a 272-second cooldown, and the Actor waits it out as the `Retry-After` header asks. Turn on the proxy for a fresh exit IP per request, or add a free CourtListener key, and the throttle no longer binds.

#### ❓ Why does picking a category make a run faster?

`nature_of_suit` is a server-side filter, so CourtListener returns only adversary proceedings and every row on the page counts. With no category or code set the Actor has to screen the whole bankruptcy feed itself, and most of that feed is ordinary petitions.

#### ❓ Can I get the documents themselves?

The ones already donated to the free RECAP archive, yes: each filing carries the archive path in `filepathLocal` and `isAvailable` tells you whether the PDF is there. Turn on `availableOnly` to keep only proceedings with free PDFs.

#### ❓ Does it return the full docket?

On request. `includeTimeline` fetches every entry per proceeding as a second search and adds `timelineEntryCount` and `timeline` to the row. It is off by default because it adds at least one request per proceeding.

#### ❓ Can I find the bankruptcy case an adversary proceeding belongs to?

Not as a linked field. CourtListener's public search hit does not carry the lead case ID, so the Actor does not invent one. The adversary caption, the court and `pacerCaseId` are what the public surface gives you, and `url` takes you to the docket where the lead case is named.

#### ❓ Why fewer rows than Max Items?

Either your query has that many matches, or petitions, closed proceedings and duplicates were dropped. The log prints CourtListener's own total per search and how many records were skipped.

#### ❓ Does it deduplicate?

Yes. One proceeding often carries three B1040 codes and so matches three of the Actor's searches. Rows are keyed by docket ID across every search in a run, so it is written and charged once.

#### ❓ How fresh is the data?

It is read at run time from the same index that powers courtlistener.com. Dockets appear as RECAP receives them from the courts' RSS feeds and from RECAP extension users.

#### ❓ How many rows per run?

Free plan: 10, as a preview. Paid plans: up to 1,000,000, bounded by how many proceedings your query actually matches.

### 🔌 Integrate with any app

The dataset is available through the Apify API and the JavaScript and Python clients, and every run can be scheduled, triggered by webhook or wired into Make, Zapier, n8n, Airbyte, Google Sheets, Slack and GitHub from the **Integrations** tab.

### 🔗 Recommended Actors

- [CourtListener Business Bankruptcy Scraper](https://apify.com/parseforge/business-bankruptcy-filings-scraper?fpr=vmoqkp): the Chapter 7, 11 and 13 petitions these proceedings hang off.
- [CourtListener Scraper](https://apify.com/parseforge/courtlistener-docket-scraper?fpr=vmoqkp): all six CourtListener indexes, including judges and oral arguments.
- [CourtListener Opinions Scraper](https://apify.com/parseforge/court-listener-opinions-scraper?fpr=vmoqkp): full opinion text, walked by court feed.
- [CourtListener State Court Dockets Scraper](https://apify.com/parseforge/courtlistener-dockets-scraper?fpr=vmoqkp): state court dockets from the same archive.
- [Caselaw Access Project Scraper](https://apify.com/parseforge/caselaw-access-scraper?fpr=vmoqkp): historical US case law from the Harvard Caselaw Access Project.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more court, government and public-records scrapers.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA) with your run ID, your input, and what you expected.

> **⚠️ Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by the Free Law Project or CourtListener. It collects only publicly available court data through the public API. You are responsible for using the data in compliance with CourtListener's terms and applicable laws. Court records concern real people: do not use this data to identify, profile, or target individuals.

# Actor input Schema

## `natureOfSuitCategories` (type: `array`):

The kind of lawsuit to collect, using the Form B1040 nature-of-suit groups every adversary complaint is filed under. Each group expands to its codes and is searched in turn. Leave empty to screen the whole bankruptcy feed instead, which is slower because CourtListener can no longer filter server side.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000. Split evenly across the selected nature-of-suit codes. Leave empty on a paid plan for 100 rows.

## `natureOfSuitCodes` (type: `array`):

Pick individual Form B1040 codes instead of whole groups, for example 12 for a preference action or 68 for willful and malicious injury. Combines with the groups above.

## `courts` (type: `array`):

Restrict the search to one or more of the 94 United States bankruptcy courts. Leave empty to search all of them.

## `query` (type: `string`):

Full-text query across the case caption, parties and filing text. Supports quoted phrases and AND/OR/NOT. Leave empty to browse with the filters alone.

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

Match words in the adversary caption, for example "trustee" or a debtor surname.

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

Exact adversary docket number, for example 26-01087 or 2:26-ap-01234.

## `partyName` (type: `string`):

Name of a plaintiff, defendant or trustee in the proceeding, for example "Wells Fargo".

## `filedAfter` (type: `string`):

Earliest filing date of the adversary complaint, as MM/DD/YYYY or YYYY-MM-DD.

## `filedBefore` (type: `string`):

Latest filing date of the adversary complaint, as MM/DD/YYYY or YYYY-MM-DD.

## `pendingOnly` (type: `boolean`):

Drop proceedings that already have a termination date, leaving only live litigation.

## `availableOnly` (type: `boolean`):

Keep only proceedings whose filings are already in the free RECAP archive rather than paywalled behind PACER.

## `entryDescription` (type: `string`):

Match words in the docket entry description, for example complaint, summons or default judgment.

## `documentNumber` (type: `string`):

Filter to a specific document number within the adversary docket, for example 1 for the complaint.

## `includeTimeline` (type: `boolean`):

Look up every docket entry for each proceeding, not just the ones that matched the query. Adds the timeline and timelineEntryCount columns and costs at least one extra request per proceeding.

## `timelineLimit` (type: `integer`):

How many docket entries to attach when the timeline is on. Older entries come first.

## `orderBy` (type: `string`):

How to order results. Relevance only means anything when a search query is set.

## `courtListenerKey` (type: `string`):

A free CourtListener API key (Profile > API on courtlistener.com) lifts the anonymous throttle and makes long runs faster. Leave empty to run anonymously.

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

Off by default: the CourtListener API is open. Turn it on for long anonymous runs so each request gets a fresh exit IP and its own throttle allowance. Not used when an API key is supplied.

## Actor input object example

```json
{
  "natureOfSuitCategories": [
    "recovery"
  ],
  "maxItems": 10,
  "filedAfter": "01/01/2026",
  "pendingOnly": false,
  "availableOnly": false,
  "includeTimeline": false,
  "timelineLimit": 20,
  "orderBy": "dateFiled desc",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields: adversary case, court, docket number, dates, nature of suit, plaintiff, defendant, judge, counsel

## `fullData` (type: `string`):

Complete dataset with all 36 fields, including the matched documents array

# 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 = {
    "natureOfSuitCategories": [
        "recovery"
    ],
    "maxItems": 10,
    "filedAfter": "01/01/2026",
    "orderBy": "dateFiled desc",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/courtlistener-adversary-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 = {
    "natureOfSuitCategories": ["recovery"],
    "maxItems": 10,
    "filedAfter": "01/01/2026",
    "orderBy": "dateFiled desc",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/courtlistener-adversary-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "natureOfSuitCategories": [
    "recovery"
  ],
  "maxItems": 10,
  "filedAfter": "01/01/2026",
  "orderBy": "dateFiled desc",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call parseforge/courtlistener-adversary-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/courtlistener-adversary-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eY0NyHNaKIOzKzJvA/builds/n8boISavbvwhOrhh3/openapi.json
