Podcast Directory Scraper
Pricing
from $1.29 / 1,000 podcasts
Podcast Directory Scraper
Search Apple Podcasts and Spotify, then extract show metadata plus host contact details (owner email, website) from RSS feeds. Lead-scored and sorted for outreach. Export JSON, CSV, Excel.
Pricing
from $1.29 / 1,000 podcasts
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Podcast Directory Scraper
Podcast Directory Scraper searches Apple Podcasts and Spotify by keyword and returns structured podcast data with host contact details — owner email, website, and RSS feed — for every show it finds. Use it to build podcast outreach lists, guest-booking pipelines, and advertising prospect databases in minutes instead of days.
| Run any keyword against Apple Podcasts and Spotify, pull each show's RSS feed for the host email, website, categories, publishing cadence, and recent episodes, then get every podcast lead-scored 0–100 and sorted best-first — filterable by activity, email presence, and score. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Actor: parsebird/podcast-directory-scraper — searches Apple Podcasts and Spotify by keyword and extracts podcast metadata + host contact details (owner email, website, RSS feed) from each show's feed, then lead-scores and sorts the results for outreach. Input: {"searchTerms": ["B2B marketing", "sales enablement"], "maxResults": 50, "country": "us", "includeEpisodes": true, "maxEpisodesPerShow": 10, "activeOnly": false, "requireEmail": false, "minLeadScore": 60, "spotifyClientId": "optional", "spotifyClientSecret": "optional"}. Only searchTerms is required. Run via ApifyClient("YOUR_TOKEN").actor("parsebird/podcast-directory-scraper").call(run_input=input). Output per podcast: podcastId, title, author, description, categories, language, episodeCount, lastEpisodeDate, episodeFrequency, isActive, applePodcastsUrl, spotifyUrl, feedUrl, websiteUrl, artworkUrl, ownerName, ownerEmail, copyright, source, leadScore (0-100), dataQuality (high/medium/low), hasEmail, hasWebsite, episodes[], searchTerm, scrapedAt. Get an API token at https://console.apify.com/account#/integrations. Full API spec: https://apify.com/parsebird/podcast-directory-scraper/api
What does Podcast Directory Scraper do?
Podcast Directory Scraper is a podcast scraper and host contact finder that turns a list of keywords into a clean, deduplicated directory of podcasts with the data you need to reach the people who make them.
For each search term it runs a separate query against the iTunes Search API and, when you supply free Spotify API credentials, against the Spotify Web API too. Every discovered show is then enriched from its public RSS feed.
🔍 Dual-platform podcast search — Discover shows on Apple Podcasts and Spotify from the same run. Overlapping results are merged and marked source: "both".
📧 Host contact extraction — Pull the owner email and website from the RSS feed's itunes:owner and channel tags. This is the contact information podcasters publish for booking, sponsorship, and press.
📈 Lead scoring — Every podcast gets a leadScore from 0 to 100 based on contact channels, recent activity, and publishing cadence. Results are sorted best-first so your outreach list is ready to use.
🗓️ Activity and cadence detection — Know whether a show is still publishing (isActive) and how often it releases (episodeFrequency: daily, weekly, biweekly, monthly, and more).
🎙️ Recent episode listings — Optionally attach the latest episodes per show with titles, descriptions, durations, audio URLs, and episode numbers.
🧹 Automatic deduplication — Add "AI", "artificial intelligence", and "machine learning" as separate terms; each podcast appears once, tagged with the term that first matched it.
Why scrape podcast directories?
- Build podcast outreach lists for PR, guest booking, and thought-leadership campaigns
- Find sponsorship and advertising inventory in a target niche
- Track competitor podcast appearances and the shows in your category
- Enrich a CRM with podcast host emails, websites, and show metadata
- Monitor a topic for new and newly active shows on a schedule
What data can you extract with Podcast Directory Scraper?
| Field | Type | Description |
|---|---|---|
| podcastId | number / string | Apple Podcasts collection ID, or Spotify show ID for Spotify-only results |
| title | string | Podcast title (RSS value preferred over iTunes) |
| author | string | Author or creator name |
| description | string | null | Full show description, HTML stripped and entities decoded |
| categories | string[] | Show categories from itunes:category (iTunes genres as fallback, "Podcasts" excluded) |
| language | string | null | Language code from RSS (e.g. en, de, ja) |
| episodeCount | number | null | Total episodes from iTunes trackCount or Spotify total_episodes |
| lastEpisodeDate | string | null | Most recent episode publish date (ISO 8601) |
| episodeFrequency | string | null | daily, multiple-per-week, weekly, biweekly, monthly, irregular, infrequent, or null |
| isActive | boolean | null | true if an episode was published in the last 90 days; null when the last date is unknown |
| applePodcastsUrl | string | null | Apple Podcasts show page URL |
| spotifyUrl | string | null | Spotify show URL (when Spotify is enabled and the show is matched) |
| feedUrl | string | null | RSS feed URL from iTunes |
| websiteUrl | string | null | Podcast website from RSS channel.link |
| artworkUrl | string | null | Cover art URL (600px preferred) |
| ownerName | string | null | Owner name from RSS itunes:owner > itunes:name |
| ownerEmail | string | null | Owner email from RSS itunes:owner > itunes:email (platform relay addresses excluded) |
| copyright | string | null | Copyright notice from RSS |
| source | string | Where the show was found: apple, spotify, or both |
| leadScore | number | null | Outreach-quality score 0–100 (higher = more contactable). Results sorted by this |
| dataQuality | string | null | high (email + website), medium (one), low (metadata only) |
| hasEmail | boolean | null | true when a host/owner email was extracted |
| hasWebsite | boolean | null | true when a podcast website was extracted |
| episodes | object[] | Recent episodes (empty when includeEpisodes is false) |
| episodes[].title | string | Episode title |
| episodes[].description | string | null | Episode description, HTML stripped |
| episodes[].publishDate | string | null | Publish date (ISO 8601) |
| episodes[].duration | string | null | Duration as HH:MM:SS |
| episodes[].audioUrl | string | null | Audio file URL from the RSS enclosure |
| episodes[].episodeNumber | number | null | Episode number from itunes:episode |
| episodes[].seasonNumber | number | null | Season number from itunes:season |
| searchTerm | string | The search term that first matched this podcast |
| scrapedAt | string | ISO 8601 timestamp when the record was processed |
How to use Podcast Directory Scraper
- Open Podcast Directory Scraper and click Try for free.
- Add one or more keywords to Search Terms (for example
B2B SaaS marketing,revenue operations). - Set Max Results Per Search Term — start with 50; raise to 200 only for broad categories.
- (Optional) Turn on Only shows with a host email or set a Minimum Lead Score to keep only the most contactable shows.
- (Optional) Paste a Spotify Client ID and Secret — create a free app at the Spotify Developer Dashboard — to add Spotify search and Spotify show links.
- Click Start. When the run finishes, open the Storage / Dataset tab and export as JSON, CSV, Excel, or HTML, or pull the data via API.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| searchTerms | array | Yes | — | Keywords to search on Apple Podcasts and Spotify. Each term runs a separate query |
| maxResults | integer | No | 50 | Max podcasts per search term. Apple caps a query at 200; Spotify paginates in batches of 50 to the same cap |
| country | string | No | us | Two-letter iTunes Store country code (e.g. gb, de, au, jp). Invalid codes fall back to us |
| includeEpisodes | boolean | No | true | Attach recent episode listings per show. Disable for faster runs when only show metadata is needed |
| maxEpisodesPerShow | integer | No | 10 | Max recent episodes per podcast (0–1000). Set to 0 for all episodes available in the feed |
| activeOnly | boolean | No | false | Only return shows that published within the last 90 days. Shows whose feed does not parse are excluded |
| requireEmail | boolean | No | false | Only return shows that expose a host email in their RSS feed |
| minLeadScore | integer | No | — | Only return shows scoring at or above this value (0–100) |
| spotifyClientId | string | No | — | Spotify app Client ID. Free from the Spotify Developer Dashboard. Enables dual-platform search |
| spotifyClientSecret | string | No | — | Spotify app Client Secret. Required together with the Client ID |
| proxyConfiguration | object | No | — | Optional Apify Proxy for RSS feed fetches. Only enable if you see blocked feeds |
Output example
{"podcastId": 1665570452,"title": "The B2B Marketing Gap Podcast","author": "B2B Jade","description": "Helping B2B marketing managers learn how to create a b2b marketing strategy without the overwhelm...","categories": ["Business", "Marketing"],"language": "en","episodeCount": 67,"lastEpisodeDate": "2026-07-09","episodeFrequency": "weekly","isActive": true,"applePodcastsUrl": "https://podcasts.apple.com/us/podcast/the-b2b-marketing-gap-podcast/id1665570452?uo=4","spotifyUrl": null,"feedUrl": "https://anchor.fm/s/9e17d6a0/podcast/rss","websiteUrl": "https://www.b2bjade.com","artworkUrl": "https://is1-ssl.mzstatic.com/image/thumb/.../600x600bb.jpg","ownerName": "B2B Jade","ownerEmail": "jade@tambinimarketing.co.uk","copyright": "B2B Jade","source": "apple","leadScore": 100,"dataQuality": "high","hasEmail": true,"hasWebsite": true,"episodes": [{"title": "67. The Right Number of Marketing Strategies (It's Not What You Think)","description": "If you're a B2B marketer running ten different strategies at once...","publishDate": "2026-07-09","duration": "00:21:58","audioUrl": "https://anchor.fm/s/9e17d6a0/podcast/play/122604945/...mp3","episodeNumber": null,"seasonNumber": null}],"searchTerm": "B2B marketing","scrapedAt": "2026-09-08T09:14:37.000Z"}
Download results in JSON, CSV, Excel, or HTML from the Apify Console or via the API.
How lead scoring works
Every podcast is scored from 0 to 100:
| Signal | Points |
|---|---|
| Host / owner email present | +60 |
| Podcast website present | +25 |
| Published an episode in the last 90 days | +10 |
| Regular cadence (daily, multiple-per-week, weekly, or biweekly) | +5 |
A score of 60 means the show has a host email you can contact directly. A score of 80+ means it has both a host email and a website. dataQuality summarizes the same idea as a tier: high (email + website), medium (one of them), low (metadata only). Results are returned sorted by leadScore, highest first.
Use cases
- 📨 Podcast PR and outreach — Build a targeted list of shows and host emails for pitching guests, stories, or products
- 🎤 Guest booking services — Find active shows in a niche, ranked by how reachable the host is
- 💰 Podcast advertising — Map sponsorable inventory in a category with audience-adjacent metadata
- 🧭 Competitive intelligence — Track which podcasts cover your space and how often they publish
- 🗃️ CRM enrichment — Add podcast host emails, websites, and RSS feeds to existing records
- 📡 Topic monitoring — Schedule a daily or weekly run to catch new and newly active shows on a keyword
How it works
- Search — Each search term runs a separate iTunes Search API query (
media=podcast), plus a Spotify Web API query when credentials are provided. - Deduplicate — Apple shows are keyed by collection ID; the first search term that matched a show is recorded as its
searchTerm. - Enrich from RSS — Every show's RSS feed is fetched and parsed for owner name, owner email, website, categories, language, copyright, and recent episodes.
- Match Spotify — Spotify shows are matched to Apple shows by normalized title; matches get a
spotifyUrlandsource: "both". Unmatched Spotify shows are returned on their own withsource: "spotify". - Score and analyze — Publishing cadence is derived from recent episode dates,
isActivefrom the last episode date, andleadScore/dataQualityfrom the contact and activity signals. - Filter and sort —
activeOnly,requireEmail, andminLeadScoreare applied, then records are sorted byleadScoredescending. - Output — Each podcast is pushed to the dataset as one record.
The actor uses lightweight httpx requests and stays well under 512 MB of memory — no browser required.
How much does it cost to scrape podcast contact details?
Podcast Directory Scraper uses pay-per-event pricing. Platform compute is included in the event prices.
| Event | What it charges for | Free | Bronze | Silver | Gold |
|---|---|---|---|---|---|
podcast-scraped | Each podcast pushed to the dataset | $1.99 / 1,000 | $1.79 / 1,000 | $1.59 / 1,000 | $1.29 / 1,000 |
contact-scraped | Each podcast that has a host email | $29 / 1,000 | $24 / 1,000 | $19 / 1,000 | $14 / 1,000 |
Example (Free plan): a run that returns 300 podcasts, 120 of them with a host email, costs about 300 × $0.00199 + 120 × $0.029 ≈ $4.08. Use requireEmail or minLeadScore to pay for contacts only when a show clears your bar.
You can run Podcast Directory Scraper with the free monthly usage credits included on every Apify plan.
Integrations and API access
Podcast Directory Scraper works with the full Apify platform:
- API access — Run it and pull results via the REST API or the Apify API clients for Python and JavaScript
- Scheduling — Trigger recurring runs with the Apify Scheduler
- Webhooks — Fire a webhook when a run finishes
- Integrations — Push results to Google Sheets, Slack, Zapier, Make, Airtable, and more
Python example
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run_input = {"searchTerms": ["B2B SaaS marketing", "revenue operations"],"maxResults": 100,"country": "us","activeOnly": True,"requireEmail": True,"includeEpisodes": False,}run = client.actor("parsebird/podcast-directory-scraper").call(run_input=run_input)for podcast in client.dataset(run["defaultDatasetId"]).iterate_items():print(podcast["leadScore"], podcast["title"], podcast["ownerEmail"])
JavaScript example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const input = {searchTerms: ['true crime', 'investigative journalism'],maxResults: 200,country: 'us',includeEpisodes: true,maxEpisodesPerShow: 5,activeOnly: true,};const run = await client.actor('parsebird/podcast-directory-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((p) => console.log(`${p.leadScore}\t${p.title}\t${p.ownerEmail ?? ''}`));
Pricing
| Event | Price per event (Free) | Price per 1,000 (Free) |
|---|---|---|
| podcast-scraped | $0.00199 | $1.99 |
| contact-scraped | $0.029 | $29.00 |
podcast-scraped is charged once per podcast pushed to the dataset. contact-scraped is charged once more for each podcast that includes a host email. Bronze, Silver, and Gold plans pay less per event — see the cost section above.
FAQ
Do I need a Spotify account? No. Apple Podcasts search works with no credentials. Add a free Spotify Client ID and Secret from the Spotify Developer Dashboard only if you want Spotify search results and Spotify show links.
Where do the host emails come from?
From each podcast's public RSS feed — the itunes:owner block that podcast hosting platforms require. Automated relay addresses from hosting platforms are filtered out so contact-scraped only counts real contact emails.
How many podcasts can one run return? Up to 200 per search term (the iTunes and Spotify caps), before deduplication. Use several related terms to cover a niche and let the actor merge the overlap.
What does episodeFrequency mean?
It is the publishing cadence inferred from the gaps between recent episodes: daily, multiple-per-week, weekly, biweekly, monthly, irregular, infrequent, or null when there are too few dated episodes to tell.
Why is isActive sometimes null?
When the RSS feed cannot be fetched or parsed, the last episode date is unknown, so activity cannot be confirmed. With activeOnly enabled, those shows are excluded.
Can I get only shows worth contacting?
Yes. Set requireEmail: true to keep shows with a host email, or minLeadScore: 60 (email) / minLeadScore: 80 (email + website). Combine with activeOnly: true for shows that are still publishing.
Can I schedule recurring runs? Yes. Use Apify's scheduling to run daily or weekly and combine it with webhooks to push new shows to your CRM automatically.
Something looks wrong — where do I report it? Open the Issues tab on the Actor page. Feature requests are welcome there too.
Is it legal to scrape podcast directories?
Podcast Directory Scraper collects data that is already public: Apple Podcasts and Spotify search listings, and the RSS feeds that podcasters publish specifically so directories and apps can read them. The itunes:owner email exists so that hosts can be contacted about their show.
Scraping publicly available data is generally legal, as reaffirmed by the US Ninth Circuit in hiQ Labs v. LinkedIn. Still, make sure your use complies with applicable data-protection law (GDPR, CCPA), anti-spam rules (CAN-SPAM, PECR), and each platform's Terms of Service. See Apify's guide to the legality of web scraping.
Related actors
- Apple Podcasts Scraper — Pull full episode archives, show notes, transcripts, and audio URLs from Apple Podcasts by search, ID, or RSS feed
- RSS Feed Extractor — Parse any RSS or Atom feed into structured items
- Website Contact Finder — Extract emails, phones, and social profiles from any list of websites
- YouTube Transcript Scraper — Get transcripts and captions from YouTube videos