Bulk YouTube & Video Transcriber with SRT Subtitles
Pricing
$2.50 / 1,000 media transcribeds
Bulk YouTube & Video Transcriber with SRT Subtitles
Search YouTube by topic, add a whole channel, or paste links. Get a timestamped transcript plus SRT and VTT subtitles for every video. Also works with TikTok, Instagram, MP3 and MP4 files.
Pricing
$2.50 / 1,000 media transcribeds
Rating
0.0
(0)
Developer
jay casey
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
4 days ago
Last modified
Categories
Share
Transcribe a pile of videos without collecting links. Search YouTube by topic, point it at a whole channel or playlist, or paste links from YouTube, TikTok and Instagram. MP3, WAV and MP4 files work too. Every item comes back as timestamped text plus SRT and VTT subtitle files.
Quick start
Press Start and the sample transcribes a short public audio clip so you can see the output. Then type a topic into Search YouTube (say, cold email tips), set Videos per search to 25, and run again.
What you get
- Full transcript text, detected language, duration and word count per item
- Timed segments, plus SRT and VTT subtitle files saved for each item
- Source type and URL, and a clear status and error per item, so failures are easy to rerun
- PDF and image links turned into text, page by page, with OCR for scans (beta)
- A run summary with totals, successes and failures
Good for
- Transcribing a creator's back catalogue to search or quote it
- Subtitles for a batch of clips
- Research on what people say about a topic across dozens of videos
- Turning podcast episodes into text for show notes
Pricing
- $0.0025 per file transcribed, any length, until 29 October 2026
- From 29 October 2026: $0.005 per file plus $0.003 per started audio minute
- Failed downloads and skipped files are not billed
You pay only for results that come back. Set a max cost per run in the run options and the run stops cleanly when it hits it. Normal Apify platform usage applies.
Input
| Field | What it does |
|---|---|
youtubeSearch | Type a topic, like podcast marketing tips or Lex Fridman. We find the top videos and transcribe them all. No links to copy. |
videosPerSearch | How many results to take for each search term or channel. |
channelUrls | Paste one channel or playlist link (youtube.com/@mkbhd, a TikTok profile) and we transcribe its latest videos, up to the number above. |
urls | YouTube, TikTok, Instagram or any page with a video. Each file costs $0.005 plus $0.003 per started audio minute. |
mediaUrls | Direct links to .mp3, .wav, .mp4 and similar files. The sample is a 11-second clip so you can see the output. |
uploadedFiles | Links to files you uploaded to Apify storage or any file host. |
documentUrls | Public PDF or image links to turn into text, page by page, with Markdown. Pages without a text layer get OCR. Links ending in .pdf, .png or .jpg in other fields are sent here automatically. |
language | Two-letter code such as en, es or hi. Leave blank and we detect it. |
prompt | Spellings the transcript should get right: product names, people, acronyms. |
includeSubtitles | Saves timed subtitle files for every finished item. |
concurrency | How many items run in parallel. Lower it if a site starts blocking downloads. |
maxItems | Upper limit on links accepted in one run, including search results. |
maxFileSizeMb | Larger direct files are skipped before transcription and not billed. |
ocr | OCR reads text from scanned pages. |
ocrLanguage | Tesseract language code. eng is installed. |
maxPages | Longer files are skipped with an error row and not billed. |
transcription | Leave as is. Only for teams who want to bill a Whisper-compatible endpoint of their own: model, baseUrl, apiKey. |
Limits
- Public media only. Private, members-only and login-gated videos fail with an error row.
- Instagram serves some videos inconsistently to logged-out visitors.
- Direct files over 24 MB are skipped by default; raise Max file size if you need to.
Run it from code
Same input as the Console sample:
{"urls": [],"mediaUrls": ["https://raw.githubusercontent.com/ggerganov/whisper.cpp/927cfce34f31707e17f2bff35c349632fb9e2c3a/samples/jfk.wav"],"transcription": {"model": "whisper-1"}}
curl -X POST "https://api.apify.com/v2/acts/physealabs~bulk-media-transcriber/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" -d @input.json
from apify_client import ApifyClientitems = ApifyClient("YOUR_APIFY_TOKEN").actor("physealabs/bulk-media-transcriber").call(run_input={"urls": [], "mediaUrls": ["https://raw.githubusercontent.com/ggerganov/whisper.cpp/927cfce34f31707e17f2bff35c349632fb9e2c3a/samples/jfk.wav"], "transcription": {"model": "whisper-1"}})
It also works from Zapier, Make, n8n and Apify schedules.