Apple Podcasts Scraper - Podcasts, Episodes & Reviews avatar

Apple Podcasts Scraper - Podcasts, Episodes & Reviews

Pricing

from $1.50 / 1,000 results

Go to Apify Store
Apple Podcasts Scraper - Podcasts, Episodes & Reviews

Apple Podcasts Scraper - Podcasts, Episodes & Reviews

Scrape Apple Podcasts without an API key: podcast details, episodes, and reviews by keyword or podcast ID, in any country. Export JSON/CSV/Excel.

Pricing

from $1.50 / 1,000 results

Rating

0.0

(0)

Developer

Shahryar

Shahryar

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Apple Podcasts Scraper – Podcasts, Episodes & Reviews API (No API Key)

Extract structured data from Apple Podcasts without an API key: full podcast (show) details, episodes, and reviews — by keyword or numeric podcast ID, in any country storefront. Export to JSON, CSV, or Excel.

This Apple Podcasts scraper is built for podcast publishers, media researchers, marketers, and data teams who want clean, reliable Apple Podcasts data without fighting HTML, browser automation, or rate limits. Use it as a key-free Apple Podcasts API to power discovery research, episode catalogs, and review analysis.

Pairs with the Apple App Store Scraper and Google Play Scraper for full app + podcast intelligence across the Apple and Google ecosystems.

What it does

  • 🔎 Search podcasts by keyword and get every matching show.
  • 🎙️ Podcast details – complete metadata by numeric podcast ID (lookup batches up to 100 IDs per call).
  • 🎧 Episodes – title, release date, duration, audio URL, description, artwork, and more (optional).
  • Reviews – reviewer, star rating, title, text, helpful votes, and date from the public review feed (optional).
  • 🌍 Any country & language – choose the storefront via country.
  • 🧱 Deeper back catalog (optional) – when the iTunes episode cap (~200) isn't enough, the show's RSS feed is parsed for older episodes too (still bounded by maxEpisodes).
  • 📤 Export anywhere – download as JSON, CSV, or Excel, or pull via the Apify API / dataset.

Why this scraper

Uses Apple's official iTunes endpoints (search, lookup, the episode lookup, and the customer-reviews feed) — so it's fast, reliable, and key-free, with none of the blocking that plagues HTML scrapers. There is no login and no API key to manage. Episodes beyond Apple's cached cap are pulled straight from the show's own RSS feed, so you can reach deeper into the podcast dataset and pull older episodes (up to your maxEpisodes limit).

How discovery works

Apple's Search API is keyword-based for podcasts. Provide searchTerms (each term is URL-encoded and sent to the search endpoint) and/or podcastIds (numeric collection IDs, batched up to 100 per lookup). There is no reliable genre-browse endpoint, so genre IDs are returned only as a passthrough output field — they are not used as an input filter.

Example input

{
"searchTerms": ["true crime"],
"podcastIds": ["1200361736"],
"country": "us",
"maxPodcastsPerSearch": 50,
"maxItems": 200,
"scrapeEpisodes": true,
"maxEpisodes": 100,
"scrapeFullEpisodeFeed": false,
"scrapeReviews": true,
"maxReviewsPerPodcast": 100,
"proxyConfiguration": { "useApifyProxy": true }
}

Example podcast output

{
"type": "podcast",
"id": 1200361736,
"name": "The Daily",
"artist": "The New York Times",
"artistId": 121664449,
"url": "https://podcasts.apple.com/us/podcast/the-daily/id1200361736",
"feedUrl": "https://feeds.simplecast.com/54nAGcIl",
"genre": "Daily News",
"genres": ["News", "Podcasts"],
"genreIds": ["1489", "26"],
"episodeCount": 2637,
"rating": null,
"ratingCount": null,
"contentAdvisoryRating": "Clean",
"explicit": "cleaned",
"country": "USA",
"releaseDate": "2026-06-20T09:00:00Z",
"artwork": "https://.../600x600bb.jpg",
"artworkUrl30": "https://.../30x30bb.jpg",
"scrapedAt": "2026-06-20T12:00:00.000Z"
}

Note: rating and ratingCount are frequently null for podcasts — Apple does not expose aggregate star ratings in the search/lookup responses. Per-review star ratings are available via scrapeReviews.

Example episode output

