Podcast Transcript Scraper — Text, SRT & JSON avatar

Podcast Transcript Scraper — Text, SRT & JSON

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Podcast Transcript Scraper — Text, SRT & JSON

Podcast Transcript Scraper — Text, SRT & JSON

Discover podcasts through iTunes or provide an RSS/Apple Podcasts URL, then extract episode metadata and Podcasting 2.0 transcript files. Export transcript text, SRT, or JSON when feeds publish transcript links.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

North Glass Labs

North Glass Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

5 days ago

Last modified

Categories

Share

Scrape podcast episode transcripts from any podcast's RSS feed. Search by keyword via the iTunes Search API or provide a direct podcast / RSS feed / Apple Podcasts URL. Export transcripts as plain text, SRT subtitles, or structured JSON. Includes full episode metadata — title, duration, publish date, season, episode number, and podcast name.

What it does

The Podcast Transcript Scraper actor extracts full-episode transcripts from podcasts using the iTunes Search API (for podcast discovery) and standard RSS feeds (for episode listings and transcript files). It supports the Podcast Namespace 2.0 <podcast:transcript> tag — the modern standard for transcript distribution — and automatically downloads, parses, and formats transcripts in your preferred output format.

Each episode returned includes the episode title, full transcript text, transcript format descriptor, duration, publish date, podcast name, episode description (cleaned of HTML), audio URL, season and episode numbers, and the podcast's metadata (title, description, author, language, categories, and artwork URL). The actor prioritizes episodes that include <podcast:transcript> tags and processes those first.

Transcripts can be exported as plain text (stripped of timing data for NLP and search indexing), SRT subtitles (timestamped segments for video/audio captioning), or JSON (structured format with text fields for programmatic processing). The actor handles source transcripts in plain text, SRT, and WebVTT formats, converting between them as needed.

This makes the actor ideal for content repurposing (turn podcast episodes into blog posts, newsletters, or social media content), accessibility (generate SRT subtitles for audio/video content), NLP and AI training data collection, and building searchable transcript databases.

Input parameters

ParameterTypeRequiredDefaultDescription
searchQuerystringNo¹""Search query to find podcasts via the iTunes Search API. Used when podcastUrl is not provided.
podcastUrlstringNo¹""Direct URL to a podcast RSS feed, Apple Podcasts link (e.g. podcasts.apple.com/.../id123456), or episode page. Takes priority over searchQuery.
maxEpisodesintegerNo10Maximum number of episodes to scrape transcripts for (1–100).
formatstringNotextOutput format for transcripts: text, srt, or json.

¹ Either podcastUrl or searchQuery must be provided — at least one is required. If podcastUrl is provided, it takes priority and searchQuery is ignored.

Output fields

Each result item pushed to the dataset contains:

FieldTypeDescription
episodeTitlestring | nullTitle of the podcast episode
podcastNamestring | nullName of the podcast (from RSS feed / iTunes metadata)
transcriptstringFull transcript text in the requested format (text, srt, or json)
transcriptFormatstringFormat of the transcript field: text, srt, or json
durationstring | nullEpisode duration in HH:MM:SS or MM:SS format (from iTunes/RSS itunes:duration tag)
durationSecondsinteger | nullEpisode duration converted to total seconds (when parseable)
publishDatestring | nullEpisode publish date (from RSS pubDate tag)
urlstring | nullDirect URL to the episode page
descriptionstringEpisode description / show notes (cleaned of HTML)
audioUrlstring | nullDirect URL to the episode audio file (enclosure)
seasoninteger | nullSeason number (from itunes:season tag, when available)
episodeNumberinteger | nullEpisode number (from itunes:episode tag, when available)
episodeGuidstring | nullUnique episode identifier (from RSS guid tag)
episodeTypestring | nullEpisode type: full, trailer, or bonus (from itunes:episodeType)

Note: Podcast-level metadata fields (title, description, author, language, categories, image URL) are also included on each episode record when available.

Use cases

  • Content repurposing — turn podcast episodes into blog posts, newsletters, social media threads, or summary articles
  • Accessibility — generate SRT subtitle files for audio and video content produced from podcast episodes
  • Search & indexing — build a searchable transcript database so listeners can find content by keyword
  • Sentiment analysis — analyze podcast discussions for brand mentions, opinions, and trending topics
  • AI training data — collect high-quality podcast transcript text for fine-tuning NLP and LLM models
  • SEO — publish transcripts alongside podcast episodes for improved search engine visibility and organic traffic

