Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

zoom-transcript-scraper

Fetches the transcript from a password-protected Zoom cloud recording, even when you're not the meeting host and Zoom blocks the normal transcript export.

The problem

Zoom lets a meeting host download a recording's transcript as a .vtt file. If you were a participant but not the host, Zoom shows you the full transcript live in the recording page's "Audio Transcript" panel — but gives you no way to export it.

The approach

This tool drives a real (headless) browser to the recording's share URL, submits the passcode, and reconstructs a standards-compliant WebVTT file from what's rendered in the "Audio Transcript" panel — the same content you'd see and could laboriously copy-paste by hand, just automated and with correct speaker/timestamp structure preserved.

It only accesses recordings you're already authorized to view (you provide the real passcode) — it doesn't bypass, guess, or brute-force anything.

Install

Requires pipx (installs Python CLI tools into isolated environments, not your system Python):

brew install pipx   # if you don't already have it

Clone and install:

git clone git@github.com:jimloco/zoom-transcript-scraper.git
pipx install ./zoom-transcript-scraper

This puts a zoom-transcript-scraper command on your PATH (in ~/.local/bin), usable from any directory — no poetry needed afterward.

One-time browser setup (Playwright needs its own Chromium binary, separate from any browser you have installed). Use the playwright executable pipx placed inside the tool's own isolated venv — a bare python3 -m playwright won't work, since Playwright isn't installed on your system Python:

~/.local/pipx/venvs/zoom-transcript-scraper/bin/playwright install chromium

Behind a corporate TLS-inspecting proxy (e.g. ZScaler)? Both pipx install and playwright install chromium can fail with a certificate error, because they use their own bundled TLS stacks instead of your OS trust store. Fixes:

  • pipx install: prefix with UV_NATIVE_TLS=1
  • playwright install chromium: export the macOS Keychain to a PEM and point Node at it:
    security find-certificate -a -p /Library/Keychains/System.keychain > /tmp/roots.pem
    security find-certificate -a -p /System/Library/Keychains/SystemRootCertificates.keychain >> /tmp/roots.pem
    NODE_EXTRA_CA_CERTS=/tmp/roots.pem ~/.local/pipx/venvs/zoom-transcript-scraper/bin/playwright install chromium
    rm -f /tmp/roots.pem

Updating after a code change

pipx install copies the code into its own isolated venv, so it won't pick up source edits automatically:

pipx install ./zoom-transcript-scraper --force

Usage

zoom-transcript-scraper --url "<zoom recording share URL>" --password "<passcode>"

The .vtt file is written to the current directory by default. Example:

zoom-transcript-scraper \
  --url "https://your-company.zoom.us/rec/share/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  --password "abc123" \
  --output-dir ~/Downloads

Progress is printed to stderr as it runs (opening the page, submitting the passcode, waiting for the transcript panel, scraping entries); the final output path is printed to stdout on success.

Flags

Flag Required Description
--url yes Zoom recording share URL
--password yes Recording passcode
--output-dir no (default: .) Where to write the .vtt file (and --inspect artifacts, if used)
--debug no Run with a visible browser window instead of headless, for manual inspection
--inspect no Dump the page's DOM, network responses, console log, and a screenshot to <output-dir>/inspect_<timestamp>/ — useful if Zoom changes its page and something breaks

Output

The output filename follows Zoom's own recording-export naming convention, derived from the recording's true UTC start time (not the ambiguous, timezone-less local-time label shown on the page):

GMT{YYYYMMDD}-{HHMMSS}_Recording.transcript.vtt

Errors

Message Meaning
Zoom rejected the provided recording passcode... Wrong passcode — double check it
Timed out waiting for the transcript panel to render. The page didn't load as expected in time; try --debug --inspect to see what happened
This recording has no transcript available. The recording exists but has no transcript to fetch
Could not determine the recording's true UTC start time. Zoom's metadata API response wasn't captured; usually transient — retry

Claude Code skill

A Claude Code skill at ~/.claude/skills/zoom-transcript/SKILL.md lets Claude fetch transcripts on your behalf — just share a recording URL and passcode in conversation. It self-installs this tool via pipx the first time it's used if the command isn't already on your PATH.

Scope (v1)

  • One recording per run (no batch mode)
  • Passcode-only auth (no Zoom account/SSO login flow)
  • No GUI, no packaging/distribution beyond local pipx install

See docs/ for the full project charter, requirements, functional spec, and implementation spec.

Development

This project uses Poetry (not pipx) for local development — dependency management, tests, and linting:

poetry install
poetry run playwright install chromium
poetry run pytest              # tests
poetry run pylint src/zoom_transcript_scraper   # must stay at 10.00/10
poetry run tox                 # full CI-equivalent check

Run the CLI locally during development without a global install:

poetry run zoom-transcript-scraper --url "..." --password "..."

A note on Poetry isolation

poetry install can silently install into the wrong (shared, non-isolated) Python interpreter if Poetry itself was installed via plain pip install poetry into a project-reachable Python. After the first poetry install on a fresh clone, verify isolation actually worked:

poetry env info --path
poetry run python -c "import sys; print(sys.prefix != sys.base_prefix)"

The second command must print True. If it prints False, or the env path points at a shared Homebrew/system Python rather than something under .venv/, see workflow/actions/python-project-setup-workflow.md in the ai-native-development framework repo for the fix (reinstall Poetry itself via pipx).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages