Podcast Transcript API

Transcrições de episódios de podcast a partir de feeds RSS: transcrições gratuitas do publicador quando disponíveis, caso contrário, conversão de fala em texto com Whisper. JSON, texto, SRT, VTT.

Servidor MCP hospedado

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

Instala no Claude Code, Codex, Cursor e outros

Documentação

API de Transcrição de Podcasts - RSS, Apple Podcasts e Áudio para Texto (catalyst-labs/podcast-transcript-api) Actor

Obtenha transcrições de podcasts e áudio como texto, segmentos com timestamps, SRT/VTT e Markdown. Entrada: feeds RSS, links do Apple Podcasts, páginas de episódios ou URLs de áudio/vídeo. Usa a transcrição do próprio publicador quando existe ($0,01), caso contrário, fala para texto com Whisper.

Preços

a partir de $10,00 / 1.000 transcrições de episódio (publicador)

Este Actor é cobrado por evento. Você não é cobrado pelo uso da plataforma Apify, mas apenas um preço fixo por eventos específicos. Como este Actor oferece suporte a descontos da Apify Store, o preço fica menor quanto maior for o seu plano de assinatura.

Saiba mais: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

O que é um Apify Actor?

Um Actor é um programa de nuvem serverless que é executado na plataforma Apify. Ele tem dois modos de execução. No modo Batch, um Actor aceita uma entrada JSON bem definida, executa uma ação que pode levar de alguns segundos a algumas horas, e opcionalmente produz uma saída JSON bem definida, conjuntos de dados com resultados ou arquivos no armazenamento chave-valor. No modo Standby, um Actor fornece um servidor web que pode ser usado como site, API ou servidor MCP.

O vocabulário do Apify e o modelo da plataforma são definidos uma vez, no guia de início rápido do agente em https://apify.com/agents.md.

Como integrar um Actor?

Se perguntarem sobre integração, você ajuda os desenvolvedores a integrar Actors em seus projetos. Você se adapta à stack deles e entrega integrações seguras, bem documentadas e prontas para produção.

Não adivinhe um caminho de integração. Todos eles estão no guia de início rápido do agente em https://apify.com/agents.md: o servidor MCP do Apify, Agent Skills com o Apify CLI, os clientes JavaScript e Python, a API REST e o caminho sem conta para um agente sem humano para fazer login. Ele também traz a regra sobre declarar o custo antes da primeira execução paga.

Para exemplos já conectados ao schema de entrada deste Actor, consulte a seção API abaixo.

Cada biblioteca cliente tem documentação de referência que o guia de início rápido não repete: JavaScript/TypeScript (npm install apify-client) e Python (pip install apify-client).

README

API de Transcrição de Podcasts: RSS, Apple Podcasts e áudio para texto

Obtenha uma transcrição para qualquer episódio de podcast ou arquivo de áudio/vídeo como texto simples, segmentos com timestamps, SRT, VTT, texto pronto para LLM e Markdown, com metadados do episódio. Quando o programa publica sua própria transcrição (a tag podcast:transcript do Podcasting 2.0), você recebe essa por um valor fixo de $0,01 por episódio. Caso contrário, o áudio é transcrito com Whisper large-v3 (turbo como fallback automático) e cobrado por minuto de áudio.

