youtube-transcript-to-pdf

Chrome Web Store Listing — Transcript to PDF for YouTube

Last Updated: 2026-08-27 Submission status: not yet submitted. See Blockers.

Store Listing

Extension Name

Transcript to PDF for YouTube

Short Description (117 characters)

Turn any YouTube video’s transcript into a formatted PDF. Runs entirely in your browser — no server, no account.

Detailed Description

Export the transcript of any YouTube video as a clean, formatted PDF, without uploading anything to anyone.

Paste a link — watch?v=, youtu.be, /shorts/, /embed/, /live/, or just the video ID — or let the extension read the video you already have open. Choose the caption language from whatever the video offers, including auto-generated tracks, then export.

What you get:

A PDF with the video’s title, channel, and source URL, and the transcript grouped into readable paragraphs rather than a wall of one-line caption cues. Timestamps are optional, and so is the paragraph grouping, so you can also get raw cues if that is what you need.

A Print option that renders through Chrome instead. Use this for Japanese, Chinese, Korean, Russian, Arabic, Greek, Hebrew, and any other script — the built-in PDF writer handles Latin text only, and the Print path handles everything.

A Copy button, if you would rather paste the text somewhere than save a file.

How to use it:

  1. Open a YouTube video, or copy its link.
  2. Click the extension. If you are already on a video, the link is filled in for you.
  3. Click Get. The transcript appears in a preview.
  4. Click Download PDF, or Print for non-Latin scripts.

About privacy:

This extension has no server, no account, no analytics, and no third-party code. Your transcripts never leave your computer — the PDF is generated in your browser and saved directly to your downloads. The only site the extension can reach is youtube.com, and it requests pages without your cookies attached, so it cannot see who you are on YouTube or act on your behalf.

A note on how it works:

Since 2024, YouTube requires a browser-issued token on caption downloads. When a direct request is refused, the extension falls back to reading the transcript panel that YouTube itself renders — which sometimes means briefly opening the video in a background tab and closing it again. If a tab is already open on that video, that tab is reused instead.

Videos without captions cannot produce a transcript; there is no speech-to-text. Age-restricted and private videos are not accessible.

Support and source:

The extension is open source under the MIT licence. Report a problem or read the code at https://github.com/mithudso/youtube-transcript-to-pdf

Category

Productivity

Single Purpose

Exports the transcript of a YouTube video as a PDF file.

Primary Language

English

Graphics & Assets

All generated by scripts/build-store-assets.mjs followed by scripts/compose-store-screenshots.py. Sources live in store-assets/.

Asset Dimensions Status Filename
Store Icon [REQUIRED] 128×128 PNG ✅ Ready icons/icon-128.png
Screenshot 1 [REQUIRED] 1280×800 ✅ Ready (live capture) store-assets/screenshot-1-popup.png
Screenshot 2 [RECOMMENDED] 1280×800 ✅ Ready store-assets/screenshot-2-pdf.png
Screenshot 3 [RECOMMENDED] 1280×800 ✅ Ready store-assets/screenshot-3-viewer.png
Screenshot 4 1280×800 ⬜ Not created  
Screenshot 5 1280×800 ⬜ Not created  
Small Promo Tile [RECOMMENDED] 440×280 ✅ Ready store-assets/promo-tile-small.png
Marquee Promo Tile 1400×560 ⬜ Not created  

The icon is generated by scripts/generate-icons.py: a white page with a turned-down corner and lines of text, on the project’s red field. It replaced an earlier play-triangle mark that read as YouTube’s logo.

Screenshot Notes

  1. The popup, mid-export. The real popup markup and stylesheet with a transcript loaded, showing the language picker, the formatting toggles, the preview, and the three actions.
  2. The exported PDF. Page one of a document produced by the shipping PDF writer, showing the title block and timestamped paragraphs.
  3. The Print path. The printable viewer, which is how non-Latin scripts are exported.

Provenance. Screenshot 1 is a capture of the running extension, taken by hand from a real export and cropped to the popup alone — no browser chrome, no tabs, no personalised page content. It shows a genuine run: 255 caption lines, auto-generated captions, resolved via the transcript panel.

Screenshots 2 and 3 are rendered from the extension’s own markup, stylesheets, and PDF writer, so the document and the print view are genuine output. Their transcript text is authored sample content (store-assets/sample-transcript.json), written for this repository so the assets carry no third-party material.

Screenshot 1 was recaptured from a clean screenshot rather than the screen recording, so the popup’s colours match the real UI — the earlier frame was taken with a capture overlay active and read muted.

Permissions Justification

Plain-text versions ready to paste into the dashboard are in Paste-ready permission justifications below. Use those, not this table — the pipes and backticks here are markdown.

Permission Type Justification
tabs permissions Reads the URL of the active tab so the extension can prefill the input with the video the user is already watching, and searches open tabs for one already showing the requested video so it can reuse that tab instead of opening another. Tab URLs are used in memory only and are never stored or transmitted.
scripting permissions Injects a single content script into a YouTube video tab, on demand, to read the transcript panel. This is required because YouTube refuses direct caption downloads that lack a browser-issued token, so the only reliable source is the panel YouTube renders itself. The script is not declared in the manifest and therefore never runs unless the user has asked for a transcript.
storage permissions Stores two booleans — whether timestamps and paragraph grouping are enabled — so the user’s formatting choices survive closing the popup. Also used to pass the transcript from the popup to the printable page, where it is deleted immediately after rendering. Local only; chrome.storage.sync is not used.
downloads permissions Saves the generated PDF to the user’s downloads folder. This is the extension’s primary output and there is no other way to write the file.
https://www.youtube.com/* host_permissions Fetches the video’s watch page, which carries the title, channel, and caption track list, and fetches the caption track itself. Also the page into which the transcript reader is injected.
https://m.youtube.com/* host_permissions The same, for users whose open tab is on the mobile YouTube host, so an already-open tab can be reused rather than opening a duplicate.