How it works

The actor operates in a multi-stage pipeline using the iTunes Search API and podcast RSS feeds:

  1. Discovery — If a podcastUrl is provided, the actor detects whether it's a raw RSS feed URL (ends in .xml / .rss or contains /rss), an Apple Podcasts link (extracts the /id<number> and looks up the feed URL via the iTunes Lookup API), or a generic page URL (fetches and checks the content type). If only a searchQuery is provided, the actor searches the iTunes Search API (itunes.apple.com/search) and uses the top result's feedUrl.

  2. RSS parsing — The actor fetches and parses the podcast's RSS feed XML using Python's ElementTree. It extracts podcast-level metadata (title, description, author, language, image, categories) and iterates over all <item> elements to build a list of episodes with titles, descriptions, durations, audio URLs, episode numbers, and more.

  3. Transcript extraction — For each <item>, the actor looks for <podcast:transcript> tags (from the Podcast Namespace 2.0 spec). These tags link to external transcript files in plain text, SRT, or WebVTT format. The actor prioritizes episodes with transcript tags and processes those first. For each transcript URL, it fetches the file, detects the source format, and converts it to your requested output format (text, srt, or json).

  4. Output — Each episode record (with merged podcast metadata) is pushed to the Apify dataset. A polite 0.5-second delay is applied between episode-level requests.

Note: Not all podcasts include <podcast:transcript> tags. Episodes without transcript links are still returned with their metadata and descriptions — the transcript field will be empty for those episodes. Popular podcasts like Darknet Diaries, Acquired, and others that adopt the Podcast Namespace 2.0 spec will have transcript data available.

Example usage

Example input

{
"searchQuery": "Lex Fridman podcast",
"maxEpisodes": 5,
"format": "srt"
}

Example output (SRT format)

{
"episodeTitle": "Episode #412 — AI and the Future of Work",
"podcastName": "Lex Fridman Podcast",
"transcript": "1\n00:00:00 --> 00:00:10\nWelcome to the show. Today we're discussing AI and its impact.\n\n2\n00:00:10 --> 00:00:20\nLet me start by asking about your background in the field.\n",
"transcriptFormat": "srt",
"duration": "1:45:30",
"durationSeconds": 6330,
"publishDate": "Mon, 15 Jun 2025 14:00:00 GMT",
"url": "https://lexfridman.com/episode-412",
"description": "In this episode, we explore the future of work in the age of AI...",
"audioUrl": "https://media.lexfridman.com/episode_412.mp3",
"season": null,
"episodeNumber": 412,
"episodeGuid": "lex-episode-412"
}

Example output (text format)

When format is text, the transcript field contains plain, unsegmented text:

{
"episodeTitle": "Episode #412 — AI and the Future of Work",
"podcastName": "Lex Fridman Podcast",
"transcript": "Welcome to the show. Today we're discussing AI and its impact. Let me start by asking about your background in the field...",
"transcriptFormat": "text"
}

Pricing

This actor uses the pay-per-event (PPE) pricing model on Apify. You are charged a small fee for each successful actor run. The actor does not launch a browser — it uses pure HTTP requests to the iTunes API and RSS feeds, keeping runs fast and cost-efficient. A typical 10-episode scrape with transcripts takes about 10–20 seconds. Check the actor's Apify Store page for the current per-run pricing. Apify's free tier includes monthly platform credits that are sufficient for dozens of runs.

Tips

  • Not all podcasts have transcripts — the actor relies on <podcast:transcript> tags in RSS feeds (Podcast Namespace 2.0). If a podcast doesn't include these tags, episodes will still be returned with metadata and descriptions, but transcript will be empty. Search for popular tech podcasts that are more likely to include transcripts.
  • Use podcastUrl for reliability — if you know the podcast's RSS feed URL (often found on the podcast's website), provide it directly in podcastUrl for the most reliable results. Apple Podcasts links (with /id<number>) are also supported and will be resolved to the correct feed automatically.
  • SRT segments are approximate — when converting plain-text transcripts to SRT format, the actor uses fixed 10-second segments as a heuristic (real timestamp alignment requires audio processing). Use text or json format when precise timing is not needed.