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.
| Input | What it controls |
|---|---|
modestring · required | How to find podcasts: keyword search, category charts, global episode search, or paste Pocket Casts URLs. |
searchTermsarray | Keywords to search for (Search and Episode search modes). |
categoriesarray | Category charts to scrape (Discover mode). |
regionstring | Country whose charts to return (Discover mode). All 37 verified regions are localized. |
customRegionstring | Optional. 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. |
countrystring | Optional 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. |
urlsarray | Pocket 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
| Input | What it controls |
|---|---|
podcastIdsarray | Optional 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. |
maxPodcastsinteger | Stop after this many podcasts (hard ceiling 100000; 0 is read as the ceiling). |
maxResultsinteger | Optional 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). |
maxEpisodesinteger | Stop after this many episode records in Episode search mode (hard ceiling 100000; 0 is read as the ceiling). |
maxEpisodesPerPodcastinteger | Cap 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. |
sortBystring | Podcast 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. |
includeEpisodesboolean | Embed the episode archive inside each podcast record. |
includeRatingsboolean | Fetch Pocket Casts native ratings (average + total votes) for each podcast. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large pull without returning items already collected there. |
incrementalModeboolean | Turn 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. |
stateKeystring | Optional. 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. |
emitUnchangedboolean | Off 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. |
emitExpiredboolean | Off 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. |
ignoreFieldsForChangesarray | Incremental 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. |
mcpConnectorsarray | Optionally 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. |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap 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.
titletitleauthorauthorcategorycategoryratingAverageratingAverageratingTotalratingTotalepisodeCountepisodeCountepisodeFrequencyepisodeFrequencyestimatedNextEpisodeAtestimatedNextEpisodeAtuuiduuidurlurlpodcastNamepodcastNameartistNameartistNameShow 17 more fields
artworkUrlartworkUrlgenresgenresprimaryGenreprimaryGenrecountrycountrycontentRatingcontentRatingreleaseDatereleaseDatesearchTermsearchTermpublishedAtpublishedAtdurationSecdurationSecaudioUrlaudioUrlpodcastTitlepodcastTitlepodcastUuidpodcastUuiddurationMinutesdurationMinuteschangeTypechangeTypechangedFieldschangedFieldsfirstSeenAtfirstSeenAtlastSeenAtlastSeenAtExample 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.
