Blog

What Is a Podcast RSS Feed? One of Our Own Feeds, Read Tag by Tag

A podcast RSS feed is one XML file at a fixed web address that describes a show and lists its episodes, each with a link to the audio file. Podcast apps and directories read that file, not the audio, to find out what is new. Below is a real feed from one of our series, read tag by tag.

8 min read By

I build PodThis. Each of our own podcast series has an RSS feed on podthis.co, and so does every creator profile with public episodes. This post opens one of those feeds and explains what each part does. The example is the feed of Orcas: The Apex Intelligence, a three-episode series from our PodThis Wild World show, as it was served on 8 October 2026.

Once you have a feed, the next question is where to send it. That is the subject of the companion post, which podcast directories index an RSS feed.

What a podcast RSS feed is

RSS is a plain text format for publishing a list of updates. A podcast feed is an RSS 2.0 file with two layers. The outer channel describes the show: its name, description, language, artwork and owner. Inside the channel, one item per episode carries the title, the date and an enclosure. The enclosure is the address of the audio file, with its type and its size.

Two sets of extra tags sit on top of plain RSS. Apple’s tags carry the itunes prefix and cover things like the category, the cover art and the explicit flag. The Podcasting 2.0 tags from Podcast Index carry the podcast prefix and add transcripts, chapters and a permanent show id. Both sets are declared at the top of the file, so an app that does not know a tag can skip it.

Why directories read the feed instead of the audio

A directory such as Apple Podcasts or Spotify keeps the address of your feed. It reads the feed on a schedule and lists the episodes it finds there. The audio file stays at the address in each enclosure tag. That is why a new episode needs no new submission. You add an item to the feed, and every directory that reads it sees the episode on its next visit.

It also means a feed is fetched again and again, so it should be cheap to fetch. Our feeds answer with an ETag, a fingerprint of the whole file. An app that sends the fingerprint back gets a short HTTP 304 answer, "not modified", with no body when nothing has changed. On 8 October I tried it on the orca feed: the full file is about 7.8 KB, and the 304 answer is empty.

A podcast RSS feed example, annotated

This is the orca feed cut to 25 lines. I left out the medium, person, funding and podroll tags of the channel and two of the three episodes, and shortened the long storage addresses to "…". Everything else is as served, in the order it was served.

<rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:podcast="https://podcastindex.org/namespace/1.0" …>
<channel>
<title>Orcas: The Apex Intelligence</title>
<link>https://podthis.co/series/orcas-the-apex-intelligence</link>
<description><![CDATA[They are the ocean's undisputed apex predators, …]]></description>
<language>en</language>
<itunes:author>PodThis</itunes:author>
<itunes:owner><itunes:name>PodThis</itunes:name><itunes:email>contact@podthis.co</itunes:email></itunes:owner>
<itunes:explicit>false</itunes:explicit>
<itunes:type>episodic</itunes:type>
<podcast:locked>no</podcast:locked>
<podcast:guid>bfeb991c-5c49-56d6-9a4e-20768289b94c</podcast:guid>
<itunes:image href="https://storage.googleapis.com/…/cover.png"/>
<itunes:category text="History"/>
<item>
<title>The Perfect Predator</title>
<enclosure url="https://storage.googleapis.com/…/audio/….mp3" type="audio/mpeg" length="11561119"/>
<guid isPermaLink="false">…</guid>
<pubDate>Sat, 03 Oct 2026 06:24:38 +0000</pubDate>
<itunes:episode>1</itunes:episode>
<itunes:duration>578</itunes:duration>
<podcast:transcript url="https://podthis.co/…/episodes/1/transcript.txt" type="text/plain"/>
<podcast:chapters url="https://podthis.co/…/episodes/1/chapters.json" type="application/json+chapters"/>
</item>
</channel>
Excerpt of https://podthis.co/api/v1/public/series/orcas-the-apex-intelligence/feed.xml, fetched 8 October 2026.

Read from the top:

  • rss and the two xmlns attributes. The file says it is RSS 2.0 and names the two extra tag sets: the itunes namespace is Apple’s, the podcast namespace is Podcast Index’s. Apple also asks for the UTF-8 declaration on the first line of the file.
  • title, link, description, language. The show’s name, its page on podthis.co, its blurb and its language code. Apple requires title, description and language for every show and recommends link.
  • itunes:author and itunes:owner. Who made the show, and who to contact about it. In our feeds the owner is always PodThis at contact@podthis.co, never a user’s own e-mail address.
  • itunes:explicit. true or false. Apple requires it and shows an Explicit badge when it is true.
  • itunes:type. episodic means the episodes can be heard in any order; serial means a listener should start at episode 1.
  • podcast:locked. no tells other podcast hosts that they may import this feed. yes asks them to refuse.
  • podcast:guid. A permanent id for the show that survives a change of host. The spec builds it as a version 5 UUID from the feed address without the https:// part, so anyone can recompute it. I did, and got the value above.
  • itunes:image. The show cover. Apple requires one and accepts JPEG or PNG in RGB, from 1,400 by 1,400 up to 3,000 by 3,000 pixels.
  • itunes:category. One of Apple’s fixed category names, required for every show. History is what this series record says. For orcas it is the wrong shelf, and our Wild World show on Transistor is filed under Pets & Animals and Nature instead.
  • item with title, enclosure and guid. Apple requires all three for every episode. The enclosure has three attributes: url, type (audio/mpeg for MP3) and length, the file size in bytes. This episode’s file is 11,561,119 bytes, a little over 11 MB.
  • pubDate, itunes:episode, itunes:duration. The publish date, the episode number and the running time. Apple accepts several duration formats and recommends plain seconds: 578 seconds is just under ten minutes.
  • podcast:transcript and podcast:chapters. Addresses of a plain-text transcript and a JSON chapter list. Apps that support these tags show them next to the player. text/plain and application/json+chapters are types the Podcasting 2.0 spec names for them.

How PodThis builds a feed for each show

Every feed on podthis.co comes out of one builder in our API. It renders two kinds of feed: one per series, at /api/v1/public/series/ followed by the series name and /feed.xml, and one per creator profile, at podthis.co/@ followed by the username and /feed.xml. A handler loads the episodes, the builder writes the XML, and nothing else in our code writes feed XML. A test compares the series feed with a saved copy byte for byte, and a lint step checks Apple’s required tags on every feed the tests render.

  • Released episodes only. A series feed lists an episode once it is published and its audio plays.
  • Real file sizes. The enclosure length of a series episode is read from the audio file after it is made, not estimated. In a creator feed, an episode whose size could not be read is sent with length="0".
  • Recommendations. The podroll tag lists up to ten of our other public series in the same language. The orca feed points at one other English series.
  • Clean addresses. The builder percent-encodes any non-ASCII character in a URL and drops characters that XML 1.0 forbids, so a title with å, ä or ö cannot break the file.

One thing to be clear about: Apple and Spotify do not read these feeds for our four featured shows. Those shows are hosted on Transistor, and Transistor writes the feeds the directories read. Our own series feed is for RSS readers and for anyone who follows a series by its address. We chose not to submit both, because two feeds for one show give each directory two copies of it.

What breaks a podcast RSS feed

  • A wrong MIME type on the enclosure. Apple lists the types it accepts: audio/mpeg for MP3, audio/x-m4a for M4A, video/mp4, video/x-m4v and video/quicktime for video, and application/pdf. An MP3 labelled with anything other than audio/mpeg falls outside that list.
  • Missing or changing GUIDs. Apple requires a guid on every episode and says it must never change, even when you edit the episode. GUIDs are also case-sensitive. Apps recognise an episode by its guid, so a changed guid can make an old episode show up again as new. Ours are the episode’s id in our database, marked isPermaLink="false" because they are not web addresses.
  • Cover art outside the size range. Apple accepts show art from 1,400 to 3,000 pixels on a side. Our own example is outside it today: the orca feed’s cover is 1,024 by 1,024 pixels, below the minimum. The directories never see it, because they read the Transistor feed and its 3,000-pixel show cover, but as a feed of its own it would not meet Apple’s requirement. I have noted it as a fix.
  • A wrong length. length is the file size in bytes. A guess, or a size left over from an older version of the file, gives apps the wrong number before the download starts.
  • Moving without a redirect. Apple asks for an itunes:new-feed-url tag in the old feed when the address changes, and for the old feed to stay up until followers have moved. When we changed hosts in September we started fresh instead. The directories post shows what that cost: old copies of our two Swedish shows are still listed in other catalogues.
  • An empty owner e-mail. Spotify’s ownership check sends its code to the owner address in the feed. Two of our Swedish feeds had none, and the claim failed until the address was added.

How to create a podcast RSS feed

Most podcasters never write a feed by hand. A podcast host writes it from the show settings and adds an item for each episode you publish. If you do write one yourself, start with the tags Apple requires. For the show: title, description, itunes:image, language, itunes:category and itunes:explicit. For every episode: title, enclosure and guid. Apple also recommends itunes:author and link for the show, and pubDate, description, itunes:duration, link, itunes:image and itunes:explicit for each episode.

Put the file at an address that will not change and that anyone can open without a password, which is also an Apple rule. Give each episode its guid once and never touch it again. Before you submit anywhere, open the feed in a podcast app that can follow a show by URL and play an episode from it.

On PodThis there is nothing to write. A creator profile with public episodes has a feed at podthis.co/@ followed by your username and /feed.xml, and you can paste that address into any podcast app that follows shows by URL. To list your episodes in Apple Podcasts or Spotify under your own name, download the audio and publish it through a podcast host of your own. The directories post lists what each directory checks before it accepts a feed.

How I checked

I fetched the orca feed on 8 October 2026 and compared every tag in the excerpt with two sources: Apple’s podcast RSS requirements in the Podcasts Connect help, and the Podcasting 2.0 namespace documentation from Podcast Index. I recomputed the podcast:guid with the method in the spec. The cover size, the audio file size and the 304 answer were read from the live files the same day.

AI use: this post was drafted with AI assistance from our feed code, our publishing notes and the live feed. I read every sentence and checked every tag name against the specifications before it went live. How PodThis writes and reviews: editorial policy.

To hear the series behind these feeds, start on the PodThis series page.

Make your own

A topic, a text or a document in; a researched, voiced episode with chapters and a transcript out. 5 free credits to start, 3 more every month.