CourtListener Oral Arguments Scraper - Court Audio
Pricing
from $3.62 / 1,000 results
CourtListener Oral Arguments Scraper - Court Audio
Scrape US courtroom oral argument recordings from CourtListener by court, judge, date and case, with MP3 links and transcripts. Export to CSV, JSON, Excel or XML.
Pricing
from $3.62 / 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 Oral Arguments Scraper
๐ Export US courtroom oral argument recordings in seconds. Pick a court, a judge or a date range and get one 27-field row per recording with a permanent MP3 link, the panel, the docket number and the machine transcript. The archive holds 103,018 recordings across 16 courts, and the Ninth Circuit alone accounts for 33,830 of them.
Appellate courts record their oral arguments and publish the audio, but each court posts it on its own website in its own layout, and the files disappear or move when the court reorganises its archive. CourtListener, run by the non-profit Free Law Project, collects those recordings, mirrors the MP3 on its own storage, runs speech to text over it, and exposes the lot through a public REST API. This Actor queries that API, flattens each recording into one row, and hands you the audio link, the case it belongs to and the transcript in a single export.
Coverage measured on 2026-09-08: 103,018 recordings, from the Supreme Court of the United States, all thirteen federal circuits, the Illinois Supreme Court and the Illinois Appellate Court. The oldest argument in the index was recorded in 1969 and the newest is added within hours. Every row carries 27 fields, and every recording carries a machine transcript that runs from roughly 19,000 to 34,000 characters on a typical thirty-minute argument.
| ๐ฏ Target Audience | ๐ก Primary Use Cases |
|---|---|
| Appellate litigators | Hear how a panel questioned counsel before you argue in front of it |
| Legal tech and AI teams | Transcript corpora with case, court, panel and date metadata attached |
| Law schools and clinics | Build a moot court library filtered by circuit, judge or subject |
| Journalists and podcasters | Pull the audio of a newsworthy argument the day it happens |
| Judicial analytics vendors | Argument length, panel composition and cadence, court by court |
๐ What the CourtListener Oral Arguments Scraper does
๐ก Why it matters: the audio exists, but it is scattered.
cdn.ca9.uscourts.govnames files by docket number with no index, the Supreme Court publishes a separate MP3 page per term, and none of them tell you who sat on the panel or what was said. This Actor turns that scatter into rows: search across all 16 courts at once, filter by judge or date, get a permanent mirrored MP3 URL that does not rot when the court reorganises, and take the transcript with it.
- Search 103,018 oral argument recordings by court, judge, case name, docket number, argument date or full text.
- Full-text search runs over the transcript, so a phrase a judge actually said is a query.
- Two audio links per row: the court's own file and CourtListener's permanent mirror on
storage.courtlistener.com. - Panel names and CourtListener judge IDs where the court publishes them.
- The opening of the machine transcript on every row, and the complete transcript on request.
- Duration in seconds and as H:MM:SS, plus file size in bytes and megabytes.
- Stable IDs (recording ID, docket ID, SHA-1 of the audio file) so runs can be diffed and deduplicated.
- Export to CSV, Excel, JSON or XML, or pull the dataset straight from the Apify API.
๐ฌ Full Demo (๐ง Coming soon)
A walkthrough video is on the way.
๐ Output
One row per oral argument recording.
| Field | Description |
|---|---|
โ๏ธ caseName | Case caption as the court published it |
๐ url | Recording page on courtlistener.com, with the in-browser player |
๐ id | CourtListener recording ID, stable across runs |
๐ court / ๐ท courtId / ๐ courtCitationString | Court name, CourtListener court ID (for example ca9), reporter-style abbreviation |
๐ข docketNumber | Appellate docket number, for example 25-5252 |
๐
dateArgued | Date the argument was heard |
โฑ durationSeconds / ๐ฐ durationFormatted | Length of the recording in seconds and as H:MM:SS |
๐ง audioUrl | CourtListener's permanent MP3 mirror on storage.courtlistener.com |
๐ฅ sourceAudioUrl | The MP3 on the court's own server, which courts do reorganise |
๐งฎ fileSizeBytes / ๐พ fileSizeMb | Size of the MP3 |
๐ฉโโ๏ธ judges / judgeIds / ๐ข judgeCount | Panel as the court named it, the CourtListener judge IDs, and the panel size |
๐ hasTranscript | Yes when CourtListener has speech-to-text for the recording |
๐ฃ transcriptExcerpt | The opening of the transcript, roughly 500 characters |
๐ transcript / transcriptCharacters | The complete transcript and its length, only when the transcript option is on |
๐ docketId / ๐ docketUrl | The docket the recording hangs off, and its page |
๐งพ pacerCaseId | PACER's internal case ID, where the court supplies one |
๐ sourceCode | CourtListener's provenance code for the file, for example C for the court's own website |
๐ sha1 | SHA-1 of the audio file, for change detection |
๐ dateAdded | When the recording entered CourtListener |
๐ scrapedAt | ISO timestamp of the collection |
โ error | null on success; error rows carry only this field and are never charged |
Three real records from a run against the Ninth Circuit, newest first. The transcriptExcerpt values are shortened here for readability; the Actor returns them in full.
[{"caseName": "Natalia Golban v. Todd Blanche","url": "https://www.courtlistener.com/audio/106164/natalia-golban-v-todd-blanche/","id": 106164,"court": "Court of Appeals for the Ninth Circuit","courtId": "ca9","courtCitationString": "9th Cir.","docketNumber": "15-73093","dateArgued": "2026-09-03","durationSeconds": 1361,"durationFormatted": "0:22:41","audioUrl": "https://storage.courtlistener.com/mp3/2026/09/03/natalia_golban_v._todd_blanche_cl.mp3","sourceAudioUrl": "https://cdn.ca9.uscourts.gov/datastore/media/2026/09/03/15-73093.mp3","fileSizeBytes": 8240697,"fileSizeMb": 7.86,"judges": "THOMAS, GOULD, BYBEE","judgeIds": "488; 1254; 3205","judgeCount": 3,"hasTranscript": "Yes","transcriptExcerpt": "May it please the Court, my name is Sergei Shevchenko, I'm a counsel for the petitioner Natalia Golban, and I would like to reserve two minutes for rebuttal. Manage your own time. Thank you, Your Honor. ...","docketId": 74746630,"docketUrl": "https://www.courtlistener.com/docket/74746630/","pacerCaseId": "Not Disclosed","sourceCode": "C","sha1": "c7c69119451b4b666e916ebd38c4fec5ea33a4ce","dateAdded": "2026-09-03T19:31:29.136135Z","scrapedAt": "2026-09-08T05:29:59.724Z","error": null},{"caseName": "Rushing v. Williams-Sonoma, Inc.","url": "https://www.courtlistener.com/audio/106163/rushing-v-williams-sonoma-inc/","id": 106163,"court": "Court of Appeals for the Ninth Circuit","courtId": "ca9","courtCitationString": "9th Cir.","docketNumber": "25-5252","dateArgued": "2026-09-03","durationSeconds": 1839,"durationFormatted": "0:30:39","audioUrl": "https://storage.courtlistener.com/mp3/2026/09/03/rushing_v._williams-sonoma_inc._cl.mp3","sourceAudioUrl": "https://cdn.ca9.uscourts.gov/datastore/media/2026/09/03/25-5252.mp3","fileSizeBytes": 11108315,"fileSizeMb": 10.59,"judges": "THOMAS, GOULD, BYBEE","judgeIds": "488; 1254; 3205","judgeCount": 3,"hasTranscript": "Yes","transcriptExcerpt": "Good morning. May it please the Court, Craig Cardone on behalf of Williams-Sonoma, and I would like to reserve four minutes for rebuttal. Now, notwithstanding the numerous exemplars and webpages ...","docketId": 74746627,"docketUrl": "https://www.courtlistener.com/docket/74746627/","pacerCaseId": "Not Disclosed","sourceCode": "C","sha1": "ba28ef2e363371a685018245c03ab07fe627d43d","dateAdded": "2026-09-03T19:31:26.489099Z","scrapedAt": "2026-09-08T05:29:59.724Z","error": null},{"caseName": "Montenegro v. CVS Pharmacy, Inc.","url": "https://www.courtlistener.com/audio/106156/montenegro-v-cvs-pharmacy-inc/","id": 106156,"court": "Court of Appeals for the Ninth Circuit","courtId": "ca9","courtCitationString": "9th Cir.","docketNumber": "24-6404","dateArgued": "2026-09-02","durationSeconds": 2095,"durationFormatted": "0:34:55","audioUrl": "https://storage.courtlistener.com/mp3/2026/09/02/montenegro_v._cvs_pharmacy_inc._cl.mp3","sourceAudioUrl": "https://cdn.ca9.uscourts.gov/datastore/media/2026/09/02/24-6404.mp3","fileSizeBytes": 12643531,"fileSizeMb": 12.06,"judges": "THOMAS, BYBEE, BRESS","judgeIds": "488; 3205; 14459","judgeCount": 3,"hasTranscript": "Yes","transcriptExcerpt": "Good morning. May it please the court, Brent Wisner on behalf of the appellants. If the court would allow, I'd like to reserve three minutes for rebuttal. The ACME monograph prohibits the sale ...","docketId": 74740849,"docketUrl": "https://www.courtlistener.com/docket/74740849/","pacerCaseId": "Not Disclosed","sourceCode": "C","sha1": "e7889f30d110f07c7b91c0ee5bfb8fe730382a42","dateAdded": "2026-09-02T20:31:42.029387Z","scrapedAt": "2026-09-08T05:29:59.724Z","error": null}]
โจ Why choose this Actor
| What you get | |
|---|---|
| All 16 courts in one query | SCOTUS, all thirteen federal circuits, the Illinois Supreme Court and the Illinois Appellate Court. Those 16 ids were queried together on 2026-09-08 and returned all 103,018 recordings, so the court list in the input is the whole archive, not a sample. |
| Audio that does not rot | Every row carries CourtListener's permanent mirror on storage.courtlistener.com next to the court's own URL. The mirror was verified to answer HTTP 200 with audio/mpeg and a byte length equal to the fileSizeBytes column. |
| Search inside what was said | The full-text query runs over the machine transcript, not just the caption. Searching a phrase from the bench is a supported query. |
| The whole transcript, on request | Each row carries roughly the first 500 characters. Turn on the transcript option and you get the complete text, 19,000 to 34,000 characters on a typical argument, plus a character count. |
| The panel, where the court names it | judges and judgeIds come straight from CourtListener. The Ninth Circuit names its panel on every recording; across the whole archive it is about one recording in four, and the field says Not Disclosed rather than guessing. |
| 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. Duplicates are dropped before billing, never after. |
๐ How it compares to alternatives
| This Actor | Court websites | Generic CourtListener actors | |
|---|---|---|---|
| Courts in one query | 16, the whole archive | One per site | Usually opinions and dockets, audio rarely |
| Search by what was said | Yes, over the transcript | No | No |
| Permanent audio link | Mirror plus the court's own URL | Court URL only, and it moves | Sometimes the court URL |
| Panel names and judge IDs | On the row where published | Rarely | Rarely |
| Full transcript | Opt-in, complete | Not published | No |
| Rows a free account can preview | 10 | Not applicable | Varies |
| Ceiling | Anonymous API throttle of 5 requests a minute per IP, lifted by a free key or the proxy; 20 rows per request, no page-size control | Manual browsing | Same source, same ceiling |
๐ How to use
- Create a free Apify account with $5 in credit.
- Open the CourtListener Oral Arguments Scraper.
- Pick one or more courts, set a date range or a search phrase, and click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
One typical run: courts ["ca9"], arguedAfter 01/01/2026, orderBy dateArgued desc, maxItems 200. Run it programmatically through the Apify API or the ApifyClient for JavaScript and Python.
๐ผ Business use cases
๐๏ธ Prepare for a panel before you argue
Filter by court and judge surname, sort by argument date, and pull the last two years of recordings for the panel you are about to face. The transcript column makes the questions searchable, so an appellate team can see how a specific judge presses on standing or on harmless error before writing the reply brief.
๐ง Build a legal speech corpus
Every row pairs an MP3 URL with a transcript, a court, a date and a docket number. AI teams use it to fine-tune legal speech models, to benchmark their own speech-to-text against CourtListener's, or to ground a retrieval system in what was argued rather than what was written.
๐ฐ Cover an argument the day it happens
Run it on a schedule against a court, sort newest first, and diff against the previous run. Newsrooms and legal podcasters get the audio link and the opening exchange within hours of the argument, without watching fourteen court websites.
๐ Measure how courts actually work
durationSeconds, judgeCount, dateArgued and courtId on every row turn into argument-length distributions by circuit, panel composition over time, or the gap between argument and decision when joined to a docket export.
๐ Automating CourtListener Oral Arguments Scraper
- Make / Zapier: trigger a run on a schedule, then push new recordings to a CRM, a Google Sheet or a Slack channel.
- Slack: post each new case caption, court and audio link to a practice-group 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 arguments.
- Google Drive: drop the CSV or Excel export into a shared folder, with the MP3 links ready to click.
๐ Beyond business use cases
- Research: compare argument length and panel composition across circuits, or track how often a court hears argument at all.
- Personal: listen to the argument in a case you are following, straight from a link in a spreadsheet.
- Non-profit: build an accessible, searchable archive of arguments in the areas of law you work in.
- Experimentation: train a speaker-diarisation model, or index the transcripts for a question-answering demo.
๐ค Ask an AI assistant about this scraper
Give an AI agent live access to US oral argument recordings through the Model Context Protocol:
$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/courtlistener-oral-arguments-scraper"
Then prompt it in plain language:
- "Find Ninth Circuit arguments heard this month and give me the audio links."
- "Which Federal Circuit arguments mention claim construction, and how long were they?"
- "Pull every Supreme Court argument from last term with its transcript."
Copy this into ChatGPT, Claude, or Cursor to start:
Use the Apify Actor "parseforge/courtlistener-oral-arguments-scraper" to search US oral argument recordings. Input: { "query": "<phrase>", "courts": ["ca9"], "judge": "<surname>", "arguedAfter": "MM/DD/YYYY", "arguedBefore": "MM/DD/YYYY", "docketNumber": "<number>", "includeTranscript": true, "maxItems": <n> }. It returns case name, court, docket number, argument date, duration, two MP3 links, the panel and the transcript per row. Call it with the ApifyClient and my APIFY_TOKEN.
โ Frequently Asked Questions
โ Do I need a CourtListener account?
No. The oral argument API is open to anonymous callers. A free CourtListener API key is optional and only lifts the rate limit, which makes long runs faster.
โ Which courts are covered?
Sixteen: the Supreme Court of the United States, the First through Eleventh Circuits, the D.C. Circuit, the Federal Circuit, the Illinois Supreme Court and the Illinois Appellate Court. Those sixteen hold every recording in the index, verified by querying them together and getting the full 103,018 back. No federal district court and no other state court publishes argument audio through CourtListener today.
โ How far back does the archive go?
The oldest recording is dated 1969 and there are only a handful before 2005. The bulk of the archive is 2005 onwards, and 37,837 arguments were heard in 2020 or later.
โ Can I download the audio?
The row gives you two URLs. audioUrl is CourtListener's own mirror and is the one to use in a pipeline: it answers HTTP 200 with audio/mpeg and does not move when a court reorganises. sourceAudioUrl is the court's original file. The Actor returns links, not the audio bytes, so your storage bill stays yours.
โ How good are the transcripts?
They are machine transcripts produced by CourtListener, not certified court reporting. They are accurate enough to search and to feed a model, and wrong often enough that you should not quote one without listening. hasTranscript tells you whether text exists for a recording.
โ Why is the transcript column empty on my run?
The full transcript is opt-in. Turn on Include the full transcript and each row gains transcript and transcriptCharacters. Without it every row still carries transcriptExcerpt, roughly the first 500 characters.
โ Why does the transcript option make runs slower?
CourtListener has no bulk endpoint for transcripts, so the Actor fetches one per recording. Anonymously that runs into the 5 requests a minute throttle quickly. Add a free API key or turn the proxy on before pulling transcripts in volume.
โ Why do some rows say Not Disclosed for the judges?
Because the court did not publish the panel with the recording. Across the archive about one recording in four names its panel; the Ninth Circuit names it on every one. The Actor never guesses a panel, so the sentinel is the honest answer.
โ Why am I getting no results?
Every filter is ANDed. A court plus a judge surname plus a narrow date range can easily match nothing. Drop a filter or widen the dates. The log prints the total CourtListener reports for your search, which tells you immediately whether the query itself is empty.
โ How fast is it, and what is the ceiling?
Each request returns 20 rows and takes about a second. There is no page-size parameter, so 1,000 rows means 50 requests. Anonymously CourtListener allows 5 requests a minute per IP; the Actor waits out Retry-After when it is throttled, rotates the proxy session when the proxy is on, and skips the limit entirely with an API key.
โ Does it deduplicate?
Yes, on the CourtListener recording ID, before the row is written and before it is charged. A recording re-published under a second docket number is delivered once.
โ Why fewer rows than Max Items?
Because the search ran out of matches. maxItems is a cap, not a target. Free accounts are also capped at 10 rows per run as a preview.
โ How fresh is the data?
The Ninth Circuit sample above was collected five days after the arguments were heard, and CourtListener typically indexes a recording within hours of the court posting it. dateAdded on every row tells you exactly when it landed.
โ Am I charged for failed requests?
No. Error rows carry only the error field and are pushed without a charge event. You pay per delivered recording.
๐ 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 Civil Cases Scraper: federal civil dockets by nature of suit, with parties, counsel and firms.
- CourtListener Scraper: all six CourtListener indexes, including judges and dockets.
- CourtListener Opinions Scraper: full opinion text, walked by court feed.
- CourtListener Business Bankruptcy Scraper: US business bankruptcy filings by chapter and court.
- Justia Case Law Scraper: published opinions from Justia by court and year.
๐ก Pro Tip: browse the complete ParseForge collection for more court, government and public-records scrapers.
๐ Need Help? Open our contact form 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 and the audio in compliance with CourtListener's terms and applicable laws. Court recordings capture real people speaking: do not use them to identify, profile, or target individuals.