Wicked YouTube Transcript Scraper API avatar

Wicked YouTube Transcript Scraper API

Pricing

$0.70 / 1,000 transcripts

Go to Apify Store
Wicked YouTube Transcript Scraper API

Wicked YouTube Transcript Scraper API

YouTube transcripts from the videos’ own captions. One video or 250 per run, nothing truncated. Plain text, timestamped segments, video facts and caption languages in every result; SRT/WebVTT on request. $0.70 per 1,000, no start fee, failed videos free.

Pricing

$0.70 / 1,000 transcripts

Rating

0.0

(0)

Developer

Myworkingmemory LLC

Myworkingmemory LLC

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Share

Timestamped transcripts of public YouTube videos, straight from their own caption tracks. One video or 250 in a run. Plain text, timestamped segments, video facts and the caption-language list in every result. $0.70 per 1,000 transcripts, one flat price per delivered transcript. Nothing else on the bill.

What you get, every result

  • Plain-text transcript (text), ready for an LLM.
  • Timestamped segments (data): start, dur, text, seconds to three decimals.
  • Video facts: title, channel, duration, view count, description, keywords, thumbnail.
  • Every caption language the video has, manual and auto-generated, so you know what else you can ask for.
  • SRT and WebVTT subtitle text when you ask for them.

What you will not pay for here

  • No start fee. No per-run fee. The bill is one flat price per delivered transcript: $0.0007, which is $0.70 per 1,000.
  • No cap of 100. Up to 250 videos per run, and every one is processed. A longer list is refused up front, never cut off quietly.
  • No charge for a video without captions. It is reported, not billed.
  • No charge to list languages. Ask for the caption languages only and the run is free.
  • No charge for video facts, SRT or WebVTT. They ride along with the transcript.
  • No translation sold that does not work. A language the video lacks fails at once, free, with the languages it does have listed.

How it picks the captions

Give one language, or a priority list such as ["es", "en"]; the first language the video has captions in wins. Manual captions come before auto-generated ones unless you choose manual only or auto only. The video must carry captions in that language: there is no audio transcription and no translation.

Input

FieldTypeDescription
videoUrlstringOne YouTube video URL (watch, youtu.be, Shorts, embed, live) or 11-character ID.
videoUrlsarray of stringsUp to 250 URLs or IDs in one run. Duplicates merged. Above 250: refused before any work, nothing charged.
targetLanguagestring, default enISO 639-1 code of the captions you want.
languagesarray of stringsPriority list, e.g. ["es", "en"]. Replaces targetLanguage when set.
captionTypeany / manual / auto, default anyany = manual first, then auto-generated.
outputFormatsarray: srt, vttAdds subtitle text to each result. Free.
listOnlyboolean, default falseOnly list each video's caption languages and facts. Free. Answer is in the OUTPUT record.
includeMetadataboolean, default trueVideo facts on every result. Free.

One video:

{ "videoUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw", "targetLanguage": "en" }

A batch with a fallback language and subtitle files:

{
"videoUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw", "https://youtu.be/IELMSD2kdmk"],
"languages": ["es", "en"],
"outputFormats": ["srt", "vtt"]
}

Languages only, free:

{ "videoUrls": ["jNQXAC9IVRw", "IELMSD2kdmk"], "listOnly": true }

Output

One dataset item per delivered transcript, written the moment it is ready:

{
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"title": "Me at the zoo",
"channel": "jawed",
"channelId": "UC4QobU6STFB0P71PMvOGN5A",
"durationSeconds": 19,
"viewCount": 353000000,
"description": "…",
"keywords": ["…"],
"thumbnailUrl": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg",
"language": "en",
"languageName": "English",
"captionType": "manual",
"availableLanguages": [
{ "code": "en", "name": "English", "type": "manual" },
{ "code": "en", "name": "English (auto-generated)", "type": "auto" }
],
"text": "All right, so here we are, in front of the elephants\nthe cool thing about these guys is that they have really, really, really long trunks",
"data": [
{ "start": "1.200", "dur": "4.000", "text": "All right, so here we are, in front of the elephants" },
{ "start": "5.200", "dur": "5.600", "text": "the cool thing about these guys is that they have really, really, really long trunks" }
],
"srt": "1\n00:00:01,200 --> 00:00:05,200\nAll right, so here we are, in front of the elephants\n…",
"vtt": "WEBVTT\n\n00:00:01.200 --> 00:00:05.200\nAll right, so here we are, in front of the elephants\n…"
}

srt and vtt appear only when requested. With includeMetadata: false the facts are left out.

The run's key-value store holds an OUTPUT record: for one video, the same item; for a batch, { "requested", "delivered", "deliveredVideoIds", "failed": [ { "videoId", "error", "message", "availableLanguages" } ] }; for listOnly, each video's facts and caption languages. A failed video is never written to the dataset, so it is never charged. Error codes: INVALID_URL, VIDEO_UNAVAILABLE, PRIVATE_OR_RESTRICTED, AGE_RESTRICTED, NO_CAPTIONS, NO_CAPTIONS_IN_LANGUAGE, EMPTY_TRACK, BLOCKED, TIMEOUT.

Use it from code

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('myworkingmemory/wicked-youtube-transcript-scraper-api').call({
videoUrls: ['https://www.youtube.com/watch?v=VIDEO_ID'],
languages: ['en'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].title, items[0].text);

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("myworkingmemory/wicked-youtube-transcript-scraper-api").call(run_input={
"videoUrls": ["https://www.youtube.com/watch?v=VIDEO_ID"],
"languages": ["en"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["videoId"], item["title"], item["text"][:80])

One HTTP call, transcript in the response body:

POST https://api.apify.com/v2/acts/myworkingmemory~wicked-youtube-transcript-scraper-api/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>
{ "videoUrl": "https://www.youtube.com/watch?v=VIDEO_ID", "targetLanguage": "en" }

Postman: the collection and spec are published at https://documenter.getpostman.com/view/59146422/2sBYHVvJvA (public workspace "Myworkingmemory LLC APIs"); OpenAPI spec: https://www.myworkingmemory.ai/apis/wicked-youtube-transcript-scraper-api.openapi.json.

AI agents and MCP: add this Actor as a tool through the Apify MCP server (https://mcp.apify.com); any MCP client can then fetch a transcript on demand.

In the Console

  1. Paste one URL, or up to 250 in the batch list. Pick a language, or a priority list.
  2. Start.
  3. Read the Transcripts view (plain text) or the Segments view, download, or fetch through the API.

Limits

  • Public videos with captions only. Private, removed and age-restricted videos cannot be read.
  • No audio transcription. No translation.
  • 250 videos per run. Playlists and channels are not expanded; pass video URLs.

Pricing

$0.0007 per delivered transcript, $0.70 per 1,000. No start fee, no per-run fee, nothing for a video without captions, nothing for a language listing, nothing for facts, SRT or WebVTT. A batch of 250 costs $0.175. The pricing card at the top of this page is the binding rate.

Privacy

The Actor reads the public caption tracks and video facts you ask for. Results live in your own run's dataset and key-value store. Nothing is kept elsewhere and no user text is collected.

FAQ

Does it work on every YouTube video? Only public videos that have captions.

Can I get a language the video has no captions in? No. The run fails for that video, free, and lists the languages it does have.

How many videos per run? Up to 250, all processed. A longer list is refused before any work.

Is there a start fee or a per-run fee? No. $0.0007 per delivered transcript, nothing else.

Does listing languages cost anything? No. listOnly runs are free.

Can I use it with LangChain, an agent or a RAG pipeline? Yes. Plain JSON, callable through the Apify API, the SDKs, or as an MCP tool.