Pocket Casts Podcast Scraper icon

Pocket Casts Podcast Scraper

Scrape Pocket Casts podcast data, including listener ratings, full episode archives, publishing cadence, seasons, transcript availability, direct audio…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Pocket Casts Podcast Scraper at a glance

Pocket Casts Podcast Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes title, author, category, ratingaverage and ratingtotal, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.50 per 1,000 results on the Apify Free plan and from $1.80 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$2.50 per 1,000 results (Free plan), from $1.80 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
24 options

Scrape Pocket Casts podcast data, including listener ratings, full episode archives, publishing cadence, seasons, transcript availability, direct audio URLs, regional category charts, and global episode search.

What Pocket Casts Podcast Scraper can do

  • Four ways to find podcasts. Search by keyword, pull ranked category charts per region, search episodes globally across every show, or paste podcast links or UUIDs.
  • Native listener ratings. Average rating and total vote count straight from Pocket Casts' own listeners, not available in an RSS feed.
  • Full episode archives in one record. Every episode's title, season, number, type, duration, publish date, file type and size, and a direct playable audio URL.
  • Cadence and season intelligence. Publishing frequency, an estimated next-episode time, season count and transcript availability.
  • 37 localized regions and 19 category charts for market research across countries and topics.
  • Built for monitoring. Resume an interrupted podcast run without paying twice, or turn on incremental mode so scheduled runs return only new and changed shows.

Choose what to collect

These inputs let you configure Pocket Casts Podcast Scraper - Ratings & Full Episode Archive. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to find podcasts: keyword search, category charts, global episode search, or paste Pocket Casts URLs.

Choices: search, discover, episodes, url

searchTermsarrayKeywords to search for (Search and Episode search modes).
categoriesarrayCategory charts to scrape (Discover mode).
regionstringCountry whose charts to return (Discover mode). All 37 verified regions are localized.

Choices: us, gb, de, au, ca, fr, es, it, nl, se, no, dk, fi, pl, pt, ie, nz, za, br, mx, in, jp, kr, cn, tw, hk, sg, ph, tr, il, sa, ru, ua, cz, at, ch, be

customRegionstringOptional. Overrides Region with any two-letter code. Only the 37 listed regions have chart data; any other code stops discover mode with a clear message instead of returning wrong data.
countrystringOptional two-letter country code, an alias of Region for users coming from the iTunes-style country input. Custom region wins, then Country, then Region. Only the 37 listed regions have chart data.
urlsarrayPocket Casts podcast links, bare 36-character podcast UUIDs, or a chart link (lists.pocketcasts.com/category--.json) that expands into that chart's podcasts. Accepts play.pocketcasts.com and pocketcasts.com podcast pages, pca.st share links and cache.pocketcasts.com podcast links.
Show 17 more inputs
More input fields
InputWhat it controls
podcastIdsarrayOptional numeric Apple Podcasts IDs (URL mode). Each ID is matched to its Pocket Casts podcast; IDs with no match are skipped with a log line.
maxPodcastsintegerStop after this many podcasts (hard ceiling 100000; 0 is read as the ceiling).
maxResultsintegerOptional cap per search term (Search), per category (Discover), per chart link (URL) or per term (Episode search). Max podcasts and Max episodes still cap the whole run. Default 1000; the hard ceiling is 100000 (0 is read as the ceiling).
maxEpisodesintegerStop after this many episode records in Episode search mode (hard ceiling 100000; 0 is read as the ceiling).
maxEpisodesPerPodcastintegerCap the embedded episode list per podcast, newest first. Default 0 returns all episodes of each podcast (nested episodes are not billed separately); the hard ceiling is 100000.
sortBystringPodcast modes: chart / source order (default), rating average, rating votes, episode count or latest episode date. Episode search: source relevance (default), newest, oldest or longest. Sorting applies to the collected results and rows are saved once collection finishes; options that do not apply to the mode keep source order.

Choices: chartRank, ratingAverage, ratingTotal, episodeCount, latestEpisode, newest, oldest, longest

includeEpisodesbooleanEmbed the episode archive inside each podcast record.
includeRatingsbooleanFetch Pocket Casts native ratings (average + total votes) for each podcast.
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull without returning items already collected there.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns every matching record as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED records. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search, filter and lookup setup; use State key to name or deliberately share a monitoring campaign.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the search and filter settings.
emitUnchangedbooleanOff by default. Turn on to also return records that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have.
emitExpiredbooleanOff by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search.
ignoreFieldsForChangesarrayIncremental mode only. Field names (top level, for example ratingTotal, ratingAverage) that must not turn a record into UPDATED when only they change. Always ignored: estimatedNextEpisodeAt, episodeCountReturned, the iTunes-style alias fields (podcastId, podcastName, artistName, artworkUrl, genres, primaryGenre, country, contentRating, releaseDate, searchTerm, fullDescription, guid, episodeSource, scrapedAt, episodeId, episodeName, durationMinutes, episodeUrl) and the same alias keys inside each nested episode (also episodeNumber). Real edits to a nested episode are never hidden by this list. Ratings (ratingTotal, ratingAverage) drift daily and are NOT ignored by default, so a recurring run returns and bills most podcasts as UPDATED; add them here to be told only about other changes. Ignored fields are still present in returned rows.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.
notionParentPageUrlstringURL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

