Podcast Transcript API

Transcripciones de episodios de pódcast desde feeds RSS: transcripciones gratuitas del editor cuando estén disponibles; de lo contrario, conversión de voz a texto con Whisper. JSON, texto, SRT, VTT.

Servidor MCP alojado

npx add-mcp 'https://mcp.apify.com/?actors=catalyst-labs/podcast-transcript-api'

Se instala en Claude Code, Codex, Cursor y más

Documentación

API de transcripciones de pódcasts - Actor de RSS, Apple Podcasts y audio a texto (catalyst-labs/podcast-transcript-api)

Obtén transcripciones de pódcasts y audio como texto, segmentos con marcas de tiempo, SRT/VTT y Markdown. Entrada: feeds RSS, enlaces de Apple Podcasts, páginas de episodios o URLs de audio/vídeo. Usa la transcripción propia del editor cuando existe ($0.01); en caso contrario, usa el reconocimiento de voz Whisper.

Precios

desde $10.00 / 1,000 transcripciones de episodio (editor)

Este Actor se paga por evento. No se te cobra por el uso de la plataforma Apify, sino solo un precio fijo por eventos específicos. Como este Actor admite descuentos de Apify Store, el precio baja cuanto mayor sea tu plan de suscripción.

Más información: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

¿Qué es un Actor de Apify?

Un Actor es un programa en la nube sin servidor que se ejecuta en la plataforma Apify. Tiene dos modos de ejecución. En el modo por lotes, un Actor acepta una entrada JSON bien definida, realiza una acción que puede durar desde unos segundos hasta unas horas y, opcionalmente, produce una salida JSON bien definida, conjuntos de datos con resultados o archivos en el almacén clave-valor. En el modo en espera, un Actor proporciona un servidor web que puede usarse como sitio web, API o servidor MCP.

El vocabulario de Apify y el modelo de la plataforma se definen una sola vez, en la guía de inicio rápido para agentes en https://apify.com/agents.md.

¿Cómo integrar un Actor?

Si te preguntan sobre integración, ayudas a los desarrolladores a integrar Actores en sus proyectos. Te adaptas a su stack y entregas integraciones seguras, bien documentadas y listas para producción.

No adivines una ruta de integración. Todas ellas están en la guía de inicio rápido para agentes en https://apify.com/agents.md:: el servidor MCP de Apify, Agent Skills con la CLI de Apify, los clientes de JavaScript y Python, la API REST y la ruta sin cuenta para un agente sin humano que inicie sesión. También incluye la regla sobre indicar el coste antes de la primera ejecución de pago.

Para ver ejemplos ya conectados al esquema de entrada de este Actor, consulta la sección API a continuación.

Cada biblioteca cliente tiene documentación de referencia que la guía de inicio rápido no repite: JavaScript/TypeScript (npm install apify-client) y Python (pip install apify-client).

README

API de transcripciones de pódcasts: RSS, Apple Podcasts y audio a texto

Obtén una transcripción de cualquier episodio de pódcast o archivo de audio/vídeo como texto plano, segmentos con marcas de tiempo, SRT, VTT, texto listo para LLM y Markdown, con metadatos del episodio. Cuando el programa publica su propia transcripción (la etiqueta podcast:transcript de Podcasting 2.0), obtienes esa por un precio fijo de $0.01 por episodio. En caso contrario, el audio se transcribe con Whisper large-v3 (turbo como alternativa automática) y se factura por minuto de audio.

