← Guides

How-to

How to run Spotify Podcast Transcript Scraper & Keyword Monitor

Step-by-step: the exact input, what each field does, and the rows that come back from Spotify.

You want the words of a podcast episode as text: to quote a guest, cut clips, write show notes, or find every place a show said your company’s name. Spotify already transcribes most big shows and shows the transcript under the episode in its app, but only to a signed-in listener, one episode at a time, with nothing to export. Speech-to-text tools fill the gap by billing per audio minute, so a 3-hour Joe Rogan episode costs nine times a 20-minute one. This actor returns Spotify’s own transcript instead, for a flat $0.02 per episode.

What you’ll need

Nothing but an Apify account. The actor talks to Spotify directly.

You don’t need a Spotify account. Spotify serves transcripts only to a signed-in listener (on 2026-11-04, 0 of 52 episodes showed one to an anonymous visitor), so the actor reads them through our own Spotify login and pays for that access itself. If that access ever lapses, a run returns one free blocked row saying so and charges nothing, and we are alerted to renew it. No audio is downloaded or processed.

Step 1 — Open the actor

Open Spotify Podcast Transcript Scraper & Keyword Monitor on the Apify Store and press Try for free. The actor’s own page on this site lists its live health and pricing.

The Spotify Podcast Transcript Scraper & Keyword Monitor listing on the Apify Store
The listing on the Apify Store. Pricing and the nightly health record are both public.

Step 2 — Fill in the input

