CourtListener RECAP Documents Scraper - PACER Filings avatar

CourtListener RECAP Documents Scraper - PACER Filings

Pricing

from $2.26 / 1,000 results

Go to Apify Store
CourtListener RECAP Documents Scraper - PACER Filings

CourtListener RECAP Documents Scraper - PACER Filings

Scrape individual RECAP filings from CourtListener: docket entry text, page count, public PDF link, court, judge and case. Export to CSV, JSON, Excel or XML.

Pricing

from $2.26 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

ParseForge Banner

πŸ“„ CourtListener RECAP Documents Scraper

πŸš€ Export individual federal court filings, not just cases, in seconds. One row per document: the docket entry text, the page count, a working link to the PDF itself, and the case, court and judge it belongs to. RECAP indexes 493,413,653 docket entries and holds the actual PDF for 17,342,712 of them.

Every other court scraper stops at the case. This one goes inside it. A federal docket is a list of filings: complaints, motions, orders, briefs, exhibits, transcripts. This Actor returns those filings one by one, straight from the CourtListener RECAP archive, which is the Free Law Project's public mirror of PACER built from documents real users have already paid for and contributed.

Each row carries 43 fields: the filing (type, docket entry text, document number, attachment number, entry number, entry date, page count, PACER document id, a permanent PDF link and a text excerpt taken from the PDF itself) and the parent case it sits in (case name, docket number, court, judge, nature of suit, cause, parties, counsel and law firms). Coverage spans 235 federal district, bankruptcy, appellate and special courts, every one of them verified to return filings.

🎯 Target AudienceπŸ’‘ Primary Use Cases
Litigation analystsPull every brief and order in a case as a PDF set
Legal AI and RAG teamsBuild a corpus of real filings with text excerpts and page counts
Docket monitoring servicesWatch for a filing type across a court, not just for new cases
Journalists and researchersFind the specific document behind a story and link to it
Law librariansAssemble teaching sets of motions, orders and exhibits
Compliance and risk teamsRead what was actually filed against a counterparty

πŸ“‹ What the CourtListener RECAP Documents Scraper does

You give it a search: a phrase, a court, a party, a nature of suit, a date range, or a list of docket URLs. It queries the CourtListener RECAP document index, then joins each filing back to its parent case in a single extra request per 20 cases, and writes one flat row per filing.

πŸ’‘ Why it matters: PACER bills ten cents a page and gives you no way to search document text across districts. The RECAP archive already holds millions of those documents for free, but its API returns document hits and case hits as two separate shapes, with no case name, court or judge on a document hit at all. This Actor joins them, so a filing row is usable on its own, and it never bills for a record it did not deliver.

What each row gives you

  • The document. Filing type, the clerk's full docket entry text, document and attachment numbers, entry number, entry date, page count, PACER document id and RECAP storage path.
  • A link that works. When the PDF is in RECAP, pdfUrl points at storage.courtlistener.com and resolves to the real PDF with no login and no per page charge.
  • The text inside. textSnippet is an excerpt of the document's own extracted text, so you can tell a two page scheduling order from a thirty eight page summary judgment brief before downloading anything.
  • The case. Case name, docket number, court, court citation string, case filed and terminated dates, assigned judge, referring judge, nature of suit, cause, jurisdiction type, jury demand, bankruptcy chapter and PACER case id.
  • The people. Parties, attorneys of record and law firms, as arrays.
  • The citations. citedOpinionIds lists the CourtListener opinion ids the document cites, when the archive has parsed them.

🎬 Full Demo (🚧 Coming soon)

A walkthrough video is on the way. Until then, run the Actor with its default input: it returns five filings matching the phrase "motion for summary judgment", each with a live PDF link.

πŸ“Š Output

Every run writes a flat table. One row is one filing.