{
"type": "episode",
"podcastId": 1200361736,
"podcastName": "The Daily",
"id": 1000659912345,
"title": "Friday's Episode",
"episodeGuid": "gid://art19-episode-locator/V0/...",
"releaseDate": "2026-06-20T09:00:00Z",
"durationMs": 1620000,
"description": "Today on the show...",
"shortDescription": "Today on the show...",
"audioUrl": "https://.../episode.mp3",
"previewUrl": "https://.../episode.mp3",
"fileExtension": "mp3",
"contentType": "audio",
"contentAdvisoryRating": "clean",
"closedCaptioning": "none",
"feedUrl": "https://feeds.simplecast.com/54nAGcIl",
"artwork": "https://.../600x600bb.jpg",
"trackViewUrl": "https://podcasts.apple.com/us/podcast/.../id1000659912345",
"episodeNumber": null,
"seasonNumber": null,
"scrapedAt": "2026-06-20T12:00:00.000Z"
}

episodeNumber and seasonNumber are null for episodes from the iTunes lookup; they are only populated for episodes pulled from the RSS feed (when scrapeFullEpisodeFeed is on). RSS-sourced episodes also carry an extra "source": "rss" field and have id: null, shortDescription: null, and trackViewUrl: null (no iTunes track data).

Example review output

{
"type": "review",
"podcastId": 1200361736,
"reviewId": "1234567890",
"userName": "podfan_99",
"userUrl": "https://itunes.apple.com/us/reviews/id...",
"title": "Essential listening",
"text": "I start every morning with this show.",
"score": 5,
"voteSum": 3,
"voteCount": 4,
"updated": "2026-06-19T08:12:00-07:00",
"scrapedAt": "2026-06-20T12:00:00.000Z"
}

Output fields

Each item carries a type discriminator: podcast, episode, or review. Use it to split the mixed dataset into three clean tables (see the dataset views: Podcasts, Episodes, Reviews).

Podcast (type: "podcast")

FieldTypeDescription
typestringAlways "podcast".
idnumberiTunes collection ID (falls back to track ID).
namestringPodcast (show) name.
artiststringPublisher / author name.
artistIdnumberPublisher iTunes artist ID.
urlstringApple Podcasts page URL.
feedUrlstringThe show's real RSS feed URL.
genrestringPrimary genre name.
genresarrayAll genre names.
genreIdsarrayAll genre IDs (passthrough only; not an input filter).
episodeCountnumberTrack count reported by Apple.
ratingnumberAggregate star rating (often null for podcasts).
ratingCountnumberNumber of ratings (often null for podcasts).
contentAdvisoryRatingstringContent advisory, e.g. "Clean" / "Explicit".
explicitstringExplicitness flag, e.g. "cleaned" / "explicit" / "notExplicit".
countrystringStorefront country of the result (e.g. "USA").
releaseDatestringLatest episode date reported by Apple (ISO 8601).
artworkstringHighest-resolution artwork available (600 → 100 → 60 px).
artworkUrl30string30px thumbnail artwork.
scrapedAtstringISO 8601 timestamp of the scrape.

Episode (type: "episode")

FieldTypeDescription
typestringAlways "episode".
podcastIdnumberParent podcast collection ID.
podcastNamestringParent podcast name.
idnumberEpisode track ID (null for RSS-sourced episodes).
titlestringEpisode title.
episodeGuidstringEpisode GUID.
releaseDatestringPublish date.
durationMsnumberDuration in milliseconds.
descriptionstringEpisode notes / show notes.
shortDescriptionstringShort description (null for RSS-sourced episodes).
audioUrlstringDirect media URL.
previewUrlstringPreview/media URL (usually identical to audioUrl).
fileExtensionstringMedia file extension, e.g. mp3 / m4a / mp4.
contentTypestringMedia content type, e.g. audio / video.
contentAdvisoryRatingstringEpisode advisory flag (e.g. clean / explicit).
closedCaptioningstringClosed-captioning flag from the iTunes lookup.
feedUrlstringThe show's RSS feed URL.
artworkstringHighest-resolution episode/show artwork (600 → 160 → 60 px).
trackViewUrlstringApple Podcasts episode URL (null for RSS-sourced episodes).
episodeNumbernumberEpisode number — only populated from the RSS feed fallback.
seasonNumbernumberSeason number — only populated from the RSS feed fallback.
sourcestringPresent and equal to "rss" only for episodes pulled from the RSS feed; absent for iTunes-lookup episodes.
scrapedAtstringISO 8601 timestamp of the scrape.

