Spotify Podcast Episodes Monitor - New Episodes & Ratings avatar

Spotify Podcast Episodes Monitor - New Episodes & Ratings

Pricing

from $1.40 / 1,000 episode returneds

Go to Apify Store
Spotify Podcast Episodes Monitor - New Episodes & Ratings

Spotify Podcast Episodes Monitor - New Episodes & Ratings

Latest episodes and show details for Spotify podcasts: title, release time, duration and link of each episode in the public show page, plus publisher, rating average, rating count and episode total. Monitoring mode returns only new episodes and rating changes.

Pricing

from $1.40 / 1,000 episode returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

4 days ago

Last modified

Share

Spotify Podcast Episodes Monitor

The latest episodes and the show details of Spotify podcasts, read from the public show page: for each episode its title, release time (to the minute), duration, the start of its description and its link; for each show its name, publisher, rating average and rating count, total number of episodes, language and topics. With monitoring on, a run returns only the episodes that are new since the last run and the shows whose rating count changed - and a show with nothing new costs one small check instead of a row.

Paste shows as page URLs, spotify:show: URIs or 22-character show IDs, mixed in one list.

This Actor reads the public show page only. That page carries the most recent episodes of a show (12 when this was measured), not its whole back catalogue. Every show row says how many episodes were in the page and how many the show has in total. No audio, no transcripts, no follower or play counts: those are not in the page.

What you get

Two kinds of rows, told apart by type.

type: "show" - one per show:

FieldMeaning
showName, publisherAs Spotify writes them in the show page
ratingAverageAverage star rating, rounded to two decimals. null when the show has no ratings or Spotify does not display an average
ratingCountNumber of ratings, the integer in the page data
totalEpisodesNumber of episodes the show has, as stated in the page
episodesOnPage, episodesCoverageHow many episodes were in the public page, as a number and as a sentence ("12 of 2759 episodes were in the public show page")
latestEpisodeName, latestEpisodeReleasedAtThe first episode in the page
description, language, topics, isExplicit, mediaTypeAs stated in the page. language is what the publisher declared
showId, showUrl, inputThe show that was read and the line you gave for it
pageCountryCountry of the connection the page was built for
ratingCountChange, totalEpisodesChange, newEpisodesInPage, changedFields, previous...Monitoring only: what moved since the last reported figures

type: "episode" - one per episode found in the show page:

FieldMeaning
episodeNameEpisode title
releasedAt, releaseDatePrecisionRelease time as an ISO timestamp (UTC) and the precision Spotify states for it
durationSeconds, durationMsLength of the episode
descriptionStart, descriptionLengthThe first 500 characters of the episode description, and the length of the full description
episodeUrl, episodeIdLink and ID of the episode
positionPlace in the show page (1 = first, which is the newest in every show measured)
isExplicit, isPaywalled, mediaTypesAs stated in the page
showName, showId, showUrlThe show the episode was listed under
isNewMonitoring only: true for an episode that was not there at the previous run

A value that is not in the page is null, never 0 or a guess.

Only the episodes in the public page

Spotify puts the most recent episodes of a show into its public page and loads older ones only inside its own player. This Actor does not use the player's internal API, a login or an API token, so it returns the episodes in the page: enough to follow what a show publishes, not to export an archive of hundreds of episodes.

Why every row names the show it read

The show ID in each row is checked against the ID in the page data before anything is taken from it, and every episode row carries the show name stated in the page. If Spotify answers with a different page, the line comes back as a row that explains what happened and is not charged.