FieldTypeDescription
πŸ†” documentIdintegerCourtListener id of the document
πŸ“Œ shortDescriptionstringFiling type, for example "Order on Motion for Summary Judgment"
πŸ“ descriptionstringThe clerk's full docket entry text
πŸ”— urlstringCourtListener page for this filing
πŸ“„ pdfUrlstringDirect link to the PDF, or N/A when RECAP does not hold it
βœ… isAvailablestringYes when the PDF is in the archive
πŸ—‚ documentTypestringPACER Document or Attachment
πŸ”’ documentNumberintegerFiling number inside the docket
πŸ“Ž attachmentNumberintegerAttachment index, or N/A for a main document
πŸ“Ž isAttachmentstringYes or No
#️⃣ entryNumberintegerDocket entry number
πŸ“… entryDateFiledstringDate the filing was entered, YYYY-MM-DD
πŸ“ƒ pageCountintegerPages in the PDF
πŸ—„ filepathLocalstringPath of the document inside the RECAP archive
🧾 pacerDocIdstringPACER's own document identifier
πŸ†” docketEntryIdintegerCourtListener id of the docket entry
πŸ•“ dateAddedToRecapstringDate the document entered the archive
πŸ†” docketIdintegerCourtListener id of the parent case
βš–οΈ caseNamestringCase caption
πŸ”’ docketNumberstringPACER docket number
πŸ› courtstringCourt full name
🏷 courtIdstringCourt slug, for example mad
πŸ“Ž courtCitationStringstringBluebook court abbreviation
πŸ”— docketUrlstringCourtListener page for the whole case
πŸ“… caseDateFiledstringDate the case was filed
🏁 caseDateTerminatedstringDate the case closed, or N/A
⏳ isCasePendingstringYes or No
πŸ‘©β€βš–οΈ assignedTostringAssigned judge
πŸ†” assignedToIdintegerCourtListener judge id
πŸ‘¨β€βš–οΈ referredTostringMagistrate or referring judge
πŸ“Œ suitNaturestringJS-44 nature of suit
πŸ“œ causestringStatutory cause of action
🌐 jurisdictionTypestringBasis of federal jurisdiction
πŸ§‘β€βš–οΈ juryDemandstringJury demand as recorded in PACER
πŸ“• chapterstringBankruptcy chapter, or N/A
🧾 pacerCaseIdstringPACER's own case identifier
πŸ”Ž textSnippetstringExcerpt of the document's extracted text
βš“ citedOpinionIdsarrayOpinion ids the document cites
πŸ‘₯ partiesarrayParties to the case
πŸ’Ό attorneysarrayAttorneys of record
🏒 lawFirmsarrayLaw firms of record
πŸ•’ scrapedAtstringISO timestamp of the run
❌ errorstringSet only on a row that reports a problem

Three real records from a run:

