There's no single "Apple Podcasts API". Instead there are three loosely-related sources Apple exposes, each good at one thing and useless at the others. Most failed scrapes come from asking the iTunes API for something it was never built to give. Here's the map.
Source 1 — the iTunes Search & Lookup API
Show metadata & discovery keyless, JSON
This is the free, documented one. Search finds shows by name; Lookup resolves a show by its numeric Apple ID. Both return the show's title, artwork, genre, episode count and — crucially — the feedUrl you'll need for the full episode list.
# find shows by keyword
curl -s "https://itunes.apple.com/search?media=podcast&term=true+crime&limit=25&country=US"
# resolve one show and ask for its latest episodes
curl -s "https://itunes.apple.com/lookup?id=1234567890&entity=podcastEpisode&limit=200&country=US"
The Lookup quirk that catches everyone: entity=podcastEpisode returns episodes, but it's capped at the 200 most recent and it's not the canonical list. For a show with 600 episodes, those 200 are all you'll ever get this way. That's your cue to switch sources.
Source 2 — the RSS feed (the real episode list)
Every episode, forever XML, complete
Apple doesn't host episodes — it indexes the publisher's RSS feed. So the complete, authoritative episode list is the feed itself, the feedUrl you pulled from Lookup. Fetch it and parse the <item> elements.
Each <item> is one episode, and the fields you care about are spread across standard RSS and the iTunes podcast namespace:
| Field | Lives in | What it is |
|---|---|---|
title | RSS | Episode title. |
pubDate | RSS | Publish date — sort on this for cadence. |
enclosure url | RSS | The actual audio file URL (MP3/M4A). |
itunes:duration | iTunes ns | Length, in seconds or HH:MM:SS. |
itunes:episode | iTunes ns | Episode number, when the show uses them. |
guid | RSS | Stable per-episode key — dedupe on this. |
Two real-world snags: durations come in two formats in the same feed (raw seconds or HH:MM:SS), so normalise before you average; and some publishers paginate huge back-catalogs across <atom:link rel="next">, so a naive single fetch silently truncates old episodes.
Source 3 — the country chart feeds
Rankings by genre & country JSON, per-locale
The "Top Podcasts" lists aren't in the Search API. They come from Apple's marketing RSS generator, which produces a JSON feed of the top shows for a given country and genre. Swap the country code and you get a different chart — the charts are entirely locale-specific.
# top 50 podcasts in the US, all genres
curl -s "https://rss.applemarketingtools.com/api/v2/us/podcasts/top/50/podcasts.json"
# same chart for Germany — different shows, different order
curl -s "https://rss.applemarketingtools.com/api/v2/de/podcasts/top/50/podcasts.json"
The thing to internalise: there is no global chart. A show that's #3 in the US can be absent in France. If you're tracking "where is this show charting", you iterate the country codes you care about and store the rank per locale. That per-country dimension is the whole point of chart data — flatten it and you've thrown away the signal.
customerreviews RSS feed, scoped to one country and only a handful of pages deep — you cannot pull a show's entire review history, and the total ratings count shown in the app isn't cleanly exposed at all. Treat reviews as a recent sample per country, never a census. Any "average rating" you compute from them is the average of what Apple chose to surface, not the true mean. Build your analysis to survive that.Three sources, one feed
Our Apple Podcasts Actor stitches the iTunes Lookup, the RSS feed and the per-country charts into one schema — full episode lists, chart positions and sampled reviews as clean JSON, no XML parsing on your side.
Run the Apple Podcasts Actor → Or get done-for-you leadsPutting it together: a competitor-tracking pull
Say you run a business podcast and want a weekly read on three rivals. The right sequence touches all three sources in order:
- Resolve each show with
Lookupto get its Apple ID andfeedUrl. - Fetch the RSS feed for the complete episode list, then compute cadence (median gap between
pubDates) and averageitunes:duration. - Pull the Business chart for each country you sell in and record where (and whether) each rival ranks.
- Sample reviews per country for sentiment direction — remembering it's a sample.
That gives you a one-page brief — "Rival A ships weekly 38-minute episodes, sits #12 in US Business, trending up; Rival B went silent six weeks ago" — from data Apple hands out for free, if you ask each source for the one thing it actually knows.
A note on politeness and IDs
The iTunes endpoints are generous but not infinite; Apple has historically throttled around 20 requests per minute per IP on Search/Lookup, so space your calls and cache the feedUrl rather than re-resolving every run. The publisher's RSS host has its own limits entirely — you're hitting their server, not Apple's, when you fetch the feed, so be a good citizen there too. Key everything on the numeric Apple ID and the episode guid; titles get renamed and shows occasionally change feeds, but those IDs are the stable spine of any dataset you keep over time.
Disclosure: links to Apify on this page are affiliate links, marked rel="sponsored". If you create a paid account through them we may earn a commission at no extra cost to you. We recommend Apify because we build and ship Actors on it ourselves, including the Apple Podcasts Actor linked above.