Para agentes de IA

  • Qué hace: entra un feed RSS de pódcast / enlace de Apple Podcasts / página de episodio / URL de audio, y sale un registro de transcripción por episodio.
  • Entrada mínima: {"sources": ["https://podnews.net/rss"], "maxEpisodesPerFeed": 1}
  • Primera llamada económica: la entrada anterior devuelve el episodio más reciente de Podnews a partir de la transcripción de su editor: $0.01.
  • Herramienta MCP: catalyst-labs--podcast-transcript-api (a través de https://mcp.apify.com/?tools=catalyst-labs/podcast-transcript-api).
  • Controles de coste: maxEpisodesPerFeed (por defecto 3), maxAudioMinutes (por defecto 120 minutos de reconocimiento de voz por ejecución), maxMinutesPerEpisode (por defecto 180), transcriptMode: "publisherOnly" (nunca transcribe), además de la opción de ejecución maxTotalChargeUsd. La ejecución comprueba el presupuesto antes de transcribir cada episodio, por lo que nunca se excede.
  • Campos clave de salida: transcriptSource (publisher | speechToText), text, llmText, segments[{start,end,text,speaker}], srt, vtt, markdown, speakers, chapters, language, durationSeconds, chargedEvent, chargedMinutes; los fallos incluyen errorType, retryable, hint.
  • Límites conocidos: los programas exclusivos de Spotify y de suscripción de Apple no tienen audio público (se rechazan, no se cobran; pasa el feed RSS). Enlaces de YouTube: usa catalyst-labs/youtube-transcript-api. El reconocimiento de voz no tiene etiquetas de hablante (las transcripciones del editor conservan las suyas).

Cuándo elegir esta herramienta

  • Elige esta herramienta cuando necesites ambas rutas en una sola llamada: transcripciones del editor cuando existan (económicas, con etiquetas de hablante, exactas) y reconocimiento de voz para todo lo demás, con transcriptSource indicándote cuál obtuviste.
  • Elígela cuando partas de lo que la gente comparte realmente: feeds RSS, enlaces de programas o episodios de Apple Podcasts, páginas web de episodios (el feed y el audio se encuentran por ti) o enlaces directos a archivos.
  • Elígela para episodios largos: el audio se recodifica a 16 kHz mono y se divide en fragmentos solapados de 10 minutos, que luego se unen en los puntos medios de los segmentos, de modo que programas de 2-3 horas funcionan sin errores de tamaño ni líneas duplicadas en las uniones.
  • Elígela para monitorización: onlyNewEpisodes recuerda lo que se entregó, por lo que una ejecución programada devuelve cada episodio nuevo una sola vez.
  • Elígela para pipelines de agentes y RAG: llmText (muletillas y tartamudeos eliminados), Markdown con marcas de tiempo enlazadas, un TRANSCRIPTS.md combinado, capítulos cuando se publican.
  • Nunca se cobra: enlaces no válidos o no compatibles, feeds/archivos que no se pueden alcanzar o decodificar, audio sin voz, episodios omitidos por límites, filtros o modo de monitorización, y cualquier episodio fallido.
  • Resultados de QA: consulta "Probado" a continuación.

Elige una herramienta diferente cuando necesites etiquetas de hablante en la salida de reconocimiento de voz (diarización), traducción al inglés o programas exclusivos de Spotify.

Precios (pago por evento, sin cuota de inicio)

EventoFreeBronzeSilverGold+
Transcripción de episodio (editor)$0.01$0.01$0.01$0.01
Minuto de audio transcrito$0.009$0.008$0.007$0.006

Los minutos se redondean hacia arriba una vez por episodio (un episodio de 30 min 10 s = 31 minutos). Un episodio de 60 minutos sin transcripción del editor cuesta $0.54 en Free. Un feed con transcripciones del editor cuesta $0.01 por episodio, sea cual sea su duración.

Entrada

CampoPor defectoQué hace
sources(obligatorio)Feeds, enlaces de Apple, páginas de episodios, URLs de audio/vídeo
maxEpisodesPerFeed3Los N más recientes por feed (0 = todos)
transcriptModeautoauto, publisherOnly, speechToText
maxAudioMinutes120Límite de reconocimiento de voz por ejecución
maxMinutesPerEpisode / truncateLongEpisodes180 / falseOmitir o truncar episodios muy largos
onlyNewEpisodes / monitorIdfalseModo de monitorización
publishedAfter, titleFilterFiltros de episodios
languageautoIdioma de la transcripción del editor y pista de idioma para STT
vocabularyNombres/términos que deben escribirse correctamente (siempre se usan los títulos del programa y del episodio)
outputFormatsalltext, segments, llmText, srt, vtt, markdown
includeChapterstrueCapítulos de Podcasting 2.0

Ejemplo de salida

{ "status": "succeeded", "podcastTitle": "Podnews Daily", "episodeTitle": "WTF returns in visual form", "publishedAt": "2026-10-20T07:00:00.000Z",
  "durationSeconds": 356, "transcriptSource": "publisher", "publisherFormat": "vtt", "language": "en-gb", "wordCount": 880,
  "segments": [{ "start": 0, "end": 4.2, "text": "From our free daily newsletter..." }], "chargedEvent": "publisher-transcript", "charged": true }

El registro OUTPUT resume la ejecución: recuentos, audioMinutesCharged, errorTypes, stoppedBy.

Probado

Probado en la nube el 20 de octubre de 2026 (build 1.0.8): 16/16 casos de lanzamiento superados, en 11 hosts de pódcasts y transcripciones SRT, VTT, JSON y HTML en inglés, alemán y español; enlaces de programas y episodios de Apple; páginas de episodios; límites de gasto; y entradas no válidas. Los eventos cobrados coincidieron con los registros entregados en cada ejecución, y no se cobró ninguna fila fallida.

  • Tasa de error de palabras del reconocimiento de voz frente a la transcripción del propio editor: inglés 2.4% y 3.0%, español 10.2%, alemán 16.9% (gran parte de la diferencia se debe a la escritura de números y a errores en la referencia).
  • Episodios largos: un episodio de 100 minutos se transcribe en unos 25 segundos, con fragmentos cortados en las pausas.
  • Limitaciones: los programas solo de Spotify no son compatibles. La salida de reconocimiento de voz no tiene etiquetas de hablante.

Preguntas frecuentes

¿Es preciso el reconocimiento de voz? Usa Whisper large-v3 (turbo como alternativa automática). Consulta la tasa de error de palabras medida en "Probado". Los nombres mejoran cuando los pasas en vocabulary. ¿Almacenáis el audio? No. El audio se procesa en el almacenamiento temporal de la ejecución y se elimina cuando el episodio termina. Derechos de autor: las transcripciones pertenecen a los programas. Úsalas para investigación, búsqueda, accesibilidad y uso personal; cita el programa cuando las cites.

Esquema de entrada del Actor

sources (tipo: array):

URLs de feeds RSS de pódcasts, enlaces de programas o episodios de Apple Podcasts, páginas web de episodios o URLs directas de archivos de audio/vídeo (mp3, m4a, mp4, wav...). Los feeds devuelven los episodios más recientes (consulta maxEpisodesPerFeed). Los enlaces de Spotify y YouTube no son compatibles. Ejemplo: ["https://feeds.buzzsprout.com/1.rss", "https://podcasts.apple.com/us/podcast/id1584274529"\]

maxEpisodesPerFeed (tipo: integer):

Los N episodios más recientes tomados de cada feed o enlace de programa de Apple. 0 = todos los episodios del feed. Ejemplo: 5

transcriptMode (tipo: string):

auto: usa la transcripción de Podcasting 2.0 del editor ($0.01 por episodio) y transcribe solo cuando no existe ninguna (por minuto de audio). publisherOnly: nunca ejecuta reconocimiento de voz. speechToText: siempre transcribe.

maxAudioMinutes (tipo: integer):

Límite máximo de minutos de reconocimiento de voz facturados en esta ejecución; los episodios que lo superarían se omiten (no se cobran, se pueden reintentar). 0 = solo transcripciones del editor. Combínalo con la opción de ejecución maxTotalChargeUsd. Ejemplo: 300

maxMinutesPerEpisode (tipo: integer):

Los episodios más largos que esto se omiten (no se cobran), o se transcriben solo hasta esta duración cuando truncateLongEpisodes está activado. Ejemplo: 240

truncateLongEpisodes (tipo: boolean):

Cuando un episodio es más largo que maxMinutesPerEpisode, transcribe y factura solo sus primeros maxMinutesPerEpisode minutos (registro marcado con truncated: true) en lugar de omitirlo.

onlyNewEpisodes (tipo: boolean):

Recuerda los episodios entregados y los omite en ejecuciones posteriores (nunca se cobran dos veces). Úsalo con una programación para obtener cada episodio nuevo una sola vez.

monitorId (tipo: string):

Nombre opcional para la memoria de onlyNewEpisodes, para que varias programaciones puedan seguir los mismos feeds por separado. Por defecto, la lista de fuentes. Ejemplo: "weekly-news-shows"

publishedAfter (tipo: string):

Solo episodios publicados en esta fecha o después (AAAA-MM-DD). Ejemplo: "2026-10-01"

titleFilter (tipo: string):

Solo episodios cuyo título contenga este texto (sin distinguir mayúsculas y minúsculas). Ejemplo: "interview"

language (tipo: string):

Código ISO 639-1 opcional (en, es, de...). Elige la transcripción del editor en ese idioma e indica al reconocimiento de voz el idioma hablado. Vacío = detección automática (unos 100 idiomas).

vocabulary (tipo: array):

Nombres de invitados, marcas y jerga que se pasan al reconocimiento de voz para que se escriban correctamente. Siempre se usan los títulos del programa y del episodio. Ejemplo: ["Adam Curry", "Podcasting 2.0", "Fountain"]

outputFormats (tipo: array):

Campos que se incluyen por episodio: text (párrafos, con etiquetas de hablante cuando se conocen), segments (segundos de inicio/fin, hablante), llmText (muletillas eliminadas), srt, vtt, markdown (también combinados en TRANSCRIPTS.md). Mismo precio para cualquier combinación.

includeChapters (tipo: boolean):

Añade los capítulos de Podcasting 2.0 del episodio (inicio, título) cuando el feed los publica. Gratis.

Ejemplo de objeto de entrada del Actor

{
  "sources": [
    "https://podnews.net/rss"
  ],
  "maxEpisodesPerFeed": 1,
  "transcriptMode": "auto",
  "maxAudioMinutes": 120,
  "maxMinutesPerEpisode": 180,
  "truncateLongEpisodes": false,
  "onlyNewEpisodes": false,
  "outputFormats": [
    "text",
    "segments",
    "llmText",
    "srt",
    "vtt",
    "markdown"
  ],
  "includeChapters": true
}

Esquema de salida del Actor

transcripts (tipo: string):

Registros con text, llmText, segments, SRT/VTT, Markdown, capítulos y metadatos del episodio.

summary (tipo: string):

Recuentos, tipos de error, minutos de audio facturados, stoppedBy.

markdown (tipo: string):

Todas las transcripciones entregadas en un único archivo Markdown (cuando outputFormats incluye markdown).

API

Puedes ejecutar este Actor mediante programación usando nuestra API. A continuación se muestran ejemplos de código en JavaScript, Python y CLI, así como la especificación OpenAPI y la configuración del servidor MCP.

Ejemplo en JavaScript

import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sources": [
        "https://podnews.net/rss"
    ],
    "maxEpisodesPerFeed": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("catalyst-labs/podcast-transcript-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

Ejemplo en Python

from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sources": ["https://podnews.net/rss"],
    "maxEpisodesPerFeed": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("catalyst-labs/podcast-transcript-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

Ejemplo en CLI

echo '{
  "sources": [
    "https://podnews.net/rss"
  ],
  "maxEpisodesPerFeed": 1
}' |
apify call catalyst-labs/podcast-transcript-api --silent --output-dataset

Configuración del servidor MCP

{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,catalyst-labs/podcast-transcript-api"
        }
    }
}

El servidor alojado te autentica con OAuth en la primera conexión, por lo que ningún token de API debe incluirse en esta configuración. Los clientes sin compatibilidad con OAuth pueden enviar en su lugar un encabezado Authorization: Bearer <APIFY_API_TOKEN>, usando un token de API e integraciones en Apify Console (https://console.apify.com/settings/integrations).

Especificación OpenAPI

Descarga la definición OpenAPI: https://api.apify.com/v2/actors/5jdK5z2K6EbJoWdZd/builds/cZTcV0iM37Fy2lx9g/openapi.json