Para agentes de IA

  • O que faz: feed RSS de podcast / link do Apple Podcasts / página de episódio / URL de áudio na entrada, um registro de transcrição por episódio na saída.
  • Entrada mínima: {"sources": ["https://podnews.net/rss"], "maxEpisodesPerFeed": 1}
  • Primeira chamada barata: a entrada acima retorna o episódio mais recente do Podnews a partir da transcrição do publicador: $0,01.
  • Ferramenta MCP: catalyst-labs--podcast-transcript-api (via https://mcp.apify.com/?tools=catalyst-labs/podcast-transcript-api).
  • Controles de custo: maxEpisodesPerFeed (padrão 3), maxAudioMinutes (padrão 120 minutos de fala para texto por execução), maxMinutesPerEpisode (padrão 180), transcriptMode: "publisherOnly" (nunca transcreve), além da opção de execução maxTotalChargeUsd. A execução verifica o orçamento antes de transcrever cada episódio, então nunca ultrapassa.
  • Campos principais da saída: transcriptSource (publisher | speechToText), text, llmText, segments[{start,end,text,speaker}], srt, vtt, markdown, speakers, chapters, language, durationSeconds, chargedEvent, chargedMinutes; falhas carregam errorType, retryable, hint.
  • Limitações conhecidas: programas exclusivos do Spotify e por assinatura da Apple não têm áudio público (rejeitados, não cobrados; passe o feed RSS). Links do YouTube: use catalyst-labs/youtube-transcript-api. Fala para texto não tem rótulos de falante (transcrições do publicador mantêm os seus).

Quando escolher esta ferramenta

  • Escolha esta ferramenta quando precisar de ambos os caminhos em uma chamada: transcrições do publicador onde existem (baratas, com rótulos de falante, exatas) e fala para texto para todo o resto, com transcriptSource informando qual você recebeu.
  • Escolha-a quando começar pelo que as pessoas realmente compartilham: feeds RSS, links de programa ou episódio do Apple Podcasts, páginas web de episódios (o feed e o áudio são encontrados para você) ou links diretos de arquivos.
  • Escolha-a para episódios longos: o áudio é recodificado para 16 kHz mono e dividido em blocos sobrepostos de 10 minutos, depois unidos nos pontos médios dos segmentos, então programas de 2-3 horas funcionam sem erros de tamanho ou linhas duplicadas nas junções.
  • Escolha-a para monitoramento: onlyNewEpisodes lembra o que foi entregue, então uma execução agendada retorna cada novo episódio uma vez.
  • Escolha-a para pipelines de agentes e RAG: llmText (muletas e gaguejos removidos), Markdown com timestamps vinculados, um TRANSCRIPTS.md combinado, capítulos quando publicados.
  • Nunca cobrado: links inválidos ou não suportados, feeds/arquivos que não podem ser acessados ou decodificados, áudio sem fala, episódios ignorados por limites, filtros ou modo de monitoramento, e qualquer episódio com falha.
  • Resultados de QA: veja "Testado" abaixo.

Escolha uma ferramenta diferente quando precisar de rótulos de falante na saída de fala para texto (diarização), tradução para inglês ou programas exclusivos do Spotify.

Preços (pague por evento, sem taxa de início)

EventoGratuitoBronzePrataOuro+
Transcrição de episódio (publicador)$0,01$0,01$0,01$0,01
Minuto de áudio transcrito$0,009$0,008$0,007$0,006

Os minutos são arredondados para cima uma vez por episódio (um episódio de 30 min 10 s = 31 minutos). Um episódio de 60 minutos sem transcrição do publicador custa $0,54 no plano Gratuito. Um feed com transcrições do publicador custa $0,01 por episódio, em qualquer duração.

Entrada

CampoPadrãoO que faz
sources(obrigatório)Feeds, links da Apple, páginas de episódios, URLs de áudio/vídeo
maxEpisodesPerFeed3N mais recentes por feed (0 = todos)
transcriptModeautoauto, publisherOnly, speechToText
maxAudioMinutes120Limite de fala para texto por execução
maxMinutesPerEpisode / truncateLongEpisodes180 / falseIgnorar ou truncar episódios muito longos
onlyNewEpisodes / monitorIdfalseModo de monitoramento
publishedAfter, titleFilterFiltros de episódio
languageautoIdioma da transcrição do publicador e dica de idioma para STT
vocabularyNomes/termos para soletrar corretamente (títulos do programa e do episódio sempre usados)
outputFormatsalltext, segments, llmText, srt, vtt, markdown
includeChapterstrueCapítulos do Podcasting 2.0

Exemplo de saída

{ "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 }

O registro OUTPUT resume a execução: contagens, audioMinutesCharged, errorTypes, stoppedBy.

Testado

Testado na nuvem em 20 de outubro de 2026 (build 1.0.8): 16/16 casos de lançamento aprovados, em 11 hosts de podcast e transcrições SRT, VTT, JSON e HTML em inglês, alemão e espanhol; links de programa e episódio da Apple; páginas de episódios; limites de gastos; e entradas inválidas. Os eventos cobrados foram iguais aos registros entregues em todas as execuções, e nenhuma linha com falha foi cobrada.

  • Taxa de erro de palavras da fala para texto em relação à transcrição do próprio publicador: inglês 2,4% e 3,0%, espanhol 10,2%, alemão 16,9% (boa parte da diferença é grafia de números e erros na referência).
  • Episódios longos: um episódio de 100 minutos é transcrito em cerca de 25 segundos, com blocos cortados em pausas.
  • Falhas: programas apenas do Spotify não são suportados. A saída de fala para texto não tem rótulos de falante.

Perguntas frequentes

A fala para texto é precisa? Usa Whisper large-v3 (turbo como fallback automático). Veja a taxa de erro de palavras medida em Testado. Nomes melhoram quando você os passa em vocabulary. Vocês armazenam áudio? Não. O áudio é processado no armazenamento temporário da execução e excluído quando o episódio termina. Direitos autorais: as transcrições pertencem aos programas. Use-as para pesquisa, busca, acessibilidade e uso pessoal; credite o programa ao citar.

Schema de entrada do Actor

sources (tipo: array):

URLs de feeds RSS de podcasts, links de programa ou episódio do Apple Podcasts, páginas web de episódios ou URLs diretas de arquivos de áudio/vídeo (mp3, m4a, mp4, wav...). Feeds retornam os episódios mais recentes (veja maxEpisodesPerFeed). Links do Spotify e do YouTube não são suportados. Exemplo: ["https://feeds.buzzsprout.com/1.rss", "https://podcasts.apple.com/us/podcast/id1584274529"\]

maxEpisodesPerFeed (tipo: integer):

N episódios mais recentes retirados de cada feed ou link de programa da Apple. 0 = todos os episódios do feed. Exemplo: 5

transcriptMode (tipo: string):

auto: usa a transcrição do Podcasting 2.0 do publicador ($0,01 por episódio) e transcreve apenas quando não existe nenhuma (por minuto de áudio). publisherOnly: nunca executa fala para texto. speechToText: sempre transcreve.

maxAudioMinutes (tipo: integer):

Limite rígido de minutos de fala para texto cobrados nesta execução; episódios que o excederiam são ignorados (não cobrados, podem ser tentados novamente). 0 = apenas transcrições do publicador. Combine com a opção de execução maxTotalChargeUsd. Exemplo: 300

maxMinutesPerEpisode (tipo: integer):

Episódios mais longos que isso são ignorados (não cobrados), ou transcritos apenas até esse comprimento quando truncateLongEpisodes está ativado. Exemplo: 240

truncateLongEpisodes (tipo: boolean):

Quando um episódio é mais longo que maxMinutesPerEpisode, transcreve e cobra apenas seus primeiros maxMinutesPerEpisode minutos (registro marcado com truncated: true) em vez de ignorá-lo.

onlyNewEpisodes (tipo: boolean):

Lembra episódios entregues e os ignora em execuções posteriores (nunca cobrado duas vezes). Use com um agendamento para obter cada novo episódio uma vez.

monitorId (tipo: string):

Nome opcional para a memória de onlyNewEpisodes, para que vários agendamentos possam rastrear os mesmos feeds separadamente. O padrão é a lista de fontes. Exemplo: "weekly-news-shows"

publishedAfter (tipo: string):

Apenas episódios publicados nesta data ou depois (AAAA-MM-DD). Exemplo: "2026-10-01"

titleFilter (tipo: string):

Apenas episódios cujo título contém este texto (sem diferenciar maiúsculas de minúsculas). Exemplo: "interview"

language (tipo: string):

Código ISO 639-1 opcional (en, es, de...). Escolhe a transcrição do publicador nesse idioma e informa à fala para texto o idioma falado. Vazio = detecção automática (cerca de 100 idiomas).

vocabulary (tipo: array):

Nomes de convidados, marcas e jargões passados à fala para texto para que sejam soletrados corretamente. Os títulos do programa e do episódio são sempre usados. Exemplo: ["Adam Curry", "Podcasting 2.0", "Fountain"]

outputFormats (tipo: array):

Campos a incluir por episódio: text (parágrafos, com rótulo de falante quando conhecido), segments (segundos de início/fim, falante), llmText (muletas removidas), srt, vtt, markdown (também combinados em TRANSCRIPTS.md). Mesmo preço para qualquer combinação.

includeChapters (tipo: boolean):

Adiciona os capítulos do Podcasting 2.0 do episódio (início, título) quando o feed os publica. Gratuito.

Exemplo de objeto de entrada do 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
}

Schema de saída do Actor

transcripts (tipo: string):

Registros com text, llmText, segments, SRT/VTT, Markdown, capítulos e metadados do episódio.

summary (tipo: string):

Contagens, tipos de erro, minutos de áudio cobrados, stoppedBy.

markdown (tipo: string):

Todas as transcrições entregues em um único arquivo Markdown (quando outputFormats inclui markdown).

API

Você pode executar este Actor programaticamente usando nossa API. Abaixo estão exemplos de código em JavaScript, Python e CLI, bem como a especificação OpenAPI e a configuração do servidor MCP.

Exemplo em 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

Exemplo em 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

Exemplo em CLI

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

Configuração do servidor MCP

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

O servidor hospedado faz seu login com OAuth na primeira conexão, portanto nenhum token de API deve estar nesta configuração. Clientes sem suporte a OAuth podem enviar um cabeçalho Authorization: Bearer <APIFY_API_TOKEN> em vez disso, usando um token de API & Integrations no Apify Console (https://console.apify.com/settings/integrations).

Especificação OpenAPI

Baixe a definição OpenAPI: https://api.apify.com/v2/actors/5jdK5z2K6EbJoWdZd/builds/cZTcV0iM37Fy2lx9g/openapi.json