๐Ÿฆ– TinyRex Data Toolspractical guides for web data APIs

How to transcribe hundreds of audio and video files to text and subtitles with Whisper

Updated 2026-10-28 ยท Tool used: Audio & Video Transcriber (Whisper) - MP3/MP4 to Text, SRT, VTT on Apify ยท Price: $0.005 per audio minute with the base model, $0.01 with the small model; dead links, web pages, files without audio and silent files are free

Transcribing one file is easy with any app. Transcribing a whole podcast back catalogue, a folder of interview recordings or a batch of course videos is where per-seat transcription tools get expensive and slow, and uploading every file by hand does not scale.

This guide shows how to pass a list of direct audio or video links (or another run's dataset, for example podcast episode enclosures from an RSS feed) and get one row per file: full text, detected language, timestamped segments and ready-made .srt and .vtt subtitle files. It runs the open-source Whisper model (faster-whisper) inside the actor, so there is no OpenAI key and the audio is not sent to an outside speech service.

Open Audio & Video Transcriber (Whisper) on Apify โ†’

Steps

  1. Collect direct file links in mediaUrls (podcast MP3 links, files in cloud storage, CDN links), or set datasetId to read links from another actor run.
  2. Pick model: base is fast and cheap, small is better on accents, noise and non-English. Set language if you know it, or task: "translate" for an English transcript of any language.
  3. Run it, export the dataset as CSV or JSON, and download subtitles from srtUrl / vttUrl. Set a max charge per run to cap the cost.

Example input

{
  "url": "https://upload.wikimedia.org/wikipedia/commons/3/3c/Pope_Simplicius_Spoken_Version.ogg",
  "status": "ok",
  "language": "en",
  "languageProbability": 0.999,
  "durationSeconds": 76.7,
  "billedMinutes": 2,
  "words": 167,
  "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia. Pope Simpliceus died March 10, 483, was the head of the Catholic Church from 468 to his death in 483. ...",
  "segments": [
    {
      "start": 0.24,
      "end": 5.24,
      "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia."
    },
    {
      "start": 5.24,
      "end": 9.24,
      "text": "Pope Simpliceus died March 10, 483,"
    }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/.../records/srt-0143153b17b9df8e",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/.../records/vtt-0143153b17b9df8e",
  "model": "base",
  "task": "transcribe",
  "format": "ogg",
  "audioCodec": "vorbis",
  "hasVideo": false,
  "truncated": false,
  "transcribeSeconds": 4.5
}

Example output (one item, shortened)

{
  "status": "ok",
  "language": "en",
  "durationSeconds": 76.7,
  "billedMinutes": 2,
  "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia. Pope Simpliceus died March 10, 483, was the head of the Catholic Church from 468 to his death in 483. He was born in Tivoli, Italy, the son of a city, citizen named...",
  "url": "https://upload.wikimedia.org/wikipedia/commons/3/3c/Pope_Simplicius_Spoken_Version.ogg",
  "error": null,
  "model": "base",
  "task": "transcribe",
  "httpStatus": 200,
  "fileSizeBytes": 820957,
  "downloadSeconds": 0.1,
  "hasVideo": false,
  "format": "ogg",
  "audioCodec": "vorbis",
  "fileDurationSeconds": 76.7,
  "transcribeSeconds": 4.4,
  "languageProbability": 0.999,
  "speechSeconds": 76.48,
  "truncated": false,
  "words": 167,
  "chars": 972,
  "textTruncated": false,
  "segments": [
    {
      "start": 0.24,
      "end": 5.24,
      "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia."
    },
    {
      "start": 5.24,
      "end": 9.24,
      "text": "Pope Simpliceus died March 10, 483,"
    },
    {
      "start": 9.24,
      "end": 12.24,
      "text": "was the head of the Catholic Church from 468"
    },
    "..."
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/JrhAHz09K8AipOiVl/records/srt-0143153b17b9df8e?signature=HzZXojmeMlOIDoeA2RV9",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/JrhAHz09K8AipOiVl/records/vtt-0143153b17b9df8e?signature=ZSS6cYjRRDXnPqjYidRn",
  "transcribedAt": "2026-10-27T08:18:21.892Z"
}

Every run's dataset can be downloaded as JSON, CSV, Excel, XML or HTML from the Apify Console, or via https://api.apify.com/v2/datasets/<datasetId>/items?format=csv.

Run it from code

Python

from apify_client import ApifyClient  # pip install apify-client

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
  "url": "https://upload.wikimedia.org/wikipedia/commons/3/3c/Pope_Simplicius_Spoken_Version.ogg",
  "status": "ok",
  "language": "en",
  "languageProbability": 0.999,
  "durationSeconds": 76.7,
  "billedMinutes": 2,
  "words": 167,
  "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia. Pope Simpliceus died March 10, 483, was the head of the Catholic Church from 468 to his death in 483. ...",
  "segments": [
    {
      "start": 0.24,
      "end": 5.24,
      "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia."
    },
    {
      "start": 5.24,
      "end": 9.24,
      "text": "Pope Simpliceus died March 10, 483,"
    }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/.../records/srt-0143153b17b9df8e",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/.../records/vtt-0143153b17b9df8e",
  "model": "base",
  "task": "transcribe",
  "format": "ogg",
  "audioCodec": "vorbis",
  "hasVideo": false,
  "truncated": false,
  "transcribeSeconds": 4.5
}
run = client.actor("tinyrex/audio-video-transcriber").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

JavaScript / Node.js

import { ApifyClient } from 'apify-client'; // npm i apify-client

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('tinyrex/audio-video-transcriber').call({
  "url": "https://upload.wikimedia.org/wikipedia/commons/3/3c/Pope_Simplicius_Spoken_Version.ogg",
  "status": "ok",
  "language": "en",
  "languageProbability": 0.999,
  "durationSeconds": 76.7,
  "billedMinutes": 2,
  "words": 167,
  "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia. Pope Simpliceus died March 10, 483, was the head of the Catholic Church from 468 to his death in 483. ...",
  "segments": [
    {
      "start": 0.24,
      "end": 5.24,
      "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia."
    },
    {
      "start": 5.24,
      "end": 9.24,
      "text": "Pope Simpliceus died March 10, 483,"
    }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/.../records/srt-0143153b17b9df8e",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/.../records/vtt-0143153b17b9df8e",
  "model": "base",
  "task": "transcribe",
  "format": "ogg",
  "audioCodec": "vorbis",
  "hasVideo": false,
  "truncated": false,
  "transcribeSeconds": 4.5
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

curl (no SDK)

# Runs the actor and returns the results directly (CSV here; use format=json for JSON)
curl -X POST "https://api.apify.com/v2/acts/tinyrex~audio-video-transcriber/run-sync-get-dataset-items?format=csv" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://upload.wikimedia.org/wikipedia/commons/3/3c/Pope_Simplicius_Spoken_Version.ogg", "status": "ok", "language": "en", "languageProbability": 0.999, "durationSeconds": 76.7, "billedMinutes": 2, "words": 167, "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia. Pope Simpliceus died March 10, 483, was the head of the Catholic Church from 468 to his death in 483. ...", "segments": [{"start": 0.24, "end": 5.24, "text": "Pope Simpliceus, from Wikipedia, the free encyclopedia."}, {"start": 5.24, "end": 9.24, "text": "Pope Simpliceus died March 10, 483,"}], "srtUrl": "https://api.apify.com/v2/key-value-stores/.../records/srt-0143153b17b9df8e", "vttUrl": "https://api.apify.com/v2/key-value-stores/.../records/vtt-0143153b17b9df8e", "model": "base", "task": "transcribe", "format": "ogg", "audioCodec": "vorbis", "hasVideo": false, "truncated": false, "transcribeSeconds": 4.5}' > results.csv

Get your API token in Apify Console โ†’ Settings โ†’ API & Integrations. The free Apify plan includes monthly credit that is enough to try this.

Use it from an AI agent (MCP)

The Apify MCP server exposes this actor as a tool for Claude, Cursor, VS Code, n8n and other MCP clients. Add this to your client's MCP config (or use the OAuth flow at mcp.apify.com instead of a token):

{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=tinyrex/audio-video-transcriber",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}

Then ask in plain language, e.g. "Bulk audio transcription api for this list and give me a table".

Use cases

No-code: n8n and Make

Ready-to-import n8n and Make example workflows call this actor through the Apify API. Import the JSON, add your Apify token, edit the input and run.

Pricing

Pay per result: $0.005 per audio minute with the base model, $0.01 with the small model; dead links, web pages, files without audio and silent files are free. You can cap the cost of every run in the run options.

FAQ

Can I transcribe podcast episodes straight from an RSS feed?

Yes. Run the RSS Feed Scraper on the podcast feed, then pass its run's datasetId and set urlField to the enclosure field. Each episode's audio link is transcribed.

Which languages are supported?

Whisper supports about 99 languages. Leave language on auto to detect it, or set it for better accuracy on short files.

Is this a cheaper alternative to the Whisper API?

It runs the same open-source Whisper model family inside the actor for $0.005 per audio minute (base) or $0.01 (small), billed per minute rounded up per file. Failed and silent files cost nothing, and there is no separate API account.

Can I transcribe YouTube, TikTok or Instagram videos?

No. Links to platform pages are refused for free, because downloading from those sites is against their terms. Use files you own or have rights to, such as your own recordings or podcast MP3s.

Does it add speaker labels?

Not yet. You get timestamped segments and subtitles, without speaker diarization.

How fast is it?

At the default memory the base model handles about 10 to 12 minutes of audio per minute, the small model about 4. More memory gives more CPU cores; the price per audio minute stays the same.

Try it on Apify โ†’

Related guides

More guides