[
{
"documentId": 458527966,
"shortDescription": "Order on Motion for Summary Judgment",
"description": "Judge Brian E. Murphy: ORDER RE MOTION FOR SUMMARY JUDGMENT granting 10 Plaintiff's Motion for Summary Judgment. (BIB)",
"url": "https://www.courtlistener.com/docket/71293908/14/volunteer-services-for-animals-inc-v-collins/",
"pdfUrl": "https://storage.courtlistener.com/recap/gov.uscourts.mad.288682/gov.uscourts.mad.288682.14.0.pdf",
"isAvailable": "Yes",
"documentType": "PACER Document",
"documentNumber": 14,
"attachmentNumber": "N/A",
"isAttachment": "No",
"entryNumber": 14,
"entryDateFiled": "2025-11-12",
"pageCount": 3,
"filepathLocal": "recap/gov.uscourts.mad.288682/gov.uscourts.mad.288682.14.0.pdf",
"pacerDocId": "095013288800",
"docketEntryId": 443873975,
"dateAddedToRecap": "2025-11-12",
"docketId": 71293908,
"caseName": "Volunteer Services for Animals, Inc v. Collins",
"docketNumber": "1:25-cv-12485",
"court": "District Court, D. Massachusetts",
"courtId": "mad",
"courtCitationString": "D. Mass.",
"docketUrl": "https://www.courtlistener.com/docket/71293908/volunteer-services-for-animals-inc-v-collins/",
"caseDateFiled": "2025-09-08",
"caseDateTerminated": "N/A",
"isCasePending": "Yes",
"assignedTo": "Brian E. Murphy",
"assignedToId": "Not Disclosed",
"referredTo": "Not Disclosed",
"suitNature": "290 Real Property: Other",
"cause": "28:1332 Diversity-Petition to Quiet Title",
"jurisdictionType": "Diversity",
"juryDemand": "Not Disclosed",
"chapter": "N/A",
"pacerCaseId": "288682",
"textSnippet": "Case 1:25-cv-12485-BEM Document 14 Filed 11/12/25 Page 1 of 3 UNITED STATES DISTRICT COURT FOR THE DISTRICT OF MASSACHUSETTS VOLUNTEER SERVICES FOR ANIMALS, INC. : Plaintiff, : : v. : C.A. No 1:25-cv- ...",
"citedOpinionIds": [],
"parties": ["Volunteer Services for Animals, Inc", "Dorothy M Collins"],
"attorneys": ["Charles D. Blackman"],
"lawFirms": ["Charles D. Blackman, ESQ.", "Volunteer Services for Animals, Inc"],
"scrapedAt": "2026-09-08T07:11:38.710Z",
"error": null
},
{
"documentId": 490197697,
"shortDescription": "Not Disclosed",
"description": "BRIEF IN SUPPORT of Defendant's Motion for Summary Judgment and Opposition to Plaintiffs' Motion for Summary Judgment re 39 MOTION for Summary Judgment or, in the Alternative, a Preliminary Injunction, 50 MOTION for Summary Judgme ...",
"url": "https://www.courtlistener.com/docket/73501422/51/national-family-planning-reproductive-health-association-v-kennedy-jr/",
"pdfUrl": "https://storage.courtlistener.com/recap/gov.uscourts.pamd.152426/gov.uscourts.pamd.152426.51.0.pdf",
"isAvailable": "Yes",
"documentType": "PACER Document",
"documentNumber": 51,
"attachmentNumber": "N/A",
"isAttachment": "No",
"entryNumber": 51,
"entryDateFiled": "2026-08-06",
"pageCount": 38,
"filepathLocal": "recap/gov.uscourts.pamd.152426/gov.uscourts.pamd.152426.51.0.pdf",
"pacerDocId": "15509916337",
"docketEntryId": 474688472,
"dateAddedToRecap": "2026-08-17",
"docketId": 73501422,
"caseName": "National Family Planning & Reproductive Health Association v. Kennedy, Jr.",
"docketNumber": "1:26-cv-01684",
"court": "District Court, M.D. Pennsylvania",
"courtId": "pamd",
"courtCitationString": "M.D. Penn.",
"docketUrl": "https://www.courtlistener.com/docket/73501422/national-family-planning-reproductive-health-association-v-kennedy-jr/",
"caseDateFiled": "2026-06-18",
"caseDateTerminated": "N/A",
"isCasePending": "Yes",
"assignedTo": "Jennifer P. Wilson",
"assignedToId": "Not Disclosed",
"referredTo": "Not Disclosed",
"suitNature": "899 Other Statutes: Administrative Procedures Act/Review or Appeal of Agency Decision",
"cause": "05:702 Administrative Procedure Act",
"jurisdictionType": "U.S. Government Defendant",
"juryDemand": "Not Disclosed",
"chapter": "N/A",
"pacerCaseId": "152426",
"textSnippet": "Case 1:26-cv-01684-JPW Document 51 Filed 08/06/26 Page 1 of 38 IN THE UNITED STATES DISTRICT COURT FOR THE MIDDLE DISTRICT OF PENNSYLVANIA NATIONAL FAMILY PLANNING & REPRODUCTIVE HEALTH No. 1:26-cv-16 ...",
"citedOpinionIds": [112864, 118096, 184088, 185857, 185924, 743059, 754047, 790935, 1202445, 1963887],
"parties": ["Robert F. Kennedy, Jr.", "Brian Christine", "National Family Planning & Reproductive Health Association"],
"attorneys": ["Brigitte Amiri", "Nora Ellmann", "Timothy S. Judge", "Ryan Mendias", "Chelsea G. Tejada"],
"lawFirms": ["U.S. Department of Health and Human Services", "American Civil Liberties Union of PA"],
"scrapedAt": "2026-09-08T07:11:38.711Z",
"error": null
},
{
"documentId": 466865963,
"shortDescription": "Order on Motion for Summary Judgment",
"description": "ORDER DENYING MOTION FOR SUMMARY JUDGMENT denying 30 Motion for Summary Judgment By JUDGE JOHN A. WOODCOCK, JR. (CCS) (Entered: 01/29/2026)",
"url": "https://www.courtlistener.com/docket/72070620/55/powell-v-powell/",
"pdfUrl": "https://storage.courtlistener.com/recap/gov.uscourts.med.69610/gov.uscourts.med.69610.55.0.pdf",
"isAvailable": "Yes",
"documentType": "PACER Document",
"documentNumber": 55,
"attachmentNumber": "N/A",
"isAttachment": "No",
"entryNumber": 55,
"entryDateFiled": "2026-01-29",
"pageCount": 13,
"filepathLocal": "recap/gov.uscourts.med.69610/gov.uscourts.med.69610.55.0.pdf",
"pacerDocId": "09103641574",
"docketEntryId": 452007577,
"dateAddedToRecap": "2026-01-29",
"docketId": 72070620,
"caseName": "POWELL v. POWELL",
"docketNumber": "2:25-cv-00641",
"court": "District Court, D. Maine",
"courtId": "med",
"courtCitationString": "D. Me.",
"docketUrl": "https://www.courtlistener.com/docket/72070620/powell-v-powell/",
"caseDateFiled": "2025-12-22",
"caseDateTerminated": "2026-03-04",
"isCasePending": "No",
"assignedTo": "John A. Woodcock Jr.",
"assignedToId": 3543,
"referredTo": "John C. Nivison",
"suitNature": "890 Other Statutory Actions",
"cause": "42:11601 International Child Abduction Remedies Act (Hague)",
"jurisdictionType": "Federal Question",
"juryDemand": "Not Disclosed",
"chapter": "N/A",
"pacerCaseId": "69610",
"textSnippet": "Case 2:25-cv-00641-JAW Document 55 Filed 01/29/26 Page 1 of 13 PageID #: 704 UNITED STATES DISTRICT COURT DISTRICT OF MAINE SARAH LEYLA POWELL, ) ) Petitioner, ) ) v. ) No. 2:25 ...",
"citedOpinionIds": [180959, 183909, 198629, 198787, 200014, 203004, 206613, 600349, 2671021, 4224316, 4344037],
"parties": ["ADRIAN MAURICE POWELL, JR.", "SARAH LEYLA POWELL"],
"attorneys": ["KATELYN D. SKINNER", "BRADLEY C. MORIN", "KATRINA ANNE SEIPEL"],
"lawFirms": ["Bourque Clegg Causey & Morin LLC", "Milam Law Collective", "Buckley Law PC"],
"scrapedAt": "2026-09-08T07:11:38.711Z",
"error": null
}
]