Review (type: "review")

FieldTypeDescription
typestringAlways "review".
podcastIdnumberPodcast the review belongs to.
reviewIdstringReview ID.
userNamestringReviewer display name.
userUrlstringReviewer profile URL.
titlestringReview title.
textstringReview body.
scorenumberStar rating (1–5).
voteSumnumberSum of helpful votes.
voteCountnumberNumber of helpful votes cast.
updatedstringReview date (ISO 8601 with offset).
scrapedAtstringISO 8601 timestamp of the scrape.

Common use cases

  • Discovery & competitive research – see which shows rank for your target keywords in any storefront.
  • Episode catalogs – build a dataset of episodes with audio URLs, durations, and artwork.
  • Review analysis & sentiment – export reviews and star ratings to JSON/CSV for sentiment and topic analysis.
  • Catalog monitoring – track publish cadence, episode counts, and metadata over time.
  • Podcast data feeds – power dashboards, BI tools, or your own database with a clean podcast dataset.
  • Lead & PR research – find shows and publishers in a niche for outreach and advertising.

Input reference

FieldTypeDefaultDescription
searchTermsarrayKeywords to search Apple Podcasts (each must be non-empty).
podcastIdsarrayNumeric iTunes collection IDs to scrape directly (batched 100 per lookup).
countrystringusTwo-letter storefront country code.
maxPodcastsPerSearchinteger50Max podcasts per search term (1–200).
maxItemsinteger200Max podcasts in total (0 = no limit).
scrapeEpisodesbooleanfalseAlso fetch episodes for every podcast found.
maxEpisodesinteger100Cap on episodes per podcast (only when scrapeEpisodes is on).
scrapeFullEpisodeFeedbooleanfalseParse the show's RSS feed for older episodes when the lookup cap (~200) isn't enough. Total per podcast is still bounded by maxEpisodes, so raise maxEpisodes to actually pull more.
scrapeReviewsbooleanfalseAlso scrape reviews for every podcast found.
maxReviewsPerPodcastinteger100Cap on reviews per podcast (only when scrapeReviews is on).
proxyConfigurationobjectApify proxyProxy settings (the default Apify proxy is plenty).

FAQ

Do I need an Apple/iTunes API key? No. This Apple Podcasts scraper uses Apple's public iTunes endpoints — there is no API key and no login required.

How do I find a podcast ID? It's the number in the Apple Podcasts URL, e.g. podcasts.apple.com/us/podcast/the-daily/id12003617361200361736.

Why are rating and ratingCount empty? Apple does not expose aggregate star ratings for podcasts in the search/lookup responses. Enable scrapeReviews to get per-review star ratings (score) instead.

How many episodes can I get? The iTunes lookup returns up to ~200 most-recent episodes — and for some shows fewer, because it reflects Apple's cached copy of the feed. To reach older episodes, enable scrapeFullEpisodeFeed (which parses the show's own RSS feed) and raise maxEpisodes above the lookup count — the total per podcast is always capped by maxEpisodes, so leave it at the default 100 and the RSS fallback won't add anything.

How many reviews can I get? Apple's public review feed exposes up to ~500 most-recent reviews per podcast (about 10 pages × ~50), per storefront.

Can I scrape other countries? Yes — set country to gb, de, jp, ca, au, etc. The storefront also affects the review feed and availability.

How does pagination work? Search results are capped per term by maxPodcastsPerSearch (Apple's max is 200). Reviews are auto-paginated through the customer-reviews feed up to 10 pages (the ~500-review ceiling) and your maxReviewsPerPodcast cap; episodes come from the iTunes lookup and, optionally, the show's RSS feed for older episodes — always bounded by maxEpisodes. You never manage page tokens manually.

Do I need a proxy? Apple's iTunes endpoints are open and rarely block, so the default Apify proxy is sufficient. You can supply your own proxyConfiguration if you prefer.

What export formats are supported? Results are stored in an Apify dataset and can be exported to JSON, CSV, or Excel, or pulled programmatically via the Apify API.

Are new episodes always present? Episodes published on Apple Podcasts can lag in the iTunes API due to a known sync delay, so "most recent" is best-effort. The RSS fallback (scrapeFullEpisodeFeed) reflects the publisher's feed directly.


Looking for app data too? Pair this with the Apple App Store Scraper and Google Play Scraper for end-to-end app + podcast intelligence.