YouTube Transcript Scraper ๐ Subtitles, Timestamps & SRT
Pricing
from $1.50 / 1,000 transcripts
YouTube Transcript Scraper ๐ Subtitles, Timestamps & SRT
Quickly get the full transcript of any YouTube video as clean text, timestamped cues or an SRT file. Works on manual and auto-generated captions in any language. No cookies, no login, no API key. Accurate and reliable whilst maintaining maximum speed.
Pricing
from $1.50 / 1,000 transcripts
Rating
5.0
(1)
Developer
GatherWorks
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Get the full transcript of any YouTube video โ as clean text, timestamped cues, or a ready-to-use SRT subtitle file. Manual and auto-generated captions, any language.
No account, no API key, no setup. Paste links and run.
๐ What is the YouTube Transcript Scraper?
Give it YouTube links โ watch URLs, youtu.be links, Shorts, or bare video IDs.
For each one it returns the transcript in whichever shape you need it:
- ๐ the whole thing as one clean block of text
- โฑ๏ธ every line with its start time and duration, to the millisecond
- ๐ฌ a complete SRT file as a string, ready to save or upload
- ๐ท๏ธ the video's own context โ title, channel, views, duration โ on the same row
โก What can it do?
- ๐ Pick the language you asked for.
preferredLanguagesis tried in order, and the language actually used is reported back on the row. - ๐ค Include or exclude machine captions. Set
allowAutoGenerated: falseto accept only human-written subtitles. - ๐ฌ Emit SRT directly. No post-processing, no timestamp maths โ the file comes out ready to use.
- ๐ฆ Take a list of videos and return one dataset covering all of them.
- โ Say which track you got on every row, so a transcript is never anonymous.
- ๐ Filter before you pay. Keep only the rows you want โ a minimum word count, a language, human-written only โ and rows that do not match are never returned and never charged for.
- ๐ Sort the results by any field, e.g. longest transcript first.
- โป๏ธ Reuse what you already fetched. A video you have pulled before is served from your own recent copy โ same result, a fraction of the time. The add-ons work off it too, so switching on cues or SRT later needs no refetch.
- ๐ Export anywhere. JSON, CSV, Excel โ the dataset is yours.
๐ฏ "No captions" is an answer, not a failure
A video with no caption track comes back with status: "no_captions" and a
plain-English message, and it is never charged for a transcript โ only for
the lookup. The same applies when the only tracks are auto-generated and you have
switched those off.
That distinction matters downstream: an empty string cannot tell you whether the
captions do not exist or simply were not read, and you find out which at the
wrong moment. Here status and message say which, on every row.
โก Speed and accuracy
Speed. Measured on real runs: 10 videos in 21.5 seconds, and the same 10 in 2.5 seconds when already fetched โ with timestamped cues and SRT switched on the second time, rebuilt without going back out.
Accuracy. Transcripts are the caption tracks YouTube publishes for the video, so the wording is not a machine transcription of our own. Cue timings are preserved to the millisecond and carried into the SRT output unchanged. Every row reports the language used and whether that track was human-written or auto-generated. A video whose captions cannot be read is reported as such rather than returned empty.
๐ What data does it return?
One row per video:
| Field | Notes |
|---|---|
๐ text | The whole transcript as one clean block |
โฑ๏ธ cues | (timestamps add-on) Every line with start and duration in seconds |
๐ฌ srt | (SRT add-on) A complete SRT subtitle file as a string |
๐ language | The caption track actually used |
๐ค isAutoGenerated | Whether YouTube generated that track rather than a human writing it |
๐๏ธ availableLanguages | Every caption language the video offers, de-duplicated |
๐ข wordCount, cueCount | Size of the transcript at a glance |
๐ท๏ธ videoTitle, channelName, channelId | Video context |
๐ viewCount, durationSeconds, publishedAt | Video stats |
โ
status | ok, no_captions, transcript_unavailable or error |
โ ๏ธ message | Why, in plain English, whenever status is not ok |
๐ฐ๏ธ scrapedAt | When the row was captured |
๐ซ What it does not return
- A transcript for a video that has no captions. It says so instead.
- Speech recognition of our own. If YouTube has no caption track, there is nothing to return โ a machine transcription would be a different product with different accuracy, and passing one off as the video's captions would be a lie.
- Captions from private, members-only or age-gated videos. They are not served publicly.
- Translated captions. You get the tracks the video actually publishes.
๐ฐ How much does it cost?
You pay per event, for what the run actually produces โ never for runtime, and never on a subscription. Every video costs a base lookup fee; a transcript is charged only when one is actually returned.
Standard rate, at $0.0025 per transcript โ one charge, and only when a transcript is actually returned:
| Run | Cost |
|---|---|
| ๐ฉ 100 transcripts, plain text | ๐ต $0.25 |
| ๐จ 100 transcripts + timestamped cues | ๐ต $0.34 |
| ๐ง 100 transcripts + cues + SRT | ๐ต $0.43 |
A video with no captions is free. So is a video that fails to load. You are charged per transcript you receive, and for nothing else. A month you do not run it costs nothing at all โ there is no plan to keep alive.
What you get for that
| Included here | |
|---|---|
| ๐ The language actually used, reported per row | โ |
| ๐ค Human-written vs auto-generated, marked | โ |
| ๐๏ธ Every caption language the video offers | โ free |
| ๐ท๏ธ Video title, channel, views and duration | โ free |
| ๐ณ Minimum spend | none |
| ๐ Monthly commitment | none |
The usual alternative is a monthly credit plan, where the cheap per-transcript rate only arrives once you have prepaid for tens of thousands of them and used the lot. Here the rate is the rate, the add-ons are genuinely optional, and nothing expires at the end of the month.
๐ How do I use it?
- Paste your video URLs into
videoUrls. - Put your preferred caption languages in order in
preferredLanguages. - Switch on
includeTimestampsorincludeSrtonly if you need them. - Run it. Rows land in the dataset as they arrive.
โ๏ธ Input
| Input | Type | Default | What it does |
|---|---|---|---|
๐ videoUrls | array | โ | Required. Watch URLs, youtu.be links, Shorts URLs or bare 11-character IDs |
๐ preferredLanguages | array | ["en"] | Language codes in order of preference. First available wins |
๐ค allowAutoGenerated | boolean | true | Turn off to accept only human-written subtitles |
๐ filter | object | โ | Keep only matching rows. Unmatched rows are not returned and not charged |
๐ sortResultsBy | string | โ | e.g. wordCount:desc. Leave empty to keep input order |
โป๏ธ useCache | boolean | true | Serve videos you have already fetched from your own recent copy |
โณ cacheHours | integer | 168 | How long a stored result stays usable. Default one week |
โฑ๏ธ includeTimestamps | boolean | false | Adds the cues array. Add-on |
๐ฌ includeSrt | boolean | false | Adds the srt string. Add-on |
๐ข concurrency | integer | 5 | Videos fetched at once |
โ๏ธ proxyConfiguration | object | โ | Optional proxy settings |
{"videoUrls": ["https://www.youtube.com/watch?v=jNQXAC9IVRw","https://youtu.be/dQw4w9WgXcQ"],"preferredLanguages": ["en"],"includeTimestamps": true,"includeSrt": true,"filter": { "wordCount": { "gte": 200 }, "isAutoGenerated": false },"sortResultsBy": "wordCount:desc"}
๐ Output example
A real row from a real run, trimmed for length:
{"videoId": "jNQXAC9IVRw","videoUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw","videoTitle": "Me at the zoo","channelName": "jawed","viewCount": 407909330,"durationSeconds": 19,"availableLanguages": ["en", "de"],"status": "ok","language": "en","isAutoGenerated": false,"cueCount": 6,"wordCount": 39,"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that they have really...","cues": [{ "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" }],"srt": "1\n00:00:01,200 --> 00:00:03,360\nAll right, so here we are, in front of the elephants\n","scrapedAt": "2026-08-29T07:12:44.108Z"}
Videos without captions return status: "no_captions" and are never charged for a
transcript.
โ Frequently asked questions
Do I need a Google account or API key? No. There is nothing to sign up for and no key to manage.
What happens if a video has captions in several languages?
preferredLanguages is tried in order. If none of them match, the first available
track is used โ and language on the row tells you which one you got.
Can I get a transcript for a video that has none?
No. This Actor returns the captions the video publishes; it does not transcribe
audio. Those videos come back as no_captions.
What can I filter on?
Any field in the table above. Conditions take an operator โ gte, lte, eq,
ne, contains, notContains, startsWith, endsWith, matches, in,
notIn, exists, before, after โ or a bare value for an exact match. Give
several and all must hold; use {"any": [...]} for or.
Am I charged for rows the filter removes? No. The filter runs before the row is returned, so you are only charged for transcripts you actually receive.
How fresh is a reused result?
scrapedAt on every row is the moment the captions were actually captured, not
the moment they were handed to you โ so you can always see the real age. Set
useCache: false to force a fresh fetch, or lower cacheHours.
What about live streams? Live streams and videos with captions disabled are reported, not charged for.
๐ท๏ธ Pricing
Pay per event โ you are charged for output, not for platform time.
| Event | Price | Covers |
|---|---|---|
๐ transcript โ primary | ๐ต $0.0025 | One transcript returned. The only charge a default run makes |
โฑ๏ธ timestamped-transcript โ add-on | ๐ต $0.0009 | The cues array. Only when includeTimestamps is on |
๐ฌ srt-export โ add-on | ๐ต $0.0009 | The srt string. Only when includeSrt is on |
โถ๏ธ apify-actor-start | ๐ต $0.00005 | Starting one run, charged once per GB of memory |
| ๐น Videos with no captions | โ free | Reported, never charged |
| ๐ท๏ธ Title, channel, views and duration | โ free | On every row |
| ๐ Language detection and de-duplication | โ free | On every row |
| ๐ Filtering and sorting | โ free | Filtered-out rows are not charged for |
Both add-ons are off by default. Leave them off and you are charged the transcript rate and nothing else.
๐ Rates by tier
The prices above are the standard rate. Higher Apify plans are billed at the discounted tiers below, automatically:
| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
๐ transcript | ๐ต $0.0025 | ๐ต $0.00217 | ๐ต $0.00183 | ๐ต $0.0015 |
โฑ๏ธ timestamped-transcript | ๐ต $0.0009 | ๐ต $0.00077 | ๐ต $0.00063 | ๐ต $0.0005 |
๐ฌ srt-export | ๐ต $0.0009 | ๐ต $0.00077 | ๐ต $0.00063 | ๐ต $0.0005 |
โถ๏ธ apify-actor-start | ๐ต $0.00005 | ๐ต $0.00005 | ๐ต $0.00005 | ๐ต $0.00005 |
๐ You are never billed past your limit
The run watches its own charge limit and stops taking new videos when it reaches it, so a long list cannot quietly overshoot the budget you set on the run.