Fields the source can withhold come back as Not Disclosed, fields that do not apply to a record come back as N/A, and empty lists come back as []. No column is ever a bare null except error.

✨ Why choose this Actor

  • One row per filing, not per case. The unit of work in litigation is the document. This is the only ParseForge Actor that treats it that way.
  • PDF links that actually resolve. pdfUrl was verified against the live archive, including attachments. No login, no PACER account, no per page charge.
  • Text from inside the document. The excerpt comes from the PDF's own extracted text, so a full text search reaches words that never appear in the docket entry.
  • The case travels with the filing. CourtListener's document index returns no case name, court or judge. This Actor joins them back in so your export is usable without a second pass.
  • 235 courts, all verified. Every court in the picker was tested against the live index and returns filings. Nothing invented.
  • Availability is a first class filter. Turn it on and every row has a real PDF. Turn it off and you see the whole docket, including entries nobody has contributed yet.
  • Honest dates. PACER lets clerks type any year, and the archive stores it verbatim. A filing date more than a year in the future is reported as Not Disclosed rather than shipped as fact.
  • No key required. Runs anonymously out of the box. Add a free CourtListener token if you want to go faster.

πŸ“ˆ How it compares to alternatives

This ActorDocket level scrapersPACER directly
Unit of a rowOne filingOne caseOne page view
PDF linkYes, permanent public URLRarelyBehind a paid login
Page count before downloadYesNoNo
Text from inside the PDFYes, excerptNoNo
Cross district document searchYesCase level onlyNot supported
Case name, court and judge on a document rowYesNot applicableManual
Account neededNoneNonePACER account, ten cents a page
Documents covered17,342,712 with a PDF, of 493,413,653 entries indexedCases onlyEverything, at a cost

