Practitioner guide · 2026

Apple Podcasts Data Comes From Three Sources, Not One

The metadata, the charts and the episode list each live somewhere different. Pick the wrong source and you'll get a 200-episode ceiling or an empty review feed.

Open the Apple Podcasts Actor →

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:

FieldLives inWhat it is
titleRSSEpisode title.
pubDateRSSPublish date — sort on this for cadence.
enclosure urlRSSThe actual audio file URL (MP3/M4A).
itunes:durationiTunes nsLength, in seconds or HH:MM:SS.
itunes:episodeiTunes nsEpisode number, when the show uses them.
guidRSSStable 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.

The review caveat nobody mentions. Apple exposes customer reviews through a legacy 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 leads

Putting 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:

  1. Resolve each show with Lookup to get its Apple ID and feedUrl.
  2. Fetch the RSS feed for the complete episode list, then compute cadence (median gap between pubDates) and average itunes:duration.
  3. Pull the Business chart for each country you sell in and record where (and whether) each rival ranks.
  4. 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.