Podcast Transcript Scraper — Text, SRT & JSON
Pricing
from $2.00 / 1,000 results
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
Maintained by CommunityActor 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
searchQuery | string | No¹ | "" | Search query to find podcasts via the iTunes Search API. Used when podcastUrl is not provided. |
podcastUrl | string | No¹ | "" | Direct URL to a podcast RSS feed, Apple Podcasts link (e.g. podcasts.apple.com/.../id123456), or episode page. Takes priority over searchQuery. |
maxEpisodes | integer | No | 10 | Maximum number of episodes to scrape transcripts for (1–100). |
format | string | No | text | Output format for transcripts: text, srt, or json. |
¹ Either
podcastUrlorsearchQuerymust be provided — at least one is required. IfpodcastUrlis provided, it takes priority andsearchQueryis ignored.
Output fields
Each result item pushed to the dataset contains:
| Field | Type | Description |
|---|---|---|
episodeTitle | string | null | Title of the podcast episode |
podcastName | string | null | Name of the podcast (from RSS feed / iTunes metadata) |
transcript | string | Full transcript text in the requested format (text, srt, or json) |
transcriptFormat | string | Format of the transcript field: text, srt, or json |
duration | string | null | Episode duration in HH:MM:SS or MM:SS format (from iTunes/RSS itunes:duration tag) |
durationSeconds | integer | null | Episode duration converted to total seconds (when parseable) |
publishDate | string | null | Episode publish date (from RSS pubDate tag) |
url | string | null | Direct URL to the episode page |
description | string | Episode description / show notes (cleaned of HTML) |
audioUrl | string | null | Direct URL to the episode audio file (enclosure) |
season | integer | null | Season number (from itunes:season tag, when available) |
episodeNumber | integer | null | Episode number (from itunes:episode tag, when available) |
episodeGuid | string | null | Unique episode identifier (from RSS guid tag) |
episodeType | string | null | Episode 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:
-
Discovery — If a
podcastUrlis provided, the actor detects whether it's a raw RSS feed URL (ends in.xml/.rssor 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 asearchQueryis provided, the actor searches the iTunes Search API (itunes.apple.com/search) and uses the top result'sfeedUrl. -
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. -
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, orjson). -
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 — thetranscriptfield 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, buttranscriptwill be empty. Search for popular tech podcasts that are more likely to include transcripts. - Use
podcastUrlfor reliability — if you know the podcast's RSS feed URL (often found on the podcast's website), provide it directly inpodcastUrlfor 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
textorjsonformat when precise timing is not needed.