Honest limits, stated up front. RECAP is a crowd sourced mirror, so a document exists here only if someone already bought and contributed it: that is 17,342,712 PDFs out of 493,413,653 indexed entries. Sealed and restricted filings are not in the archive at all. Anonymous access to CourtListener is throttled at 5 requests per minute and 50 per hour, and each request carries 20 filings, so a very large export either uses a free API token or the proxy toggle.

πŸš€ How to use

  1. Create a free Apify account. New accounts get $5 in free usage credit: sign up here.
  2. Open the Actor and leave the default input in place for a first look. It returns filings matching the phrase "motion for summary judgment".
  3. Narrow it. Add a court, a party, an attorney, a nature of suit code or a date range. Or paste docket URLs into Docket URLs to pull every filing from specific cases.
  4. Decide on availability. Leave "Only filings with a PDF in RECAP" on for rows that all carry a working PDF link. Turn it off to see the complete docket.
  5. Set Max Items to how many filings you want. Free runs preview 10.
  6. Run it, then download the dataset as CSV, JSON, Excel or XML, or read it from the API.

πŸ’Ό Business use cases

πŸ“š Build a litigation document corpus

Search a phrase across every federal district at once, keep the rows whose pageCount fits your budget, and fetch the pdfUrl list. A single query for "motion for summary judgment" matches 1,260,519 filings with a PDF already in the archive.

πŸ” Reconstruct a case file

Paste a docket URL and get every filing in that case as its own row, in order, with page counts and links. What used to be an afternoon of clicking through PACER becomes one run.

πŸ“‘ Monitor a filing type, not a case

Watch for report and recommendation orders in one district, or for exhibits filed in patent cases, by combining the nature of suit code with the docket entry text filter. Schedule the run and diff the documentId column.

🧾 Due diligence on a counterparty

Search a company as partyName, read the actual briefs and orders filed against it, and cite the document rather than a summary. citedOpinionIds shows which precedents each filing leans on.

πŸ”Œ Automating CourtListener RECAP Documents Scraper

Schedule it in the Apify console and it will run daily, weekly or on a cron of your choice. Every finished run can push straight into your stack:

  • Make and Zapier for no code routing into a spreadsheet, a CRM or a matter management system.
  • Slack or email alerts when a new filing matches your query.
  • Google Drive or Dropbox to archive the exported CSV and the PDFs it points at.
  • Airbyte or Fivetran into a warehouse for document level analytics.
  • GitHub Actions to keep a versioned corpus in a repo.
  • Webhooks to hit your own service the moment a run finishes.

🌟 Beyond business use cases

  • Research. Empirical legal scholars can sample thousands of real motions and orders across districts, with page counts as a proxy for complexity.
  • Personal. Anyone party to a federal case can pull their own docket's filings without paying PACER for pages they already have a right to read.
  • Non-profit. Access to justice groups can assemble form banks of real pro se filings and the orders that answered them.
  • Experimentation. Machine learning teams get a clean, licence friendly corpus of legal documents with structured metadata attached, ready for retrieval augmented generation.