titletitle
authorauthor
categorycategory
ratingAverageratingAverage
ratingTotalratingTotal
episodeCountepisodeCount
episodeFrequencyepisodeFrequency
estimatedNextEpisodeAtestimatedNextEpisodeAt
uuiduuid
urlurl
podcastNamepodcastName
artistNameartistName
Show 17 more fields
artworkUrlartworkUrl
genresgenres
primaryGenreprimaryGenre
countrycountry
contentRatingcontentRating
releaseDatereleaseDate
searchTermsearchTerm
publishedAtpublishedAt
durationSecdurationSec
audioUrlaudioUrl
podcastTitlepodcastTitle
podcastUuidpodcastUuid
durationMinutesdurationMinutes
changeTypechangeType
changedFieldschangedFields
firstSeenAtfirstSeenAt
lastSeenAtlastSeenAt

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "uuid": "c1a2b3d4-0000-4000-8000-aabbccddeeff",
  "url": "https://play.pocketcasts.com/podcasts/c1a2b3d4-0000-4000-8000-aabbccddeeff",
  "title": "Midnight Static",
  "author": "Alex Rivera",
  "slug": "midnight-static",
  "description": "A weekly look at unsolved mysteries and cold cases.",
  "descriptionHtml": "<p>A weekly look at unsolved mysteries and cold cases.</p>",
  "category": "True Crime",
  "explicit": false,
  "showType": "episodic",
  "audioOnly": true,
  "isPrivate": false,
  "transcriptEligible": true,
  "episodeFrequency": "Weekly",
  "estimatedNextEpisodeAt": "2026-10-05T09:00:00Z",
  "episodeCount": 184,
  "hasSeasons": true,
  "seasonCount": 4,
  "hasMoreEpisodes": false,
  "fundings": [
    {
      "url": "https://example.com/support-midnight-static",
      "title": "Support the show"
    }
  ],
  "ratingAverage": 4.6,
  "ratingTotal": 3120,
  "feedUrl": "https://feeds.example.com/midnight-static",
  "itunesId": "1000000001",
  "website": "https://midnightstatic.example.com",
  "episodeCountReturned": 1,
  "episodes": [
    {
      "uuid": "d5e6f7a8-0000-4000-8000-112233445566",
      "url": "https://play.pocketcasts.com/podcasts/c1a2b3d4-0000-4000-8000-aabbccddeeff/d5e6f7a8-0000-4000-8000-112233445566",
      "title": "Episode 142: The Vanishing Signal",
      "slug": "episode-142-the-vanishing-signal",
      "season": 4,
      "number": 142,
      "type": "full",
      "durationSec": 2760,
      "publishedAt": "2026-09-28T09:00:00",
      "fileType": "audio/mp3",
      "fileSizeBytes": 44200000,
      "audioUrl": "https://cdn.example.com/midnight-static/episode-142.mp3",
      "hasGeneratedTranscript": true,
      "podcastUuid": "c1a2b3d4-0000-4000-8000-aabbccddeeff",
      "podcastTitle": "Midnight Static"
    }
  ]
}

Ways to use this data

  • Podcast market research: rank shows by native listener ratings and volume across categories and regions.
  • Catalog and directory building: pull complete episode archives with direct audio URLs for indexing or syndication.
  • Trend and cadence tracking: monitor publishing frequency and estimated next-episode times across a niche.
  • Content and creator discovery: find podcasts by topic or keyword, including their funding and support links.
  • Global content monitoring: schedule recurring runs and collect only new or updated shows and episodes.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Pocket Casts Podcast Scraper return?

The documented output for Pocket Casts Podcast Scraper includes title, author, category, ratingaverage, ratingtotal, episodecount, episodefrequency and estimatednextepisodeat. Availability of each field depends on the source page and the selected mode.

How much does Pocket Casts Podcast Scraper cost?

It costs $2.50 per 1,000 results on the Apify Free plan and from $1.80 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Which fields mirror the iTunes-style podcast scrapers?

Podcast rows carry podcastId (Apple ID when known, otherwise null), podcastName, artistName, artworkUrl, genres, primaryGenre, country (chart region), contentRating, releaseDate (latest episode), searchTerm and scrapedAt. Episodes add episodeId, episodeName, durationMinutes, episodeUrl, episodeNumber and episodeSource. fullDescription is the podcast's long description, and guid is filled only when the source provides it, otherwise null. These extra fields are left out of change detection in incremental mode, so they never mark a row as updated.

Can I get only new or changed podcasts on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared records, and unchanged ones are not billed unless you turn on Emit unchanged.

Why did an incremental run with Emit expired return far more rows than Max podcasts?

emitExpired tombstones every previously tracked record this run did not see again, and that pass has no cap of its own: it is not limited by Max podcasts or Max episodes. It only runs at all when the scan was complete (not capped, resumed, cut short or partly refused), but if today's search or chart simply turns up fewer live results than your stored history, the whole gap between the two gets pushed as EXPIRED in one run. Start emitExpired on a small state key before pointing it at a large tracked campaign, and expect the total row count (and bill) to include that full expired count.

Does Resume work in Episode search mode?

Not yet. resumeFromRunId correctly skips already-collected records in Podcast search, Discover and URL mode. In Episode search mode it is currently ignored, so a resumed run re-collects and re-bills every matching episode from scratch. Use Incremental mode for recurring Episode search runs instead.

Ready to collect with Pocket Casts Podcast Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.