Input

  • shows - show URLs (https://open.spotify.com/show/4rOoJ6Egrf8K2IrywzwOMk), spotify:show: URIs or show IDs. Links with intl-xx/ or ?si= are fine. Episode, artist and playlist links are not read (for artists and playlists see Spotify Monthly Listeners Tracker and Spotify Playlist Tracker).
  • maxEpisodesPerShow - with monitoring off, how many of the episodes in the page to return per show (0 = show row only).
  • maxShows - with monitoring off, stop after this many shows.
  • monitoringMode, watch, minRatingCountChange - see below.
  • resetMonitoringState - forget every remembered show on your account, so each one is treated as a first check again.
  • useProxy - on by default: if Spotify answers HTTP 403 or 429, the page is requested once more through an Apify residential proxy (at most three times in a run). Turn it off to never use a proxy.

Monitoring mode

Turn on monitoringMode and run the Actor on a schedule with the same shows.

  1. First check of a show: the episode IDs in its page, its rating count and its episode total are remembered. Nothing is returned for it and nothing is charged; you get a first-check note row.
  2. Later runs: each show is read again and compared.
    • An episode that was not there before comes back as an episode row with isNew: true.
    • A show row comes back when the rating count moved by at least minRatingCountChange (for shows with 1,000 ratings or more: by at least 3, because the public figure of a large show can differ by 1 from one read to the next), or when the episode total moved by a number that the new episodes found in the page do not explain (episodes were removed, or more were published than the page shows). changedFields says which: rating, episode-count or both.
    • A show with nothing to return is charged as one check and produces no row. If no show had anything, the dataset holds one no-change note.

watch narrows this: episodes-only ignores rating changes (the rating count of a large show moves every day), ratings-only does not return new episodes.

What is remembered is what was actually delivered. If the maximum charge of a run is reached before every new episode fits, the ones that did not fit are not remembered and come back in a later run.

Three things to know:

  • The page shows only the most recent episodes. If a show publishes more episodes between two runs than the page holds, the older ones of those are not seen as episode rows; the show row then reports the gap (totalEpisodesChange larger than newEpisodesInPage). Run often enough for the shows you watch.
  • An episode counts as new when its ID was not seen before and it was released after the oldest episode of the previously remembered page. An old episode that reappears because a newer one was removed is therefore not reported as new; an episode published with a release date older than that, or without a readable release date, is not reported either. Shows whose page already lists every episode are exempt from this date rule.
  • Shows are remembered one by one on your account, not per list. Adding a show does not reset the others. Do not run two schedules with the same show at the same moment: the remembered state has no locking.

What is charged

  • episode-returned - each episode row.
  • show-returned - each show row.
  • show-checked - in monitoring mode, each show that was compared and had nothing to return.

Not charged: first monitoring checks, and every note row (see below).

Rows that explain instead of failing

Rows with type: "note" are never charged. Their status says what happened:

statusMeaning
no-such-showSpotify answered 404 for this ID (removed, or not a podcast show)
not-availableSpotify answered with its "not currently available" page: the show is not offered, at least not in the country the page was read from
invalid-inputThe line is not a show link, URI or ID (the note says what it looks like)
duplicate-inputThe same show was already given on an earlier line
unreadableThe page came back without the show data, or in a form that could not be read
blockedSpotify refused the request; the run stops asking and lists what it did not read
robots-disallowedSpotify's robots.txt disallows the page, so it was not requested
first-checkMonitoring: the show was remembered as a starting point
no-changeMonitoring: nothing was new in any show that was compared
not-readLines the run did not get to, and why
budget-reachedThe run's maximum total charge was reached before every ready row could be delivered

Limits

  • Episodes: only those in the public show page (see above). Not a full archive.
  • No audio, no transcripts, no follower counts, no play counts. They are not in the public page, and audio is deliberately not touched.
  • Ratings are Spotify's own listener ratings as stated in the page. They are not Apple Podcasts ratings.
  • Country: Spotify builds the page for the country of the connection (pageCountry). A show that is not offered there comes back as not-available.
  • Only the public show page (open.spotify.com/show/<id>) is requested, one page per show, about one request every two seconds, with a User-Agent that identifies this Actor. Spotify's robots.txt is read at the start of every run and each page is checked against it. No login, no Spotify API token, no embed pages. If Spotify stops serving the data in that page, rows come back as unreadable rather than as guesses.
  • This Actor is not affiliated with, endorsed by or sponsored by Spotify. Spotify's terms of use restrict automated collection from its service; decide for yourself whether your use is permitted before you run it.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.