All tutorials

How to scrape YouTube transcripts with Node.js (2026)

A Node.js walkthrough for GET /v1/youtube/videos/transcript. Copy the snippet, run it, then read the JSON.

GET /v1/youtube/videos/transcript · 1 credit per successful request.

Also available in

You'll pull a YouTube transcript from a public video URL and see the text you get back.

Example job: turn a public YouTube video into text for search or alerts.

Get ready

Get a Social Fetch API key and a Node.js environment ready. New accounts include 100 free credits.

  • API key. Create a Social Fetch account and copy an API key. New accounts include 100 free credits.

  • Node.js setup. Node 18+ (native fetch). Export SOCIALFETCH_API_KEY.

When you're done, SOCIALFETCH_API_KEY is set in your shell.

Make the request

Copy the Node.js snippet, set SOCIALFETCH_API_KEY, and call GET /v1/youtube/videos/transcript with the x-api-key header. Example: /v1/youtube/videos/transcript?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DdQw4w9WgXcQ.

Request
Node.js

You should see HTTP 200 and a JSON body. Native fetch does not throw on 4xx/5xx, so check response.ok before parsing.

Read the response

JSON with data (the transcripts) and meta (creditsCharged, requestId). Sample below is illustrative — field docs live on the endpoint page. Credits charge on completed lookups, not transport failures.

Request
Sample response

Check data.lookupStatus when present. Keep meta.requestId if a row looks wrong.

no useAiFallback on this route. Missing captions = not_found, not STT. Don't discard segments if you need timed citations.

You finished

Same path and credits in playground, docs, and production. Pick a next step below.

Common questions

Do I need an official YouTube developer account?

No. Social Fetch authenticates with your Social Fetch API key. You call GET /v1/youtube/videos/transcript and we handle upstream access. You still need to follow each platform's terms for how you use public data.

What does the youtube transcripts endpoint return?

A JSON envelope with data (the transcripts) and meta (creditsCharged, requestId). Shape details and field docs live on the endpoint page and in the OpenAPI docs.

Should I use plainText or segments from a YouTube transcript?

Use plainText when you need one string for embeddings or full-text search. Use segments when you need timed lines (text, startMs, endMs) for citations or a scrubber UI. Both arrive under data.transcript on a found lookup.

Does YouTube transcript lookup run speech-to-text when captions are missing?

No. This route returns caption tracks when they exist. not_found means no track was available — it does not invent speech text. Watch links, youtu.be, and Shorts URLs are all accepted formats.

How much does a successful request cost?

1 credit per successful request.

Is this okay for production?

Yes — same production API as everywhere else: typed errors, requestId on every response, credits charged only on completed lookups. New accounts get 100 free credits.

Any Node.js-specific tips for this request?

Yes. Native fetch does not throw on 4xx/5xx — check response.ok (or status) before parsing JSON. Read meta.requestId from the body when you need support on a bad row.