The input form for Spotify Podcast Transcript Scraper & Keyword Monitor in the Apify Console
The input form, as it appears in the Apify Console.
FieldTypeRequiredWhat it does
episodesarraynoOne per line: Spotify episode links (https://open.spotify.com/episode/…), spotify:episode: URIs or bare episode ids. Each one returns its transcript. (default [])
episodestringnoOne episode link or id, for saved tasks and API calls that send a single value. Use the list above for several.
showsarraynoOne per line: Spotify show links (https://open.spotify.com/show/…). Each returns its newest episodes that have a transcript, up to Maximum episodes. (default [])
showstringnoOne show link or id, for saved tasks and API calls that send a single value.
searchQueriesarraynoOne per line: words to search Spotify’s podcast episodes for (AI agents, your brand, a guest’s name). Spotify matches titles and descriptions and ranks by relevance; episodes… (default [])
searchQuerystringnoOne search, for saved tasks and API calls that send a single value.
maxEpisodesintegernoHow many episodes with a transcript to read for EACH show (newest first) and EACH search (most relevant first). Episode links are always all read. (default 10)
publishedAfterstringnoYYYY-MM-DD. Shows and searches skip episodes released before this day. Empty keeps every date.
keywordsarraynoOptional, one per line: words or phrases (your brand, a competitor, a person). Each row gets every line that says one (whole words, any case) with its timestamp and a link that… (default [])
keywordstringnoOne keyword, for saved tasks and API calls that send a single value.
onlyWithMentionsbooleannoWith keywords set: deliver (and charge) only the episodes whose transcript says at least one of them. Turn off to get every transcript with its mention count. (default True)
onlyNewbooleannoRemembers which episodes this same set of shows, searches and keywords already delivered, and skips them. Schedule it daily or weekly and you get, and pay for, only new episodes.
languagestringnoOptional language code (en, es, de, fr, pt-br…). Many big shows publish translated transcripts; when the episode has one in this language you get it, otherwise its original.…
includeTimestampsbooleannoAlso return the transcript as lines, each with its start time in milliseconds. The full text is always returned. (default True)
subtitleFormatstringnoAlso return the transcript as an SRT or WebVTT subtitle file (in the subtitles field). (default none)

Two choices decide what you get back:

  • Where the episodes come from. episodes takes links you already have. shows reads a show’s newest episodes that have a transcript, and searchQueries runs Spotify’s own episode search, which matches titles and descriptions. maxEpisodes caps each show and each search separately, so 2 shows at 10 is up to 20 transcripts. They can all be combined in one run.
  • keywords. Search finds episodes about a topic; keywords check what was actually said. With keywords set, onlyWithMentions is on by default, so an episode whose transcript never says one is read but not delivered or charged.

For a schedule, switch on onlyNew: the actor remembers which episodes that same set of shows, searches and keywords already delivered and skips them next time.

A working input:

{
  "searchQueries": [
    "ai agents"
  ],
  "keywords": [
    "OpenAI",
    "Claude"
  ],
  "maxEpisodes": 3,
  "publishedAfter": "2026-10-01",
  "subtitleFormat": "vtt",
  "includeTimestamps": false
}

Step 3 — Run it

Press Start. Rows are pushed to the dataset as they’re found, so the run log fills in as it works.

Runs are short. On 2026-11-04 the example input above returned 3 episodes from October (29,938 words) in 8 seconds, run outside Apify through one proxy. A “Shopify” search with the keyword Shopify returned 10 transcripts (101,809 words) in 9 seconds, and the first test-customer run on Apify itself, one episode, finished in 17 seconds.

An empty result is usually a narrow input, not a broken actor: a publishedAfter date with nothing newer, or keywords no transcript says. Each case leaves a free no_match row explaining it. An episode link Spotify has no transcript for also gets a free no_match row.

Step 4 — Read the output

Each run returns a labelled table, not raw JSON:

The output fields returned by Spotify Podcast Transcript Scraper & Keyword Monitor
The output view — every field the actor returns, named and typed.

Every row looks like this — a real row from a real run:

{
  "episode_id": "2wRBPdg9rB4KCgNaPAMnoZ",
  "episode_url": "https://open.spotify.com/episode/2wRBPdg9rB4KCgNaPAMnoZ",
  "episode_name": "OpenAI: When AI Agents Use Computers Faster Than You",
  "show_name": "The a16z Show",
  "release_date": "2026-10-26",
  "duration_seconds": 2654,
  "language": "en-us",
  "available_languages": [
    "en-us"
  ],
  "sync_level": "SYLLABLE_SYNCED",
  "word_count": 9268,
  "mention_count": 2,
  "mentions": [
    {
      "keyword": "OpenAI",
      "timestamp": "00:03:45",
      "text": "Think our goal at OpenAI is really about building products that's useful for everyone.",
      "url": "https://open.spotify.com/episode/2wRBPdg9rB4KCgNaPAMnoZ?t=225"
    }
  ],
  "text": "...",
  "subtitles": "WEBVTT\n\n...",
  "query": "search: ai agents"
}
FieldExample valueMeaning
episode_nameOpenAI: When AI Agents Use Computers Faster Than YouThe episode’s title
show_nameThe a16z ShowThe podcast
release_date2026-10-26Day the episode was published (YYYY-MM-DD)
duration_seconds2654Episode length in seconds
text...The full transcript, one line per sentence
lines—Each line with its start time in milliseconds (on by default)
subtitlesWEBVTT …The transcript as SRT or WebVTT, when asked for
mentions[{"keyword": "OpenAI", "timestamp": "00:03:45", "text": "Think our goal at OpenAI is really about building products that's useful for everyone.", "url": "https://open.spotify.com/episode/2wRBPdg9rB4KCgNaPAMnoZ?t=225"}]With keywords: each line that says one, with the keyword, a timestamp (HH:MM:SS) and a link that plays from that second

Most people came for text, the whole transcript one sentence per line, and with keywords for mentions: each one carries the line, a timestamp, and a ?t= link that opens the episode at that second, so a reader can hear the context in one click. lines repeats the transcript with each line’s start time in milliseconds; turn includeTimestamps off when you only need the text, since a 3-hour episode is about 35,000 words.

Three things to know. The transcript is Spotify’s machine transcription, so it has no speaker names and the occasional misheard word. sync_level says how precise the times are: SYLLABLE_SYNCED is exact to the word, while STATIC transcripts (4 of the 10 Shopify results) have coarser line times. And available_languages lists translations where Spotify made them: one Startup Ideas Podcast episode had 10.

Step 5 — Export it

Open the Dataset tab and export to CSV, JSON, or Excel — or pull the same rows from the API, which is what you want if this is going to run on a schedule.

What it costs

ChargePriceWhen
Transcript$0.02Each episode transcript delivered, whatever its length

Free: episodes without a transcript, episodes that never say your keywords (with onlyWithMentions on), episodes onlyNew skips, and every notice row. The example input above costs $0.06. The 10-episode Shopify search costs $0.20; scheduled daily with onlyNew, it charges only for episodes that are new since the day before.

Where the data comes from

This reads Spotify directly. The target is Plain HTTP calls to the same data open.spotify.com’s web player reads: its episode, show and search queries (persisted-query hashes read from the player’s own code at run start) and its transcript endpoint. No browser, no audio processing. Every night a canary runs this actor against that live source and diffs the result against a frozen fixture — what “verified” means.

Spotify shows a transcript tab under most big shows’ episodes, but only after you sign in, and the screenshot in the use-cases shows what a signed-out visitor gets: the description and a “Log in” button. Coverage also varies by show. On 2026-11-04, 29 of the first 30 search results for “ai agents” had a transcript, and 5 of the Joe Rogan Experience’s newest 7, but The Daily had one on roughly one episode a week, because the New York Times publishes its own.

See it used

Every Spotify podcast episode that mentions your brand sets up a daily mention monitor. The newest Joe Rogan Experience transcripts with SRT subtitles pulls a show’s latest episodes as text and subtitle files.

Watching what a brand says in paid media too? Google Ads Transparency Center & Competitor Ad Scraper lists the ads a company runs on Google.

Last updated 2026-11-04