ParseJet

youtube-transcript-api geblokkeerd door YouTube? 4 fixes die werken

Je transcript-script werkt perfect op je laptop en valt vervolgens om zodra je het uitrolt naar AWS, GCP, Heroku of een serverless functie. Je doet niets fout — YouTube blokkeert systematisch verzoeken vanaf datacenter-IP-adressen. Hieronder lees je precies waarom dat gebeurt, en vier manieren om het op te lossen, van zelfgebouwde proxy's tot een beheerde API.

De fout: lokaal prima, in productie geblokkeerd

De Python-library youtube-transcript-api is verreweg de populairste manier om YouTube-transcripts programmatisch op te halen. Op je eigen machine werkt hij meestal vlekkeloos. Maar zodra je code op een cloudserver draait, beginnen de verzoeken te falen met excepties als IpBlocked, RequestBlocked of TooManyRequests — vaak met een melding die erop wijst dat YouTube je IP-adres blokkeert.

Hetzelfde overkomt elke aanpak die op scraping leunt: transcript-packages voor Node.js, ondertitels trekken met yt-dlp en zelfgebouwde scrapers lopen allemaal tegen dezelfde muur aan. De trigger is niet je code — het is de plek waar je verzoeken vandaan komen.

Draait je workload op AWS Lambda, Google Cloud Run, Vercel, Railway, Fly.io of een willekeurige VPS, dan ziet YouTube een datacenter-IP-adres. Die IP-reeksen zijn publiek bekend, worden massaal misbruikt door bots en gaan er in bulk uit. Residentiële verbindingen (zoals je wifi thuis) worden zelden geblokkeerd — daarom is "het werkt op mijn machine" hier letterlijk waar.

Waarom YouTube deze verzoeken blokkeert

YouTube-transcripts worden geserveerd door een intern, niet-geauthenticeerd endpoint dat nooit bedoeld is geweest voor gebruik door derden. Er is geen officiële publieke API om transcripts van willekeurige video's op te halen: het captions-endpoint van de officiële Data API vereist OAuth-toestemming van de eigenaar van de video, dus dat werkt alleen voor je eigen video's.

Omdat dat interne endpoint gratis en onbeveiligd is, wordt het platgelopen door AI-bedrijven, SEO-tools en scrapers. YouTube reageert op de enige manier die het heeft — agressieve rate limiting, het en bloc blokkeren van datacenter-IP-reeksen, en af en toe een wijziging aan het endpoint waardoor scraping-libraries van de ene op de andere dag stukgaan.

Elke zelfgehoste oplossing zit daarmee in een permanent kat-en-muisspel. De vier fixes hieronder staan op volgorde, van het meeste zelf bouwen tot het meest uit handen geven.

Fix 1: verzoeken via residentiële proxy's routeren

De standaard-doe-het-zelfoplossing is om je verzoeken via roterende residentiële proxy's te routeren, zodat YouTube gewone huishoudelijke IP-adressen ziet in plaats van je server. Recente versies van youtube-transcript-api ondersteunen dit rechtstreeks: geef bij het aanmaken van de client een proxyconfiguratie mee (de library heeft een WebshareProxyConfig-helper, of gebruik GenericProxyConfig met een willekeurige HTTP- of SOCKS-proxy).

Het werkt, maar het kost wat. Bandbreedte via residentiële proxy's is duur (al gauw een paar dollar per GB), de kwaliteit verschilt enorm per aanbieder, en je haalt er een nieuwe faalmodus mee binnen: als een proxy-IP midden in een verzoek geblokkeerd wordt, heb je retry-logica, health checks en failover tussen aanbieders nodig. Bij lage volumes is het bovendien vaak de traagste optie, omdat elk verzoek een extra hop door het proxynetwerk maakt.

Kies hiervoor als je volledige controle wilt, engineeringtijd hebt om het te onderhouden, en je volume hoog genoeg is om de opzet te rechtvaardigen.

Fix 2: de fetcher op een residentiële verbinding draaien

Een simpelere variant: draai het stuk van je pipeline dat transcripts ophaalt op een plek met een residentieel IP — een Raspberry Pi thuis, een machine op kantoor of een goedkope mini-pc — en laat die de resultaten via een queue of webhook naar je cloudinfrastructuur duwen.

