DEV Community

Hay Equipos
Hay Equipos

Posted on

How to export Apple Podcasts top charts and episodes to a spreadsheet

Building a list of podcasts in a niche is tedious work. Whether you are booking guests, selling sponsorships or researching content, you need show names, publishers, RSS feeds and how active each show is, and Apple Podcasts only shows that one page at a time.

The Apple Podcasts Search, Top Charts and Episodes actor, published by Hay Equipos on the Apify Store, puts it in a table. It searches by keyword, looks up shows by id or link, and reads Apple's top podcasts chart for any country and genre. Turn on episodes and it also returns each show's recent episodes with title, date, duration, description and the direct audio URL. It uses Apple's public iTunes Search and Lookup API and Apple's public chart feed, with no login, no key and no browser.

What you get back

Show rows have type: "podcast" (illustrative values):

{
  "type": "podcast",
  "source": "chart",
  "query": "top-podcasts-genre-1321",
  "rank": 4,
  "country": "us",
  "podcastId": 1000000001,
  "name": "The Example Business Show",
  "publisher": "Example Media",
  "primaryGenre": "Business",
  "episodeCount": 312,
  "latestEpisodeDate": "2026-09-25T10:00:00Z",
  "explicit": false,
  "feedUrl": "https://feeds.example.com/business-show",
  "applePodcastsUrl": "https://podcasts.apple.com/us/podcast/the-example-business-show/id1000000001"
}
Enter fullscreen mode Exit fullscreen mode

Episode rows have type: "episode":

{
  "type": "episode",
  "podcastName": "The Example Business Show",
  "episodeId": 1000000099,
  "title": "Pricing your first product",
  "releaseDate": "2026-09-25T10:00:00Z",
  "durationSeconds": 2410,
  "description": "In this episode we look at...",
  "audioUrl": "https://media.example.com/episode-99.mp3",
  "episodeGuid": "example-guid-99"
}
Enter fullscreen mode Exit fullscreen mode

The dataset has two views, Podcasts and Episodes. Inputs that return nothing are listed in RUN_SUMMARY in the key value store and cost nothing.

Step by step in the Apify Console

  1. Open the actor on the Apify Store and start it in the Console.
  2. Add Search terms, one per line, such as true crime or marketing. Results keep Apple's order, so position is the search rank.
  3. Add Podcast ids or Apple Podcasts links for shows you already know.
  4. Switch on Include the top podcasts chart to add the chart with ranks, and optionally set a Chart genre id such as 1321 Business, 1318 Technology or 1488 True Crime.
  5. Set the Country (two letter code, default us).
  6. Switch on Add recent episodes and choose Episodes per show (default 20, up to 200) if you want episodes.
  7. Set Maximum rows (shows plus episodes, default 1,000), click Start, and export as CSV, Excel or JSON.

Calling it from code

curl:

curl -X POST \
  "https://api.apify.com/v2/acts/pistachio_implementation~apple-podcasts/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"topChart": true, "chartGenreId": "1321", "country": "us", "maxResultsPerChart": 25}'
Enter fullscreen mode Exit fullscreen mode

Python with apify-client:

import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])

run = client.actor("pistachio_implementation/apple-podcasts").call(
    run_input={
        "searchTerms": ["marketing"],
        "topChart": True,
        "chartGenreId": "1321",
        "country": "gb",
        "maxResultsPerSearch": 20,
        "includeEpisodes": True,
        "maxEpisodesPerPodcast": 5,
    }
)

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["type"] == "podcast":
        print("SHOW", row["rank"] or row["position"], row["name"], row["feedUrl"])
    else:
        print("  EP", row["releaseDate"], row["title"], row["audioUrl"])
Enter fullscreen mode Exit fullscreen mode

To watch for new episodes, schedule the actor with your show list and episodes on, then compare episodeId across runs. If you run transcription, the audioUrl field can go straight into your own speech to text tool.

Pricing

Pay per event, no subscription and no start fee:

  • $0.001 per podcast row ($1 per 1,000 shows).
  • $0.0005 per episode row ($0.50 per 1,000 episodes), only when episodes are on.

The top 200 podcasts in a genre cost $0.20. The top 100 with their last 10 episodes each cost $0.60. You can set a maximum charge per run and the actor stops cleanly when it is reached.

Limits and what it does not do

  • Apple returns at most 200 shows per search and 200 per chart, and at most 200 recent episodes per show. For a full back catalog, read the show's feedUrl with any RSS reader.
  • Apple allows about 20 requests a minute from one address, so calls are spaced about 3 seconds apart. Each search, each batch of 100 shows and each show's episode list is one call, so big runs take minutes.
  • No listener numbers, downloads or ratings. Apple does not publish them through these endpoints.
  • Spotify and other directories are not covered.
  • The publisher field is the show's public byline, often a company or network. No listener or contact data is collected.
  • It is an independent tool and is not affiliated with Apple.

Please use the data, and any audio you download from the returned links, in line with Apple's terms and each show's rights.

Try it on the Apify Store: https://apify.com/pistachio_implementation/apple-podcasts

Top comments (0)