YouTube transcripts via third-party transcript APIs (AssemblyAI / Supadata)
- Supadata's transcript API fully insulates the GitHub Actions runner from YouTube's IP block because the runner contacts only `api.supadata.ai` via HTTPS while Supadata's own infrastructure handles all downstream YouTube requests
- Supadata returns verbatim or near-verbatim transcript output: in Native mode it reproduces YouTube's own caption text word-for-word; in Auto/Generate fallback mode it uses ASR-class (automatic speech recognition) models equivalent to Whisper, not language-model paraphrase
- AssemblyAI does not bypass YouTube's cloud IP block, because its `audio_url` parameter requires a direct link to a downloadable audio file and explicitly does not support YouTube watch-page URLs, meaning the caller must first download audio via `yt-dlp` on the GitHub Actions runner
- The original item's assumption that AssemblyAI accepts YouTube URLs directly via `audio_url` is incorrect, as confirmed by AssemblyAI's official FAQ, which explicitly states that YouTube URLs are not supported and that the audio must be downloaded first
- Kagi's Universal Summarizer accepts YouTube URLs directly and processes them server-side, bypassing the IP block, but its output is a structured summary rather than a verbatim transcript, and YouTube URL support is marked "Experimental" in Kagi's documentation
- Supadata's free tier provides 100 credits per month with no credit card required, and at a research use case volume of a few videos per month, this free allocation is sufficient indefinitely without any paid upgrade
- Supadata's "Auto" mode is the recommended operational mode for the research workflow because it attempts to retrieve YouTube's native captions first and transparently falls back to AI (ASR-class) transcription when native captions are unavailable or blocked
- Integrating Supadata into the existing research tooling requires one new repository secret (`SUPADATA_API_KEY`) and one new fetcher function using the existing `httpx` client pattern; no additional Python dependency is required
Research Question
Can a third-party transcript API (AssemblyAI, Supadata, Kagi, or similar) retrieve YouTube transcripts from a GitHub Actions runner, bypassing YouTube's IP-based block on the internal transcript endpoint?
Findings
(Populated from §6 Synthesis above.)
Executive Summary
Supadata is the only third-party transcript API among the evaluated candidates that both bypasses YouTube's cloud IP block and returns verbatim transcript text, [inference] making it the correct implementation path for the research workflow. AssemblyAI does not bypass the IP block — it requires prior audio download via yt-dlp, which reintroduces the same cloud-IP restriction that blocks youtube-transcript-api — and the original premise that AssemblyAI accepts YouTube URLs directly is factually incorrect. Kagi's Universal Summarizer bypasses the IP block via server-side processing but produces summaries, not verbatim transcripts, making it a video-analysis tool rather than a transcript fetcher. Supadata's free tier (100 credits/month) covers the research volume comfortably, and integration requires only one new repository secret and one new fetcher function.
Key Findings
-
Supadata's transcript API fully insulates the GitHub Actions runner from YouTube's IP block because the runner contacts only
api.supadata.aivia HTTPS while Supadata's own infrastructure handles all downstream YouTube requests. [High confidence] -
Supadata returns verbatim or near-verbatim transcript output: in Native mode it reproduces YouTube's own caption text word-for-word; in Auto/Generate fallback mode it uses ASR-class (automatic speech recognition) models equivalent to Whisper, not language-model paraphrase. [High confidence]
-
AssemblyAI does not bypass YouTube's cloud IP block, because its
audio_urlparameter requires a direct link to a downloadable audio file and explicitly does not support YouTube watch-page URLs, meaning the caller must first download audio viayt-dlpon the GitHub Actions runner. [High confidence] -
The original item's assumption that AssemblyAI accepts YouTube URLs directly via
audio_urlis incorrect, as confirmed by AssemblyAI's official FAQ, which explicitly states that YouTube URLs are not supported and that the audio must be downloaded first. [High confidence] -
Kagi's Universal Summarizer accepts YouTube URLs directly and processes them server-side, bypassing the IP block, but its output is a structured summary rather than a verbatim transcript, and YouTube URL support is marked "Experimental" in Kagi's documentation. [High confidence]
-
Supadata's free tier provides 100 credits per month with no credit card required, and at a research use case volume of a few videos per month, [inference] this free allocation is sufficient indefinitely without any paid upgrade. [High confidence]
-
Supadata's "Auto" mode is the recommended operational mode for the research workflow because it attempts to retrieve YouTube's native captions first and transparently falls back to AI (ASR-class) transcription when native captions are unavailable or blocked. [Medium confidence]
-
Integrating Supadata into the existing research tooling requires one new repository secret (
SUPADATA_API_KEY) and one new fetcher function using the existinghttpxclient pattern; no additional Python dependency is required. [High confidence]
Assumptions
- Assumption: Research use case volume is approximately 5–20 videos per month. Justification: Derived from the pattern of research items in this repository — items reference individual YouTube videos, and the research loop processes a small number of items per session.
- Assumption: Supadata's Auto mode successfully returns transcripts when called from GitHub Actions cloud IPs. Justification: Supadata's documented architecture explicitly routes all YouTube access through its own servers, not the caller's IP. The architectural guarantee is stated in the documentation, but no live test has been run.
Analysis
Supadata is the only candidate that satisfies both the IP-bypass requirement (runner never contacts YouTube) and the output-quality requirement (verbatim or ASR-class near-verbatim text). The two other candidates fail on one criterion each: AssemblyAI fails on IP-bypass (because it requires a prior yt-dlp step), and Kagi fails on output type (summary, not verbatim).
The AssemblyAI finding is worth noting explicitly: the original item's premise was that AssemblyAI "transcribes via their own AI models" from a YouTube URL passed as audio_url. This was incorrect — AssemblyAI's API cannot accept a YouTube watch-page URL. Opinion: This is not a minor detail; it means AssemblyAI provides no architectural advantage over the existing three-tier fallback when used from GitHub Actions.
Gemini (completed item) and Kagi (this item) share the same architectural pattern — server-side YouTube retrieval, language-model output — and the same limitation: the output is not verbatim text. Supadata differs from both by using ASR (not LLM) for its fallback, which preserves verbatim fidelity.
Risks, Gaps, and Uncertainties
- Supadata's AI fallback (Auto/Generate modes) uses models described as "similar to Whisper" in secondary sources; this description was not confirmed in Supadata's primary documentation. If the AI fallback is a language model rather than ASR, verbatim quality claims would need revision.
- Supadata is a small commercial service with no publicly stated service-level agreement on the free tier. Discontinuation or pricing changes would break the workflow. Mitigation: retain the existing fallback chain as a safety net.
- The IP-block status of
yt-dlpCDN audio downloads from GitHub Actions runners remains unconfirmed. If a future test demonstrates thatyt-dlpaudio downloads succeed, AssemblyAI becomes viable as a higher-quality ASR alternative (at cost). - No live test of Supadata was run in this research item. Transcript quality for academic-talk audio (accents, technical vocabulary) has not been empirically verified against a known reference transcript.
Open Questions
-
Supadata credential approval:
SUPADATA_API_KEYis not in the approved credentials table inAGENTS.md. Should it be added? This is a hard stop before implementation — the credential must be approved by the owner before the fetcher is built. (This should become a new backlog item if the owner approves the addition.) -
Workflow integration approach: Should Supadata be integrated as a fourth tier in the existing
fetch-transcript.ymlworkflow, or should a new dedicated workflow be created? -
yt-dlp + AssemblyAI revisit: If a future experiment confirms that
yt-dlpCDN audio downloads succeed from GitHub Actions runners, AssemblyAI should be re-evaluated as a complement (higher ASR quality, paid) to Supadata (lower cost, free tier, comparable quality).
Open Questions
- Does Supadata's free tier cover the expected volume (a few videos per month)?
- Is verbatim transcript needed, or would a Kagi-quality structured summary suffice?
- How does transcript quality compare between Supadata (YouTube captions) and AssemblyAI (independent transcription)?