The extension deliberately does not request <all_urls>, cookies, webRequest, history, identity, or nativeMessaging. A youtu.be host permission was removed during development once it was confirmed that all URLs are normalised to youtube.com before any request is made.

Paste-ready permission justifications

The dashboard’s justification fields are plain text. Paste from here, not from the table above — the table’s pipes and backticks are markdown and show up literally in the form.

There is one box per permissions entry, and a single combined box for all host permissions.

tabs

Reads the URL of the active tab so the extension can prefill the input with the video the user is already watching, and searches open tabs for one already showing the requested video so it can reuse that tab instead of opening another. Tab URLs are used in memory only and are never stored or transmitted.

scripting

Injects a single content script into a YouTube video tab, on demand, to read the transcript panel. This is required because YouTube refuses direct caption downloads that lack a browser-issued token, so the only reliable source is the panel YouTube renders itself. The script is not declared in the manifest and never runs unless the user has asked for a transcript.

storage

Stores two booleans - whether timestamps and paragraph grouping are enabled - so the user’s formatting choices survive closing the popup. Also used to pass the transcript from the popup to the printable page, where it is deleted immediately after rendering. Storage is local only; chrome.storage.sync is not used, so nothing is uploaded to a Google account.

downloads

Saves the generated PDF to the user’s downloads folder. This is the extension’s primary output and there is no other way to write the file.

Host permission (one box, covers both hosts)

The extension fetches the YouTube watch page for the video the user asks about, which carries the title, the channel, and the list of available caption tracks, and then fetches the caption track itself. That same page is where the transcript reader is injected when YouTube refuses a direct caption download. www.youtube.com is the desktop host that serves video pages. m.youtube.com is requested only so that a tab the user already has open on the mobile host can be reused instead of opening a duplicate. No other host is requested, and the extension cannot reach any other site.

Privacy & Data Use

Data Collection

Does the extension collect user data? No.

Data Type Collected? Transmitted Off-Device? Purpose Shared with Third Parties?
Personally identifiable info No No No
Health info No No No
Financial info No No No
Authentication info No No No
Personal communications No No No
Location No No No
Web history No No No
User activity No No No
Website content No No No

Notes for the reviewer. The extension reads the active tab’s URL and the content of YouTube watch pages in order to function, but neither is collected: both are used transiently in memory and neither is stored or transmitted anywhere. The only network destination is youtube.com, and requests are made with credentials: 'omit', so the user’s YouTube session is never attached. The extension contains no analytics, no error reporting, no remote code, and no third-party dependencies.

Data Use Certification

Privacy Policy

Privacy Policy URL

https://mithudso.github.io/youtube-transcript-to-pdf/PRIVACY.html

Verified live and serving the policy (HTTP 200) on 2026-08-27. Source: PRIVACY.md, published via GitHub Pages from main.

Distribution

Visibility: Public Regions: All regions Pricing: Free

Developer Info

Publisher Name: Mitchell Hudson

Contact Email: mitch@tsiser.net

Support URL: https://github.com/mithudso/youtube-transcript-to-pdf/issues

Homepage URL: https://github.com/mithudso/youtube-transcript-to-pdf

Version History

Store-assigned item ID: jpjnpjipphcgjgmabbgenoaepojffkle

This differs from the unpacked development ID and is permanent for this listing.

Version Date Changes Status
1.0.0 2026-08-27 Initial listing. Package uploaded, listing and privacy tabs filled. Draft

Review Notes

Blockers before first submission

All cleared.

  1. Publisher name and contact email are unset. Set — see Developer Info.
  2. The icon is a trademark risk. Replaced. The original mark was a white play triangle on a red field, which read as YouTube’s play-button logo; the store’s guidelines prohibit using another company’s logo, and closely evoking one is a plausible rejection. The icon is now a document — a page with a turned-down corner and lines of text — generated by scripts/generate-icons.py. Text lines are dropped below 32px, where they would blur, leaving a silhouette that still reads at 16px.
  3. The name begins with a trademark. Renamed from “YouTube Transcript to PDF” to “Transcript to PDF for YouTube”. Leading with the trademark reads as first-party; “for YouTube” reads as compatibility, which is the accepted construction. Changed in manifest.json, this file, README.md, PRIVACY.md, docs/INSTALLATION.md, and the PDF Producer string.
  4. Recapture screenshot 1 from a live install. Done. The extension was run end to end against a real video and the popup captured live; screenshot 1 is that capture. See Screenshot Notes.

Verified end to end

The extension was run against a real video before submission: the transcript resolved via the transcript-panel strategy (255 lines, auto-generated captions), the PDF downloaded, and the print path rendered. Screenshot 1 is a capture from that run.

Known Issues / Limitations

Worth stating up front to a reviewer, since each could otherwise look like a defect:

Rejection History

None — not yet submitted.