Zo vermijd je proxykosten volledig, en voor kleine, persoonlijke workloads (video's transcriberen voor je eigen aantekeningen of een kleine nieuwsbrief) werkt het verrassend goed. De nadelen liggen voor de hand: het is een fysiek single point of failure, het schaalt niet, en het is een ongemakkelijke architectuur voor een productieproduct.

Fix 3: agressief cachen en netjes backoffen

Welke ophaalmethode je ook kiest, twee gewoonten drukken het aantal blokkades enorm. Ten eerste: cache elk transcript dat je ophaalt. Transcripts veranderen vrijwel nooit, dus er is geen enkele reden om dezelfde video twee keer op te halen. Eén simpele databasetabel met het video-ID als sleutel haalt het gros van je herhaalverkeer weg.

Ten tweede: behandel een blokkade als een signaal, niet als een fout om meteen opnieuw te proberen. Exponentiële backoff met jitter (wacht 1s, dan 2s, 4s, 8s...) houdt je onder de radar. Het endpoint blijven bestoken na een blokkade is de snelste manier om je hele IP-reeks te laten bannen.

Let wel: dit is verzachting, geen oplossing — op een datacenter-IP kan zelfs je allereerste verzoek al geblokkeerd worden. Combineer het met een van de drie andere fixes.

Fix 4: een gehoste transcript-API gebruiken (geen infra te onderhouden)

De beheerde optie: laat een dienst die het IP-probleem al heeft opgelost de transcripts voor je ophalen. ParseJet biedt één endpoint — POST /v1/parse/youtube met een video-URL — en geeft het volledige transcript terug, met de videotitel, het kanaal en de duur als JSON. De blokkades, het proxybeheer en de wijzigingen aan het endpoint worden server-side afgehandeld, dus jouw code is drie regels en blijft drie regels.

Migreren vanaf youtube-transcript-api kost een paar minuten: vervang de library-aanroep door één HTTP POST (werkt vanuit Python, Node.js of alles wat HTTP spreekt — inclusief serverless functies, precies waar de library-aanpak het snelst geblokkeerd wordt). Vraag een specifieke ondertiteltaal aan met de parameter language.

De gratis laag bevat 300 credits per maand (een YouTube-transcript kost 5 credits, dus 60 video's) en betaalde abonnementen beginnen bij $19/maand. Voor de meeste producten is dat goedkoper dan de bandbreedte van residentiële proxy's plus de engineeringtijd om het draaiend te houden.

Welke fix moet je kiezen?

Hobbyproject, laag volume, technisch onderlegd: fix 2 (een machine met een residentieel IP) is gratis en betrouwbaar genoeg.

Hoog volume met eigen infra-engineers: fix 1 (roterende residentiële proxy's) geeft je de meeste controle — reken op proxykosten en doorlopend onderhoud.

Productie-app, agent of RAG-pipeline waarin transcripts een feature zijn en niet je kernbusiness: fix 4 (gehoste API) — één HTTP-call, geen kat-en-muisspel. Leg er in alle gevallen fix 3 (cachen plus backoff) overheen.

Haal YouTube-transcripts op zonder IP-blokkades

Eén API-call levert het volledige transcript met de videometadata — vanaf elke server, serverless functie of agent. Geen proxy's om te beheren.

Probeer de transcript API gratis

Veelgestelde vragen

Waarom werkt youtube-transcript-api lokaal wel en op mijn server niet?

Je laptop gebruikt een residentieel IP-adres, en die blokkeert YouTube zelden. Cloudservers (AWS, GCP, Vercel, Heroku) gebruiken datacenter-IP's, die YouTube in bulk blokkeert. Er is niets mis met de library — het probleem is de IP-reeks.

Wat betekenen de fouten IpBlocked en RequestBlocked?

Dat zijn excepties van youtube-transcript-api die aangeven dat YouTube het verzoek heeft geweigerd op basis van de herkomst. Meestal staat je IP — of de hele reeks van je cloudprovider — op de blokkadelijst van YouTube. Direct opnieuw proberen vanaf hetzelfde IP helpt zelden.

Lossen proxy's de blokkades van youtube-transcript-api op?

Roterende residentiële proxy's werken meestal wel; datacenter-proxy's meestal niet, want die reeksen zijn ook geblokkeerd. De library ondersteunt proxyconfiguratie van huis uit. Reken wel op serieuze bandbreedtekosten en op geblokkeerde IP's waarvoor je retry-logica nodig hebt.

Bestaat er een officiële YouTube API voor transcripts?

Alleen voor video's die je zelf bezit: het captions-endpoint van de YouTube Data API vereist OAuth-toestemming van de eigenaar van de video. Er is geen officiële API om transcripts van willekeurige publieke video's op te halen — daarom leunt elke generieke oplossing op het interne endpoint.

Is er een gehoste YouTube transcript API met een gratis laag?

Ja. ParseJet levert transcripts via POST /v1/parse/youtube — 300 gratis credits per maand (60 video's à 5 credits), met betaalde abonnementen vanaf $19/maand. Het draait op beheerde infrastructuur, dus blokkades van datacenter-IP's zijn niet langer jouw probleem.

Start gratis met tekst extraheren

Geen aanmelding nodig. Parse je eerste bestand in seconden.

Bekijk Prijzen