πŸ€– Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant to plan your run:

I am using the ParseForge CourtListener RECAP Documents Scraper on Apify. It returns one row per federal court filing from the RECAP archive, with 43 fields: the filing itself (type, docket entry text, document number, attachment number, entry date, page count, a public PDF link and a text excerpt from the PDF) and its parent case (case name, docket number, court, judge, nature of suit, cause, parties, attorneys, law firms). Inputs include a full text query, a court picker covering 235 federal courts, case name, docket number, party name, attorney name, nature of suit code, docket entry text, document number, attachment number, filed after and filed before dates, an availability toggle, and a list of docket URLs. Help me design the input for this goal: [describe what you want].

❓ Frequently Asked Questions

❓ What exactly is a RECAP document?

A single filing inside a federal court docket: one complaint, one motion, one order, one exhibit. RECAP is the Free Law Project's public archive of PACER records, built from documents that users of the RECAP browser extension have already purchased and shared.

❓ How is this different from a docket scraper?

A docket scraper gives you one row per case. This gives you one row per document inside the case. A case with fifty filings produces fifty rows here and one row there.

❓ Do I need a PACER or CourtListener account?

No. Everything comes from CourtListener's public API and public document storage. A free CourtListener API token is supported and only affects speed.

Yes, when isAvailable is Yes. The link points at storage.courtlistener.com and returns the PDF directly, for main documents and for attachments alike. When isAvailable is No, RECAP knows the entry exists but nobody has contributed the PDF, so pdfUrl is N/A.

❓ Why is availability on by default?

Because a row without a PDF has no page count, no text excerpt and nothing to download. The archive holds 17,342,712 documents with a PDF out of 493,413,653 indexed entries. Turn the toggle off when you want the full docket rather than only the retrievable parts.

❓ Why do some filings show a date like 3926?

PACER accepts whatever year a clerk types, and CourtListener stores the entry verbatim. Any entry date more than a year in the future is reported as Not Disclosed instead of being passed off as real. Sorting by entry date surfaces these first, which is why relevance is the default sort.

❓ Why are some case fields empty on newly filed cases?

Nature of suit, cause, jurisdiction type and jury demand are typed into PACER by the clerk and are often not yet indexed on a case filed in the last few weeks. They fill in later. That is source coverage, not a gap in the export.

❓ How many courts does it cover?

235, spanning federal district, bankruptcy, appellate and special courts. Every id in the court picker was tested against the live index and confirmed to return filings.

❓ Can I get the full text of a document, not just an excerpt?

The excerpt is what the public search API exposes. For the whole document, take pdfUrl from the row and download the PDF, then run it through any PDF text extractor.

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

Five filings with full case details take about five seconds and two requests. Anonymous access is throttled at 5 requests per minute and 50 per hour per IP, and each search request carries 20 filings, so unattended large exports should use a free CourtListener token or switch the proxy toggle on for a fresh IP per request.

❓ Why do I get fewer rows than Max Items?

Because the search ran out of matches. The count logged at the start of the run tells you the true size of the result set for your filters.

❓ Does it deduplicate?

Yes. Rows are keyed on the CourtListener document id, so a document that appears twice across cursor pages is written once.

❓ Does it cover state courts?

No. RECAP mirrors PACER, which is federal only. State court records are not part of this archive.

❓ What happens if a request fails?

The failing page is written as a single row containing only an error message, and that row is never billed. The run continues where it can.

πŸ”Œ Integrate with any app

Datasets export to CSV, JSON, JSONL, Excel and XML, and every run is reachable through the Apify API, webhooks, and the official JavaScript and Python clients. Anything that can read a URL can read your filings.

πŸ’‘ Pro Tip: browse the complete ParseForge collection for more court, government and public-records scrapers.

πŸ†˜ Need Help? Open our contact form

⚠️ 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 and public document storage. 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.