Speech to Text — Transcribe Audio & Video URLs, Speaker Labels
Pricing
from $4.80 / 1,000 audio minute transcribeds
Speech to Text — Transcribe Audio & Video URLs, Speaker Labels
Speech to Text — File Transcripts, Speaker Labels & Subtitles: `audio-minute-transcribed` previous $0.006 / requested $0.0075; `speaker-labelled-minute` previous/requested $0.002; active Apify record sets fees; usage included; start extra; failed results uncharged.
Pricing
from $4.80 / 1,000 audio minute transcribeds
Rating
0.0
(0)
Developer
Logan Parker
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Features
Share
Speech to text for audio and video file URLs: transcribe or translate speech to English, with timed segments and SRT or WebVTT subtitles; optional word timings and anonymous speaker labels have language and mode limits documented below. AI agents can call and pay through Apify MCP.
The active Apify pricing record determines your bill; for the previous/requested schedules, audio-minute-transcribed previous $0.006 / requested $0.0075; speaker-labelled-minute previous/requested $0.002; usage is included and failed results are free.
Example result
Example record for the minimal input under How to use it, as this Actor returned it for the same file in its build check on 2026-10-27:
{"url": "https://raw.githubusercontent.com/SYSTRAN/faster-whisper/master/tests/data/jfk.flac","ok": true,"language": "en","durationSec": 11.0,"minutesCharged": 1,"text": "And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country.","segments": [{"start": 0.24, "end": 10.72, "text": "And so, my fellow Americans, ask not what your country can do for you, ask what you can do for your country."}]}
How to use it
Start a run in Apify Console, by API or from an agent with an input like this one — it is the input Apify runs every day to test this Actor:
{"urls": ["https://raw.githubusercontent.com/SYSTRAN/faster-whisper/master/tests/data/jfk.flac"], "language": "en"}
Start with the minimal JSON example above, then adjust the fields in the table below. Read the Example result and Output fields sections for the returned record, Errors for failure codes, and Events and prices for result events and the separate platform start.
| Field | Type | Required | Default | Meaning |
|---|---|---|---|---|
urls | array of strings | yes | — | Media file URLs (MP3, M4A, WAV, FLAC, OGG, Opus, WebM, MP4, MOV), http or https, 1–20 per run, ≤ 500 MB and ≤ 120 minutes each. |
language | string | no | auto | ISO 639-1 code to force the spoken language (99 languages, e.g. en, de, es, zh; haw for Hawaiian); auto detects it from the first speech. |
formats | array of text · srt · vtt | no | ["text"] | What to return inline, 1–3 of: text (the transcript and its timed segments), srt (SubRip subtitles), vtt (WebVTT subtitles). |
translateToEnglish | boolean | no | false | Return an English translation instead of the source language — text, segments and subtitles alike; language still names the source language. Translation is Whisper base's own: good enough to follow the gist of common European languages, rough for others. |
wordTimestamps | boolean | no | false | Return words: every word with its start and end in seconds (and its speaker with speaker labels). Given for English and the 24 other European languages Parakeet v3 covers; null for other languages and with translation. No extra charge. |
speakerLabels | boolean | no | false | Label who speaks when: every segment (and word) gets a speaker — SPEAKER_1, SPEAKER_2, … in the order they first speak — SRT cues start [SPEAKER_1], WebVTT cues carry <v SPEAKER_1>, and the record counts the speakers. Speakers are anonymous: no voice is identified. Adds the speaker-labelled-minute event, charged only when a speaker is found (silence is charged its minute and nothing for labels). |
numSpeakers | integer | no | 0 | With speaker labels: how many people speak, when you know it (1–20); 0 finds it from the voices. |
Every limit above is enforced in the input schema (minimum/maximum, maxItems) and again in code.
Events and prices
The active Apify pricing record determines your bill; each schedule below is conditional on that exact record being active. A pending record does not authorise its charges. Before submission, while pending, and after activation, use the actual active record, not the requested calendar, to determine the bill.
Requested activation: 2026-12-14T06:00:00Z. This is a request until confirmed by the record; the record supplies the actual effective instant.
Previous schedule — only if that record is active
apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005; audio-minute-transcribed: FREE $0.006, BRONZE $0.006, SILVER $0.0054, GOLD $0.0048, PLATINUM $0.0048, DIAMOND $0.0048; speaker-labelled-minute: FREE $0.002, BRONZE $0.002, SILVER $0.0018, GOLD $0.0016, PLATINUM $0.0016, DIAMOND $0.0016.
Requested schedule — only if that record is active
| Event | Title | Charged when | FREE / BRONZE | SILVER | GOLD / PLATINUM / DIAMOND |
|---|---|---|---|---|---|
audio-minute-transcribed | Audio minute transcribed | One started minute of media duration transcribed. | $0.0075 | $0.00675 | $0.006 |
speaker-labelled-minute | Speaker-labelled minute | One started minute of media duration given speaker labels (only with speakerLabels: true, and only when a speaker is found). | $0.002 | $0.0018 | $0.0016 |
Platform event in the requested schedule: apify-actor-start: FREE $0.00005, BRONZE $0.00005, SILVER $0.00005, GOLD $0.00005, PLATINUM $0.00005, DIAMOND $0.00005.
The requested start at default memory is (2 events, $0.0001, at the default 2,048 MB).
Worked event subtotal, requested schedule at FREE: if 10 audio-minute-transcribed events are charged, 10 × $0.0075 = $0.075 for that event alone. All other charged events and the platform start event add their listed fees; this subtotal is not a run total. The configured maximum-charge floor is $0.02. Platform usage is included; failed results are uncharged.
Call it from an agent
Through Apify's MCP server (https://mcp.apify.com), tool call-actor:
{"actor": "hermeskd/audio-to-transcript", "input": {"urls": ["https://raw.githubusercontent.com/SYSTRAN/faster-whisper/master/tests/data/jfk.flac"], "language": "en"}, "callOptions": {"maxTotalChargeUsd": 0.05, "timeout": 3600}, "waitSecs": 30}
The call returns the run's status and its defaultDatasetId. Read the records with get-dataset-items:
{"datasetId": "<defaultDatasetId from the call>", "limit": 50}
As a dedicated tool, add https://mcp.apify.com?tools=hermeskd/audio-to-transcript to your MCP client. A short clip usually finishes inside the 30-second wait; a long recording takes longer (see Limits and run time), so when the call returns with the run still RUNNING, wait for it and then read the dataset. maxTotalChargeUsd caps what the run can charge: a file whose minutes would pass it is not transcribed and comes back as a charge_limit_reached record, uncharged.
Output fields
One record per input URL.
| Field | Meaning |
|---|---|
url | The input URL. |
ok | true when the file was transcribed; false with error. |
language | The spoken language as an ISO 639-1 code: the one given, or the one detected from the first speech; null when no speech was found and none was given. |
durationSec | The media's duration in seconds. |
minutesCharged | Started minutes of media duration charged for this file (11 s is 1, 61 s is 2). |
text | With formats text: the full transcript, segments joined by spaces. Media with no speech gives ok: true and an empty string, and is charged — the file was listened to. |
segments | With formats text: the transcript as {start, end, text} segments in seconds from the file's start, in order, never overlapping, never past durationSec; with speaker labels each segment also has speaker: on English and Parakeet v3's 24 other languages a new segment starts when the speaker changes; for other languages and with translation (Whisper base) the segments are Whisper's own and each takes the speaker who speaks most of it. |
srt | With formats srt: the segments as SubRip subtitles (with speaker labels each cue starts [SPEAKER_1]). |
vtt | With formats vtt: the segments as WebVTT subtitles (with speaker labels each cue carries a voice tag, <v SPEAKER_1>). |
words | With wordTimestamps: every word as {word, start, end} in seconds from the file's start, in order (with speaker labels also speaker); punctuation stays on its word, e.g. {"word": "Americans,", "start": 1.68, "end": 3.28}. null where the language's model gives no word times (languages outside Parakeet's 25, and translation). |
speakers | With speakerLabels: how many speakers were heard (0 when no speech was found). |
speakerLabelsUnavailable | Only when speakerLabels was asked for on a run whose own pricing lacks speaker-labelled-minute (for example, an older run started before activation): why no labels were produced. The file was transcribed and charged per minute only. The current pricing includes the label event. |
error | {code, message} when ok is false. |
Limits and run time
- 1–20 URLs per run, processed one after another; each file up to 500 MB and 120 minutes (a longer file is refused as
too_longbefore it is decoded, uncharged). Speaker labels hold the whole recording in memory: a run labels up to 45 minutes per GB of its memory — 90 minutes at the default 2,048 MB, any file from 4,096 MB — and refuses a longer file astoo_long, uncharged, naming the memory it needs. - Each file has a download budget of 30 s plus 1 s per 2 MB of its size, so files download at 2 MB/s or faster; a download that sends nothing for 30 seconds is stopped. At most 2 requests a second go to one host.
- GitHub release links (
github.com/…/releases/download/…) are refused withrobots_disallowed: github.com's robots.txt disallows every user-agent it does not name (User-agent: *→Disallow: /), HermesBot included, and HermesBot obeys it. Put the file onraw.githubusercontent.com(a file committed to a repository) or your own storage and pass that URL. - The first audio track is transcribed; a video's picture is ignored. The file's own container is read — playlists and manifests (M3U, HLS, DASH) are not media files and are refused.
- Speech is found by voice-activity detection and transcribed in windows of up to 20 seconds of speech; silence costs almost no processing. The model follows the language: English by NVIDIA's Parakeet TDT 0.6B v2; Spanish, French, German, Bulgarian, Croatian, Czech, Danish, Dutch, Estonian, Finnish, Greek, Hungarian, Italian, Latvian, Lithuanian, Maltese, Polish, Portuguese, Romanian, Slovak, Slovenian, Swedish, Russian and Ukrainian by Parakeet TDT 0.6B v3; the other languages, and every translation, by OpenAI's Whisper base (windows of up to 28 seconds, segment times only). With
languageauto, Whisper base identifies the language from the first 30 seconds of speech. - Accuracy measured on 17 minutes of English (earnings calls, an audiobook reading and a speech; this Actor's build benchmark of 2026-10-27): 3.0% of words wrong with Parakeet v2, against 3.1% for Whisper large-v3-turbo and 10.1% for Whisper base. Speaker labels, measured on the six earnings-call clips their settings were tuned on (so not an independent test): no word given to the wrong speaker on three call openings (three speakers each), 7.9% on three question-and-answer sessions (five or six speakers each); two voices that sound alike can be merged or swapped, and very short interjections take the neighbouring speaker.
- Typical run time: the 11-second clip above in about 10–20 seconds, most of it loading the model. Continuous English speech takes about 9 seconds of one CPU core per minute of audio here (9.2 s on a 28-minute audiobook reading, 9.6 s on an earnings call), about 4 more with speaker labels, measured 2026-10-27 on a build machine whose cores run about 1.7 times as fast as the platform's; the default 2,048 MB run has half a core, so it transcribes a minute of continuous speech in about half a minute (about 45 seconds with speaker labels), and a recording of more than about 100 minutes of continuous speech (about 75 with speaker labels) needs more memory (4,096 MB is one core, 8,192 MB two) or a run timeout above the default 3,600 seconds. Speech runs one thread per core of the run's memory share (at least one, at most four). A file not finished within the run's time is
timeout, uncharged.
Errors
Errors are records with ok: false and error.code; none is charged.
error.code | Meaning |
|---|---|
download_failed | The URL did not return the file (status or network error), or the download was slower than its budget. |
no_audio_stream | No decodable audio: the file has no audio track (a silent video), or it is not audio or video media at all (text, HTML, a playlist) — anything ffprobe cannot open as a single media file. |
too_long | Over 120 minutes; or, with speaker labels, longer than the run's memory can label (45 minutes per GB: 90 minutes at the default 2,048 MB) — the message names the memory needed. |
too_large | Over 500 MB. |
unsupported_media | The file has an audio track, but its codec could not be decoded. |
robots_disallowed | robots.txt forbids fetching the URL. |
blocked_host | The host is on the deny-list (YouTube, TikTok, Instagram and other platforms whose terms forbid automated download), or resolves to a private or local address. |
timeout | The file did not finish within the run's time budget. |
internal_error | Unexpected failure; message carries the class. |
charge_limit_reached | The run's maximum total charge could not pay for this file's minutes; it was not transcribed. |
invalid_input | The run input passed the input schema but cannot be used (for example no URL at all); the message names the field. One record per input given, or one with url: null when none was given; nothing is processed. |
The run fails only when every input failed with an Actor-side code (internal_error, timeout), so a broken Actor is visible. Every other run succeeds — including one where nothing was transcribed because of the caller's own inputs (bad URL, robots, deny-list, no audio, too long, invalid input, the charge limit), or where those and Actor-side failures are mixed.
Sources and terms
The source is the caller's media. Process only media you have the right to process. Fetching follows the Hermes fetch policy: robots.txt is obeyed for the user-agent HermesBot (and *), and a disallowed URL is refused without a request; platforms whose terms forbid automated access — YouTube, TikTok, Instagram among them — and people-search sites are on a deny-list and refused without a request; private and local addresses are refused, after DNS and on every redirect; the user-agent is HermesBot/1.0 (+https://apify.com/hermeskd); no login, cookies, credentials, CAPTCHA solving, evasion or proxies are used. The words spoken are returned to the caller as they are; no speaker is named and no voice is identified — speaker labels are anonymous numbers within one file, and no voice data is kept after the run.
The models run inside the Actor; no audio leaves the run. Parakeet TDT 0.6B v2: NVIDIA, licensed CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); int8-quantised ONNX export by k2-fsa (sherpa-onnx), modified from NVIDIA's original. Parakeet TDT 0.6B v3: NVIDIA, licensed CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); int8-quantised ONNX export by k2-fsa (sherpa-onnx), modified from NVIDIA's original. The sherpa-onnx exports are published under Apache-2.0. Whisper base (OpenAI's weights, MIT licence) runs as sherpa-onnx's float32 ONNX export. Speaker labels use pyannote segmentation-3.0 (MIT licence, copyright 2022 CNRS; ONNX export by k2-fsa) and NVIDIA's TitaNet small (NVIDIA NeMo, Apache License 2.0 at https://www.apache.org/licenses/LICENSE-2.0 — ONNX export by k2-fsa); Silero VAD (MIT) finds speech and FFmpeg decodes. Each model file is checked against a pinned SHA-256 when the image is built.
Not affiliated
This Actor is not affiliated with NVIDIA, OpenAI, pyannote, the sherpa-onnx (k2-fsa) project, Silero or the FFmpeg project. Parakeet, TitaNet, Whisper, pyannote, sherpa-onnx, Silero VAD and FFmpeg are used under their open-source licences. YouTube, TikTok and Instagram are named only to say they are refused.
Related Hermes Actors
- AI Crawler Checker: Which AI Bots robots.txt Allows per URL — check declared robots.txt permissions for six AI crawlers at URL paths.
- Article Extractor — News & Blog Text, Date and Markdown by URL — an article's clean text, title and publish date, without the rest of the page.
- ATS Job Search — Jobs Confirmed Open on Company Career Boards — search open jobs in the Hermes directory of Greenhouse and Lever boards, each confirmed live.
- Video Converter — MP4 to MP3, Trim, GIF and Audio Extraction — audio and video conversion: MP4 to MP3, trim, GIF.
- Broken Links Checker — Links, Assets, Redirects and Their Pages — broken links, 404s and redirects on a site.
- ATS Detector — Company Hiring System & Job Board Lookup — which hiring system and job board a company uses.
- SEC EDGAR Filings — Recent Company Forms, Dates and XBRL Flags — Read recent company financial filing metadata from the official SEC JSON API
- DOI Lookup — Crossref Titles, Venues, Dates and Citation Counts — crossref doi metadata.
- CVE Vulnerability Lookup — NVD CVSS Scores and Exploited Flags — look up NVD CVE dates, status, numeric CVSS scores and severity.
- Merge JSON Datasets — Deduplicate Rows, Export JSON and CSV — json dataset cleaner.
- DNS Lookup — Records, SPF Lookup Counts, DKIM & DMARC by Domain — DNS records and SPF, DKIM and DMARC checks.
- DOCX to Markdown — Word, Excel, PowerPoint and EPUB Converter — Word, Excel, PowerPoint and other office files to Markdown.
- Domain Availability Checker — Bulk RDAP Status and Registrar — whether domain names are available, from registry RDAP.
- USGS Earthquake Lookup — Event Magnitude, Depth, Coordinates — Read numeric USGS earthquake metadata for known event identifiers.
- Currency Exchange Rates — ECB Daily Euro Rates and Cross Pairs — Read latest ECB daily currency reference rates and calculated cross pairs.
- Bulk File Downloader — Save URL Lists to Storage With SHA-256 — files and images from URLs, saved with a public link each.
- GitHub Repo Stats — Stars, Forks, Subscribers and Open Issues — Read numeric metrics for known public GitHub repositories.
- Greenhouse Jobs — Live Openings, Offices and Apply Links — every open job on a company's Greenhouse board.
- Hacker News Story Metrics — Scores, Comment Counts, Timestamps — read numeric Hacker News story scores, timestamps and comment counts by ID.
- HTTP GET Request — Bulk Response Bodies, Status and SHA-256 — public http get.
- Security Headers Checker — HSTS, CSP, Framing, Nosniff by URL — Check seven declared HTTP security header families without returning raw values.
- Image Background Remover — U2NetP Cutouts for JPEG, PNG, WebP — Remove image backgrounds with the small U2NetP model and return transparent PNG pixels as base64
- Image Converter — JPEG, PNG and WebP With Resize and Quality — image format converter.
- Image Metadata Remover — EXIF and GPS Scrub, Pixels Verified — GPS location, camera serial numbers and other private metadata removed from photos, losslessly.
- Image to Text OCR — Text With Word Positions and Confidence — OCR: the text in images.
- Image Upscaler — Real-ESRGAN 2x/4x for Photos and Graphics — image upscaling 2x or 4x, and photo restoration.
- Lever Jobs Scraper — Job Board Postings With Salary, US & EU — every published job on a company's Lever site, global or EU.
- Lighthouse Audit — Lab Web Vitals and Scores, Mobile & Desktop — Lighthouse scores and Core Web Vitals.
- npm Package Lookup — Latest Version, License, Dependency Count — read latest npm package versions, license tokens and dependency counts.
- Website Change Monitor — Page Text Diffs Against Your Snapshots — what changed on a page since the last check.
- PDF to Markdown — PDF Parser & Text Extractor With OCR — PDF to Markdown and text, with OCR for scanned pages.
- Public Holidays Calendar — Holiday Dates for Five Countries — build offline public-holiday calendars for five countries and bounded years.
- Remote Jobs Search — Remote OK Jobs by Keyword, Tag and Salary — current remote jobs from Remote OK, with salary and listing links.
- Research Paper Search — OpenAlex Papers, DOIs, Citation Counts — Search OpenAlex for work-level paper metadata without authors, affiliations, abstracts or full text
- RSS Feed Reader — Atom and JSON Feed Parser With Enclosures — every item of an RSS, Atom or JSON feed.
- SEO Audit — On-Page Score, Meta Tags, Schema & Fix Guidance — an on-page SEO audit: meta tags, schema, headings and links.
- Sitemap Extractor — Unique URLs From XML, Gzip & Index Sitemaps — the URLs in a site's sitemaps.
- Text to Speech — Offline English, German, Spanish WAV Voices — Convert short nonpersonal texts to offline formant WAV speech for agents
- Time Zone Converter API — Convert one offset-qualified instant to named IANA time zones using pinned data.
- URL to Markdown — Clean Text for LLM & RAG, With Selectors — a public job page as clean Markdown where the site allows it (deny-listed job sites are refused).
- Extract Video Frames — Timed Stills by Interval or Scene Cut — frames, thumbnails and scenes from a video.
- Website Color Palette — CSS Colors With Alpha and Usage Counts — Extract declared website CSS color literals and counts from public HTML and bounded linked stylesheets
- Favicon Extractor — Icons, Touch Icons, Manifests, Theme Color — declared website icons, theme colors and manifest links.
- Website Screenshot — Full Pages, Elements, Dark Mode & PDF — screenshots and PDF prints of web pages.
- Tech Stack Detector — Website Technologies With Match Evidence — the technologies a website runs, detected live.
- Website Crawler to Markdown — Same-Site Pages for LLM and RAG — bounded whole-site Markdown with robots and crawl-delay enforced
Changelog
- 1.0 (2026-10-27) — NVIDIA's Parakeet TDT 0.6B models replace Whisper base for English and 24 European languages (3.0% of words wrong instead of 10.1% on English); opt-in word timestamps (free) and speaker labels ($0.002 a minute); the minute price falls from $0.008 to $0.006. The speaker-labelled minute is charged only when a speaker is found. The new prices and speaker-label event took effect on 2026-10-28; labels are available now. Runs whose own pricing lacks the label event return no labels and explain why.
- 1.0 (2026-10-26) — store listing rewritten for the people and agents searching for this job: title, description, search-engine title and description, categories, and the README in the order a searcher reads it (what it does, a real result, how to use it, prices, the agent call).
- 1.0 (2026-10-16) — first release: speech in 99 languages to text with segment timestamps, SRT and WebVTT subtitles, English translation; Whisper base with voice-activity detection.