BUILD GUIDE · EDUCATORS

How to publish accessible transcripts for every course video

A text transcript next to each video helps deaf and hard of hearing learners, non-native speakers and anyone who prefers reading. It also gives search engines text to index. Producing transcripts for a whole course catalogue is a quick batch job.

Who it's for
Accessibility offices, instructional designers, online schools
Build time
Afternoon
API endpoints
/batchasr_options.speakerLabelsformat.paragraphs

The problem it solves

Schools and course creators often have hundreds of videos with no transcripts, or only automatic captions that can't be read as a document. Accessibility offices receive accommodation requests one at a time. Publishing readable transcripts for everything removes the backlog and benefits every learner.

What to include in your first version

  • Transcripts for every video in a course or channel
  • AI speech recognition for videos without captions
  • Paragraphs and speaker labels for readability
  • HTML transcript pages that are easy to navigate with screen readers
  • Downloadable text and subtitle files

How to build it, step by step

  1. 01

    Inventory the videos

    Resolve each course playlist or channel to list every video that needs a transcript.

  2. 02

    Transcribe in bulk

    Send the IDs to /batch with format.paragraphs. Enable allow_asr with a webhook so videos without captions are transcribed by AI speech recognition.

  3. 03

    Improve readability

    For lectures with several speakers, use ASR speaker labels. Keep paragraph breaks and headings so transcripts read like documents.

  4. 04

    Publish

    Render each transcript as an HTML page or collapsible section below the video, with a download link.

Starter code

This idea is built on the "Recipe 3: Bulk-load a playlist into a knowledge base" pattern. Swap in your own channels, prompts and storage.

import requests

API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}

playlist = requests.post(f"{API}/playlists/resolve", headers=HEADERS,
                         json={"playlist_url": "https://www.youtube.com/playlist?list=PLAYLIST_ID",
                               "limit": 100}).json()

ids = [v["video_id"] for v in playlist["items"]]
batch = requests.post(f"{API}/batch", headers=HEADERS, json={
    "video_ids": ids,
    "format": {"timestamp": True, "paragraphs": True},
}).json()

# Large batches run async: poll GET /batch/{batch_id} until status is "completed"
for r in batch.get("results", []):
    if r["status"] == "completed":
        for p in r["data"]["transcript"].get("paragraphs") or []:
            store(video_id=r["video_id"], start=p["start"], text=p["text"])  # your vector DB

Why it's worth building

For institutions, the return is meeting accessibility obligations faster and making course content more usable and discoverable. Agencies and platforms can sell transcript publishing as a service to schools.

Mistakes to avoid

  • Publishing automatic captions as one unbroken block of text: format with paragraphs and speakers.
  • Hiding transcripts behind downloads only: put the text on the page so it's readable and indexable.
  • Assuming AI output is perfect: have someone spot-check technical terms and names, especially for required accommodations.

Questions about this idea

Do transcripts help video accessibility?

Yes. Transcripts give deaf and hard of hearing users and screen reader users full access to spoken content, and are recommended alongside captions by common accessibility guidelines.

Do transcripts help SEO?

Transcripts published as text on the page give search engines more relevant content to index than a video embed alone.

What if a video has no captions?

Enable AI speech recognition and the API transcribes the audio in any of 99 languages.

Start building today

10 free credits every month. No credit card needed.

How to Add Accessible Transcripts to Course Videos | YouTubeTranscript.dev