CourtListener RECAP Documents Scraper - PACER Filings
Pricing
from $2.26 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share

π 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 analysts | Pull every brief and order in a case as a PDF set |
| Legal AI and RAG teams | Build a corpus of real filings with text excerpts and page counts |
| Docket monitoring services | Watch for a filing type across a court, not just for new cases |
| Journalists and researchers | Find the specific document behind a story and link to it |
| Law librarians | Assemble teaching sets of motions, orders and exhibits |
| Compliance and risk teams | Read 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,
pdfUrlpoints atstorage.courtlistener.comand resolves to the real PDF with no login and no per page charge. - The text inside.
textSnippetis 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.
citedOpinionIdslists 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.
| Field | Type | Description |
|---|---|---|
π documentId | integer | CourtListener id of the document |
π shortDescription | string | Filing type, for example "Order on Motion for Summary Judgment" |
π description | string | The clerk's full docket entry text |
π url | string | CourtListener page for this filing |
π pdfUrl | string | Direct link to the PDF, or N/A when RECAP does not hold it |
β
isAvailable | string | Yes when the PDF is in the archive |
π documentType | string | PACER Document or Attachment |
π’ documentNumber | integer | Filing number inside the docket |
π attachmentNumber | integer | Attachment index, or N/A for a main document |
π isAttachment | string | Yes or No |
#οΈβ£ entryNumber | integer | Docket entry number |
π
entryDateFiled | string | Date the filing was entered, YYYY-MM-DD |
π pageCount | integer | Pages in the PDF |
π filepathLocal | string | Path of the document inside the RECAP archive |
π§Ύ pacerDocId | string | PACER's own document identifier |
π docketEntryId | integer | CourtListener id of the docket entry |
π dateAddedToRecap | string | Date the document entered the archive |
π docketId | integer | CourtListener id of the parent case |
βοΈ caseName | string | Case caption |
π’ docketNumber | string | PACER docket number |
π court | string | Court full name |
π· courtId | string | Court slug, for example mad |
π courtCitationString | string | Bluebook court abbreviation |
π docketUrl | string | CourtListener page for the whole case |
π
caseDateFiled | string | Date the case was filed |
π caseDateTerminated | string | Date the case closed, or N/A |
β³ isCasePending | string | Yes or No |
π©ββοΈ assignedTo | string | Assigned judge |
π assignedToId | integer | CourtListener judge id |
π¨ββοΈ referredTo | string | Magistrate or referring judge |
π suitNature | string | JS-44 nature of suit |
π cause | string | Statutory cause of action |
π jurisdictionType | string | Basis of federal jurisdiction |
π§ββοΈ juryDemand | string | Jury demand as recorded in PACER |
π chapter | string | Bankruptcy chapter, or N/A |
π§Ύ pacerCaseId | string | PACER's own case identifier |
π textSnippet | string | Excerpt of the document's extracted text |
β citedOpinionIds | array | Opinion ids the document cites |
π₯ parties | array | Parties to the case |
πΌ attorneys | array | Attorneys of record |
π’ lawFirms | array | Law firms of record |
π scrapedAt | string | ISO timestamp of the run |
β error | string | Set 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.
pdfUrlwas 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 Disclosedrather 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 Actor | Docket level scrapers | PACER directly | |
|---|---|---|---|
| Unit of a row | One filing | One case | One page view |
| PDF link | Yes, permanent public URL | Rarely | Behind a paid login |
| Page count before download | Yes | No | No |
| Text from inside the PDF | Yes, excerpt | No | No |
| Cross district document search | Yes | Case level only | Not supported |
| Case name, court and judge on a document row | Yes | Not applicable | Manual |
| Account needed | None | None | PACER account, ten cents a page |
| Documents covered | 17,342,712 with a PDF, of 493,413,653 entries indexed | Cases only | Everything, 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
- Create a free Apify account. New accounts get $5 in free usage credit: sign up here.
- Open the Actor and leave the default input in place for a first look. It returns filings matching the phrase "motion for summary judgment".
- 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.
- 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.
- Set Max Items to how many filings you want. Free runs preview 10.
- 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.
β Do the PDF links really work?
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.
π Recommended Actors
- CourtListener Civil Cases Scraper: the same archive at case level, filtered by nature of suit.
- CourtListener Bankruptcy Scraper: bankruptcy dockets across all 94 bankruptcy courts.
- CourtListener Adversary Proceedings Scraper: adversary suits filed inside bankruptcies.
- CourtListener Citation Scraper: reporter citations and the case law citation graph.
- CourtListener Judge Analytics Scraper: caseload and authorship analytics per judge.
π‘ 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.