Podcasts are a major medium for news, politics, health information, religion, education and entertainment, yet they remain under-studied compared with television, newspapers and social media. One reason is practical: there has been no simple, documented way to draw a defensible sample of podcasts, or to build a text corpus from them, without writing a crawler.
That has changed. The open Podcast Index catalogs about 4.7 million podcast RSS feeds, and services built on it, such as podsearch.org, parse around 3.2 million active feeds into searchable episodes. This guide is a methods primer for researchers in communication, media studies, political science, public health, linguistics, information science and related fields. It covers how to define a population, draw samples, build corpora, handle bias, address ethics and copyright, and make your work reproducible.
What kind of data is podcast data?
Before choosing a method, it helps to be precise about what you are observing.
Show-level metadata is published by the creator or their hosting platform in the RSS feed: title, author, description, categories, language, artwork, explicit flag, owner contact and website. It is self-reported and usually written for marketing.
Episode-level metadata is also in the feed: title, description or show notes, publish date, duration and audio file URL. Descriptions vary from a single sentence to long notes with links, timestamps and sponsor reads.
Derived measures are computed from the episode history: number of episodes, first and latest publish dates, publishing frequency, average length.
Podcast 2.0 data, where publishers include it, adds structured fields such as transcripts (<podcast:transcript>), chapters, soundbites and people with roles (<podcast:person>).
The audio itself is the primary text for many research questions, but it is large, copyrighted, and expensive to transcribe at scale.
Most large-N podcast research works with metadata and, where available, transcripts. Be explicit in your methods section about which layer your analysis uses, because conclusions drawn from titles and descriptions are about how shows present themselves, not necessarily about what is said in them.
Defining the population
Your population is rarely "all podcasts". Common choices:
- All active shows in a language (for example, English-language shows with an episode in the last 90 days).
- Shows in a domain (for example, health shows, defined by category and keywords).
- Popular shows (for example, those appearing in Apple Podcasts charts in a country over a period).
- Episodes about an event (for example, every episode mentioning an election or a disease outbreak within a date window).
Each implies a different sampling frame. Chart-based populations over-represent professionally produced, heavily marketed shows; catalog-based populations include vast numbers of small, amateur and dormant shows. Neither is wrong, but your conclusions only generalize to the population you defined.
Building a sampling frame from the catalog
A catalog export gives you one row per show with an ID, the RSS URL, category, language, episode count and first and latest publish dates. On the podsearch.org datasets page you can filter by category, language, hosting platform, episode count, publish-date ranges, the explicit flag and whether a contact email is present, and download a CSV. That CSV is your frame.
Simple random sampling
Once you have the frame, sample with a recorded random seed so others can reproduce the draw:
import pandas as pd
frame = pd.read_csv("frame_english_health_active.csv")
sample = frame.sample(n=400, random_state=20261024)
sample[["feed_id", "title", "rss_url"]].to_csv("sample_v1.csv", index=False)
Stratified sampling
Podcast populations are extremely skewed: a small number of shows have hundreds or thousands of episodes, and a long tail has a handful. If your research question concerns both, stratify by episode count, tenure or category, and weight results back to the population:
frame["size_stratum"] = pd.qcut(frame["episode_count"], q=4, labels=["q1", "q2", "q3", "q4"])
strat = frame.groupby("size_stratum", group_keys=False).apply(
lambda g: g.sample(n=100, random_state=20261024))
weights = frame["size_stratum"].value_counts() / strat["size_stratum"].value_counts()
Episode-level sampling
To study content, sample episodes rather than shows. A two-stage design is common: sample shows from the frame, then sample a fixed number of episodes per show from their feeds or from the API. This prevents prolific daily shows from dominating the corpus.
Building a text corpus
From metadata
Titles and descriptions are available for nearly every episode and are suitable for topic modeling, framing analysis, sponsor detection and language studies. With the podsearch.org API (ListenNotes-compatible, at https://podsearch.org/api/v2), GET /podcasts/{id} returns a show and its episodes newest first, with a cursor (next_episode_pub_date) to page backwards:
def all_episodes(api, feed_id, max_pages=50):
out, cursor = [], None
for _ in range(max_pages):
params = {"next_episode_pub_date": cursor} if cursor else {}
pod = api.get(f"/podcasts/{feed_id}", **params)
out.extend(pod.get("episodes", []))
cursor = pod.get("next_episode_pub_date")
if not cursor:
break
return out
Store the raw JSON you receive, with the retrieval date, before any cleaning. You will want it when a reviewer asks how a particular record was processed.
From search
For event or topic studies, full-text search is often the more natural frame: "all episodes published between two dates whose title or description mentions a term". Use phrase queries, boolean syntax and date filters (epoch milliseconds):
q = '("measles" OR "MMR vaccine") AND NOT episode:trailer'
res = api.get("/search", q=q, syntax="dql", type="episode",
published_after=1735689600000, published_before=1767225600000,
page_size=100)
Search results are ranked by relevance, not drawn at random. If you need a probability sample of matching episodes, retrieve the full matching set (paging with next_offset) and sample from it, or sort by date (sort_by_date=1) and take all results within each date window.
From transcripts
Where publishers provide transcripts, GET /episodes/{id}?show_transcript=1 returns the text, and deep_search=1 on /search includes transcript content in matching. Transcript availability is not random: it is more common on certain hosting platforms and among professionally produced shows. Any analysis restricted to transcribed episodes should test whether transcribed and untranscribed shows differ on observable characteristics.
If you transcribe audio yourself with automatic speech recognition, document the model and version, and report an error rate on a hand-checked subset.
Sources of bias to report
Every podcast dataset has biases. Naming them strengthens a paper.
- Coverage bias. The catalog includes feeds submitted to or discovered by the Podcast Index. Shows exclusive to a single platform and not distributed by RSS are absent by design.
- Self-reporting. Categories, languages, explicit flags and publish dates are set by publishers and are sometimes wrong. Normalize language codes and spot-check categories.
- Survivorship. Feeds that were deleted are absent; your sample over-represents shows that kept their feeds online.
- Activity skew. Most feeds are small or dormant. Population statistics without an activity filter describe the archive, not the current medium.
- Transcript selection. As noted, shows that publish transcripts differ systematically.
- Machine-generated content. A growing number of shows are generated by AI. podsearch.org runs an LLM classifier on demand and labels shows "likely AI" only at 0.9 confidence or higher. Coverage is partial: an absent label means not yet judged. If AI-generated content matters to your question, report how you identified it and its limitations.
Ethics
Podcast metadata is published openly for distribution, which makes it public in a practical sense. Public is not the same as ethically unproblematic.
Personal data. Host names, guest names, owner emails and personal stories are personal data under laws such as the EU GDPR. Check whether your institution's review board considers your study human-subjects research. Many boards treat analysis of published media as exempt, but quoting identifiable non-public figures, collecting contact data, or linking podcast identities to other datasets may change that.
Minimize what you keep. If your analysis does not need owner emails, drop them on import. Store pseudonymous IDs (feed_id) rather than names where possible.
Vulnerable groups. Shows by and about minors, people in crisis, health conditions or marginalized communities deserve extra care when quoting or characterizing.
Contact. Do not use contact emails from a research dataset for recruitment unless your protocol and ethics approval explicitly allow it.
Copyright and terms
Audio and transcripts are typically copyrighted by their creators. Metadata such as titles and descriptions is also authored text. Text-and-data-mining rights vary by country: some jurisdictions provide exceptions for non-commercial research, others are less clear. Practical guidelines:
- Analyze, do not republish. Share derived data (counts, topic distributions, IDs) rather than full transcripts.
- Quote briefly and attribute.
- Share your corpus as lists of identifiers (feed IDs, RSS URLs, episode GUIDs) plus code, so others can rebuild it, rather than redistributing content.
- Respect the terms of any data provider you use and of the source feeds.
Reproducibility
Podcast data changes daily. Feeds add episodes, edit descriptions, change hosts and disappear. A reproducible study records enough to explain exactly what was observed and when.
- Record retrieval dates for every export and API call.
- Keep stable identifiers:
feed_id,rss_url,itunes_idwhere present, and episode GUIDs (guid_from_rss). - Save the exact filters and queries, including boolean syntax and date bounds, in your repository.
- Fix random seeds for every sampling step.
- Archive raw responses alongside processed data, with checksums.
- Describe the source chain: for example, "Podcast Index catalog, accessed via podsearch.org dataset export on 2026-10-24 and API between 2026-10-24 and 2026-10-31."
A data availability statement might read: "The sampling frame and episode identifiers are available in the replication archive. Episode metadata can be re-retrieved from the listed RSS feeds or via the podsearch.org API; content may have changed since collection."
Example research designs
To make the methods concrete, here are four designs that fit the data well.
Health misinformation in wellness podcasts. Population: English-language shows in Health & Fitness, active within 90 days. Frame: catalog export. Sample: 300 shows stratified by episode count, then five recent episodes per show. Measures: claims coded from descriptions and, where available, transcripts. Limitation to report: transcript availability differs by stratum.
Political podcast growth around an election. Population: shows whose titles or descriptions match a political vocabulary, in a given language. Frame: full-text search, run monthly for the two years around the election. Measures: new show launches per month (from first episode dates) and episode volume per month (from date-bounded searches, counted by paging through the results). Limitation: keyword matching is imperfect, so validate with a hand-coded sample each quarter.
Language diversity in religious podcasting. Population: Religion & Spirituality shows, all languages. Frame: catalog export without language filter. Measures: distribution of normalized language codes, tenure and cadence by language. Limitation: self-declared language codes, so spot-check a sample of shows in each language.
Guest networks in business interview shows. Population: active Business shows with tagged people. Frame: shows whose episodes carry <podcast:person> tags, supplemented by quoted-name searches. Measures: a bipartite network of guests and shows. Limitation: tagging is voluntary, so the network over-represents shows on platforms that generate person tags.
Each design pairs a population with a frame the data can actually support, and names the limitation a reviewer is most likely to raise.
Budgeting
Academic budgets are often small and one-off, which suits per-row pricing. A podsearch.org dataset costs $0.10 per podcast under 1,000 shows, $0.08 from 1,000, $0.05 from 5,000 and $0.03 from 10,000, with a $60 minimum, paid once. A frame of 8,000 shows costs $400. For episode-level collection, the API's Free plan (150 requests a month) is enough for piloting; the Pro plan at $100 a month includes 5,000 requests, with metered usage beyond. Plan request counts from your sampling design: one request per show page of episodes, one per search page.
Pre-registration and pilot studies
Podcast studies benefit from the same discipline as survey research. Before collecting at scale, run a pilot on 50 shows to test your coding scheme, estimate how many episodes lack usable descriptions or transcripts, and measure request costs. Then pre-register the population definition, sampling plan and primary measures. Reviewers are far more comfortable with a messy medium when the method was fixed in advance.
Frequently asked questions
Is podcast metadata public data?
It is published openly in RSS feeds for distribution to apps and directories. It can still contain personal data, so apply your institution's ethics guidance and relevant data protection law.
How do I cite podcast data?
Cite the catalog and access route with dates, for example the Podcast Index catalog accessed via a podsearch.org export on a given date, and include your identifier lists in a replication archive.
Can I get transcripts for every episode?
No. Transcripts exist only where publishers provide them. Treat transcript-based analyses as a sub-sample and test for selection bias, or budget for your own speech recognition.
How do I avoid prolific shows dominating my corpus?
Sample episodes in two stages, first shows and then a fixed number of episodes per show, or use unique_podcasts=1 on search to cap results at one episode per show.
How do I identify AI-generated podcasts?
podsearch.org offers LLM-based labels at a high confidence threshold with partial coverage. For research, combine such labels with your own coding of a validation sample and report agreement.
Summary
Podcasts can now be studied at scale with the same rigor as other media. Define your population, build a frame from the open catalog, sample with recorded seeds, build corpora from metadata, search and transcripts with their biases in view, treat personal data and copyright with care, and record enough detail that another researcher could rebuild your dataset. The medium deserves the attention, and the data is finally there to support it.